Şimdi tartışacağımız bir sonraki API, bir mesaj kuyruğunu kapatmak için kullanılacak olan API'dir.
Yani API, MK alt çizgi kapanışıdır.
Yani bu mesaj kuyruğu kapatma API'si.
Ve bu API'nin argümanı basitçe mesaj kuyruğunun dosya tanımlayıcısıdır.
Bu API başarı durumunda sıfır, başarısızlık durumunda ise eksi bir döndürür.
Dolayısıyla, bir işlem bir mesaj kuyruğu kullanmayı bitirdiğinde bu API'yi çağırmalıdır.
Maske açma ve maske kapatmanın aslında birbirleriyle nasıl
işbirliği içinde çalıştığına dair birkaç nokta var.
Dolayısıyla, süreç mesaj kuyruğunu kapattığında, mesaj kuyruğu açma API'sini
kullanarak tekrar açmadığı sürece süreç mesaj kuyruğunu tekrar kullanamaz.
İşletim sistemi mesaj kuyruğunu yalnızca mesaj kuyruğunu kullanan
tüm işlemler kapatmışsa kaldırır ve geri yükler.
Doğru.
Örneğin, bir P1 süreci olduğunu ve bir mesaj kuyruğu açtığını varsayalım.
Doğru mu? Benzer şekilde, bir P2
süreci var ve aynı mesaj kuyruğunda
mesaj kuyruğu açma API'sini de çağırdı.
Ve bir P3 süreci olduğunu ve aynı mesaj
kuyruğunda mesaj kuyruğu açma API'sini de çağırdığını varsayalım.
Yani sistemde şu anda aynı mesaj kuyruğunu kullanan üç süreç var demektir.
Şimdi P3 süreci mesaj kuyruğu kapatma API'sini çağırırsa.
Dolayısıyla işletim sistemi bu mesaj kuyruğunu yok etmeyecek ve temizlemeyecektir
çünkü hala bu mesaj kuyruğunu kullanan bazı işlemler vardır.
Bu nedenle işletim sistemi mesaj kuyruğunu ancak ve ancak mesaj kuyruğunu
kullanan tüm süreçler mesaj kuyruğunu gerçekten çağırmışsa kaldırır ve yok eder.
API'yi kapat.
İşletim sistemi, aynı mesaj kuyruğunu kaç işlemin kullandığına ilişkin bilgileri tutar.
Yani, kaç işlemin mesaj kuyruğu açma API'sini çağırdığı.
Bu kavram referans sayımı olarak adlandırılır.
Yani mesaj kuyruğu daha önce bahsettiğimiz bir çekirdek kaynağıdır.
Yani mesaj kuyruğu, bir çekirdek kaynağı için sistem üzerinde
çalışan birkaç uygulama süreci tarafından kullanılan bir çekirdek kaynağıdır.
Çekirdek takip eder.
Söz konusu kaynağı gerçekte kaç kullanıcı alanı işleminin kullandığı.
Yani bu aslında genel bir ifadedir ve mesaj kuyruğu da dahil olmak üzere her çekirdek kaynağı için geçerlidir.
Bu nedenle, örneğimizdeki mesaj kuyruğu olan bir çekirdek kaynağı uygulama süreci tarafından
ilk kez oluşturulduğunda, referans sayısı değeri işletim sistemi tarafından bir olarak ayarlanır.
Başka süreçler de mevcut çekirdek kaynağı üzerinde open API'yi çağırırsa, çekirdek
veya işletim sistemi söz konusu çekirdek kaynağının referans sayısını bir artırır,
yani artık bir süreç daha söz konusu çekirdek kaynağını kullanıyor demektir.
Dolayısıyla, bir süreç kapatma sistemini çağırdığında, mesaj kuyruğu
kapatma olan mevcut bir çekirdek kaynağını çağırır.
Bizim durumumuzda, çekirdek veya işletim sistemi referans sayısını bir azaltır.
Doğru.
Bu şekilde, işletim sistemi herhangi bir zamanda aynı
çekirdek kaynağını gerçekte kaç işlemin kullandığını takip eder.
Ve söz konusu çekirdek kaynağının referans sayısı sıfıra ulaştığında, aslında
söz konusu çekirdek kaynağını kullanan bir süreç olmadığı anlamına gelir.
Bu, çekirdeğin veya işletim sisteminin artık söz konusu çekirdek kaynağını temizleyebileceği
veya yok edebileceği anlamına gelir ve bu mesaj kuyruğu da olabilir.
Unutmayın, çekirdek kaynağı herhangi bir şey olabilir, soket dosya
tanımlayıcısı olabilir, mesaj kuyruğu dosya tanımlayıcısı olabilir ve
herhangi bir şey olabilir, değil mi? İşte böyle.
Ucuz atlattık.
Ve işletim sistemi sadece mesaj kuyruğunu temizler ve tamamen yok eder.
Yalnızca bu mesaj kuyruğunun referans sayısı sıfıra ulaştığında.
Yani bu mesaj kuyruğu kapatma API'siydi.
Daha sonra, mesaj kuyruğundan mesajın nasıl gönderileceği
ve alınacağı ile ilgili API'yi tartışacağız.