Kilitli Bellekler Hakkında
Önceki Sayfaların Kilitlenmesi Sonraki
Kilitli Bellekler Hakkında
Bir bellek kilidi bir gerçek bellek çerçevesi ile değil, bir sanal sayfa ile ilişkilidir. Sayfalama kuralı: Bir çerçeveye en azından bir kilitli sayfa kopyalanmışsa, geriye sanal belleğe kopyalanmaz.
Bellek kilitleri yığıta atılmaz. Örneğin, belli bir sayfayı iki kere kilitleyemezsiniz, yani bir sayfa ya kilitlidir ya da değildir.
Bir bellek, süreç tarafından doğrudan doğruya kilidi açılmadıkça kilitli kalmaya devam eder. (Ancak sürecin sonlandırılması ve çalıştırma işlemi sanal belleğin mevcudiyetinin sona ermesine sebep olur ve artık o kilitli değildir diyebilirsiniz.)
Bellek kilitleri alt süreçler tarafından miras alınmaz. (Ancak, güncel bir Unix sisteminde, bir çatallamanın hemen ardından asıl ve alt sürecin sanal adres alanı aynı çerçevelere kopyalanır ve böylece alt süreç kendini çatallayan atasının kilitlerine sahip olur.) Bkz. Bir Sürecin Oluşturulması.
Diğer süreçleri etkilemesi nedeniyle bir sayfayı sadece süper kullanıcı kilitleyebildiği halde her süreç kendi sayfasının kilidini kaldırabilir.
Bir sürecin kilitleyebileceği bellek miktarının ve ona adanabilen gerçek bellek miktarının sınırını sistem belirler. Bkz. Özkaynak Kullanımın Sınırlanması.
Linux’ta kilitli sayfalar sizin düşündüğünüz gibi kilitlenmez. Belleği paylaşmayan iki sanal sayfa yine de aynı çerçeve tarafından kopyalanabilir. Her iki sayfanın aynı veriyi içerdiğini biliyorsa ve hatta sanal sayfalardan biri ya da her ikisi kilitli de olsa çekirdek bunu verimlilik adına yapar.
Ama bir süreç bu sayfalardan birini değiştirirse, çekirdek onu ayrı bir çerçeveye almalı ve çerçeveyi sayfanın verisi ile doldurmalıdır. Bu yazma sırasında kopyalanan sayfalama hatası olarak bilinir. Bu durum ve çerçevenin alınmasının G/Ç gerektirdiği marazi durumlarda biraz zaman alabilir.
Yazılımınızda bunun oluşmayacağından emin olmak için sayfaları kilitlemeyin. Onlara yazıp yazmayacacağınızı bilmeseniz bile onlara yazın. Ve yığıtınız için önceden ayrılmış çerçevelerin varlığından emin olmak için ihtiyaç duyduğunuz en büyük yığıt boyundan daha büyük bir C özdevinimli değişkeninin bidirildiği bir karmaşık deyime girip değişkene bazı şeyler atayın ve onu döndürün.
Önceki Üst Ana Başlık Sonraki
Sayfalar Neden Kilitlenir? Başlangıç Sayfaları Kilitleyen ve Kilitlerini Açan İşlevler
Bir Linux Kitaplığı Sayfası