Bellek Parametrelerinin Sorgulanması
Önceki Bellek Özkaynakları Sonraki
Bellek Parametrelerinin Sorgulanması
Sürecin sanal bellek sayfa genişliğini bilmesi bazı durumlarda zorunludur. Bazı yazılım arayüzleri (mmap gibi, bkz. Bellek Eşlemli G/Ç) kullanıcının sayfa genişliğine ayarlanmış bilgi vermesini gerektirir. mmap, sayfa genişliğinin katları olarak bir uzunluk argümanı gerektirir. Sayfa genişliğinin bilinmesinin faydalı olduğu diğer bir yer de bellek ayırmadır. Uygulama tarafından bölünerek kullanılmak üzere büyükçe bir tomar halinde bir ayırma yapılırsa, geniş blokların boyutlarının sayfa genişliğine ayarlanması yararlı olur. Çekirdek bellekle çalışırken sadece tamamı kullanılan bellek sayfalarını ayırmak zorunda olduğundan, ayrılmak istenen blok boyutunun sayfa genişliğinin katlarına yakın (daha büyük değil) olması çekirdeğin bellek ayırma ile ilgili olarak daha verimli çalışabilmesini sağlar. (Bu eniyilemeyi yapmak için bellek ayırıcının her blok için belleğin bir biti için bile nasıl davrandığı hakkında biraz birşeyler bilinmesi ve sayfa genişliğinin katlarını aşan bir toplam boyut talep edilmemesi gerekir.)
Sayfa genişliği geleneksel olarak bir derleme zamanı sabitidir. Fakat son zamanlarda geliştirilen işlemcilerle bu durum değişmiştir. İşlemciler artık farklı sayfa genişliklerini desteklemekte ve aynı sistem üzerinde farklı süreçler arasında bunun değişiklik göstermesine bile olanak verebilmektedirler. Bu nedenle, çalışma anında sistem o anki sayfa genişliği hakkında sorgulanmalı ve sayfa genişliği ile ilgili hiçbir önkabul yapılmamalıdır (sayfa genişliğinin ikinin üstel katları olması gerekliliği hariç).
Sayfa genişiğini sorgulamak için kullanılacak doğru arayüz _SC_PAGESIZE parametresi ile sysconf'tur (bkz. Sysconf Tanımı). Ayrıca daha eski bir arayüz de vardır.
int getpagesize
(void)
işlev
getpagesize işlevi sürecin sayfa genişliği ile döner. Bu değer sürecin çalışması süresince sabittir ama aynı yazılımın farklı süreçlerinde farklı değerler olabilir.
Bu işlev unistd.h dosyasında bildirilmiştir.
Sistemin fiziksel belleği hakkında System V'den türetilmiş sistemlerde geniş olarak kullanılan bir bilgi alma yöntemi vardır.
  sysconf (_SC_PHYS_PAGES)
çağrısı sistemin sahip olduğu belleğin fiziksel sayfalarının toplam sayısı ile döner. Bu, bu belleğin tümünün kullanılabilir olduğu anlamına gelmez. Bu bilgi,
  sysconf (_SC_AVPHYS_PAGES)
çağrısı ile edinilebilir. Bu iki değer uygulamaların eniyilenmesine yardımcı olur. _SC_AVPHYS_PAGES için döndürülen değer uygulamanın başka bir süreç tarafından engellenmeksizin kullanabileceği bellek miktarıdır (başka hiçbir sürecin kendi bellek kullanımını, diğerlerinin hilafına arttıramayacağını belirtir). _SC_PHYS_PAGES için dönen değer ise az ya da çok çalışma birliği için donanımsal bir sınırdır. Eğer tüm uygulamalar birlikte bundan fazlasını kullanmaya çalışırsa, sistemin bellek miktarı ile başı dertte demektir.
GNU C kütüphanesi bu iki yönteme ek olarak bu bilgiyi almak için iki işlev daha içerir. Bu işlevler sys/sysinfo.h dosyasında bildirilmiştir. Yazılımcılar yukarıda açıklanan sysconf yöntemini tercih etmelidir.
long int get_phys_pages
(void)
işlev
get_phys_pages işlevi sistemin sahip olduğu fiziksel sayfaların sayısı ile döner. Belleğin toplam miktarını bulmak için bu değer sayfa genişliği ile çarpılır.
Bu işlev bir GNU oluşumudur.
long int get_avphys_pages
(void)
işlev
get_phys_pages işlevi sistemin sahip olduğu fiziksel sayfalardan kullanılabilir olanlarının sayısı ile döner. Belleğin kullanılabilir toplam miktarını bulmak için bu değer sayfa genişliği ile çarpılır.
Bu işlev bir GNU oluşumudur.
Önceki Üst Ana Başlık Sonraki
Bellek Altsistemi Başlangıç İşlemci Özkaynakları
Bir Linux Kitaplığı Sayfası