mlockall bir sürecin sanal adres alanındaki ve/veya ilerde eklenecek tüm sayfaları kilitler. Bu alan, kod sayfalarını, veri ve yığıt bölütünü, paylaşımlı kütüphaneleri, kullanıcı alanı çekirdek verisini, paylaşımlı belleği ve bellek eşlemli dosyaları içerir.
bayraklar aşağıdaki makrolarla ifade edilen tek bitlik bayrakların bir dizgesidir. Bunlar mlockall'dan istediğiniz işlevselliği belirtmek için kullanılır. Tüm diğer bitler sıfır olmalıdır.
- MCL_CURRENT
Çağrılan sürecin sanal adres alanında o an mevcut olan tüm sayfalar kilitlenir.
- MCL_FUTURE
Sürecin sanal adres alanına gelecekte doğumundan itibaren eklenecek sayfaların kilitlenmesini sağlayacak kipi etkinleştirir. Bu kip aynı süreç tarafından sahiplenilecek alt süreçlerin gelecekteki adres alanları üzerinde etkili değildir. Örneğin süreç bir
exec çağrısı ile bir alt süreç çalıştırırsa bu kip, bu alt sürecin sayfaları için etkisizdir. Bkz.
Bir Dosyanın Çalıştırılması.
İşlev MCL_CURRENT bayrağıyla çağrılır ve başarılı olarak dönerse, bu sayfaların her biri bir gerçek bellek çerçevesi tarafından (kalıcı olarak) kopyalanır (çerçevelenir) ve kalıcı olarak imlenir. Bu, işlevin sayfayı gerçek belleğe
kopyalanmasına ve orada kalmasına sebep olması demektir.
Süreç MCL_FUTURE kipindeyse bu işlev başarılı olduğundan dolayıdır ve MCL_CURRENT belirtildiğinde, süreç tarafından sanal bellek alanına alan eklenmesini gerektiren bir sistem çağrısıyla ek alanın kilitlenmesi sürecin kilitli sayfa sınırının aşılmasına sebep oluyorsa işlev errno = ENOMEM hatasıyla başarısız olur. Bu durumda adres alanı eklemesi yığıt genişletmesi ile bağdaştırılamaz ve yığıt genişlemesi başarısız olur, bunun sonucunda da çekirdek sürece bir SIGSEGV sinyali gönderir.
İşlev başarısız olduğunda, kilitli sayfaların durumu ve gelecektekileri kilitleme kipi bundan etkinemez.
İşlev başarılı olduğunda dönen değer sıfırdır. Aksi takdirde, -1 döner ve errno ilgili hata değerine ayarlanır. Bu işleve özel errno değerleri:
- ENOMEM
-
Belirtilen adres aralığının en azından bir kısmı çağrılan sürecin sanal adres aralığında mevcut değildir.
Kilitleme, sürecin kilitli sayfa sınırının aşılmasına sebep olacaktır.
- EPERM
Süreci çağıran süper kullanıcı değildir.
- EINVAL
bayraklar içinde belirtilmeyen bitler sıfır değil.
- ENOSYS
Çekirdek mlockall yeteneği sağlamıyor.
Belirli sayfaları mlock ile kilitleyebilirsiniz. Kilitli sayfalardan ise munlockall ve munlock ile kilitleri kaldırabilirsiniz.