From: Bora Şahin (borasahin@netone.com.tr)
Date: Sun 04 Jan 2004 - 07:30:10 EST
SLmLar Emre,
Friday, January 2, 2004, 5:45:08 PM, you wrote:
EB> Selamlar
EB> Memory allocation ile ilgili biraz ayrıntılı bir
EB> acıklama yapabilirmisiniz orneğin page in ,page out
EB> page fault gibi olaylar nasıl olusur ? linux virtual
EB> memory management ını nasıl yapar ne zaman paging
EB> space kullanılır gibi veya bu konuda bir kaynak
EB> onerirmisiniz
Çekirdek kaynak kodları :-)
"http://www.advancedlinuxprogramming.com/"
Bu adreste sizin ilgilendiğiniz konulardan bahsetmez. "Device Driver" kitabını bulursanız daha ayrıntlı
bilgi edinebilirsiniz.
"Türkçe kaynak isterseniz:
http://belgeler.org/glibc/glibc-Memory.html"
Yukarıdaki kaynağa bakmadım ama sizin ilgilendiğiniz konuyla ilgili olduğunu zannetmiyorum.
Kısaca bildiğim kadarıyla bahsedeyim.
Page in, page out swapping ile ilgili diye biliyorum. "Linux" listesi arşivlerinden Murat KOÇ'un
"kısa-çaplı" seminerini bulabilirsin. Büyük ihtimalle page-out sayfanın diske atılması,
page-in ise tersi olsa gerek. Haa, bunun nasıl yapıldığını, hangi kriterlere göre yapıldığını bulmak
senin görevin :-)
Mesela diyelim bir page frame diske atıldı, bu durumda bu pf'ye ulaşılmak istendiğinde, pf bellekte
olmayacak dolayısıyla da page fault olacaktır, page fault handler'da da bunun sebebi araştırılacak
ve ilgili sayfa diskten belleğe çekilecektir ya da bir kullanıcı-prosesi diyelim malloc()'la bellek
isteminde bulunduğunda, ona fiziksel bellekte yer ayrılmasından ziyade doğrusal(linear) bir aralık
verilir fakat daha sonra bu kullanıcı prosesi bu alana bir şeyler yazmak istediğinde sayfa belekte
olmadığından page fault olur ve page fault handler'da da sebebi bulunarak gerekli tahsisat yapılır
gibi... Bunlar sadece örnek, başka sebeplerde var.
Bütün proseslerin adres alanlarını her biri için farklı, paging database diyelim, kullanarak
ayırmak suretiyle yapılır. IA-32 için konuşursak, kabaca bütün proseslerin PGDIR ve PTE'leri
birbirlerinden farklıdır.
Size eğer İngilizceniz varsa(Yoksa sadece sizin için en yukarıdaki kaynaktan başka kaynak yok) Mel
Gorman'ın "Understanding The Linux VMM" ve "Code Commentary On The Linux VMM" kitaplarını önerebilirim.
Birde benim yazdığım ufak bir yazı vardı, "Linux'da Bellek Yönetim Başlngıcı", ileriseviye.org'de
bulabilirsin. Gerçi senin tam olarak istediğin tarzda bir yazı değil ama yine de belki faydalı
olabilir. Alt kısmındaki referanslar bölümünde daha fazla kaynak bulabilirsin. Ama bana yukarıdaki
yorumlarınızdan bazı temel kavramların sanki anlamlarını tam olarak bilmiyormuşsunuz gibime geldi ya
da ben yanlış anladım. Mesela ne zaman "paging space" kullanır gibi. Bence önce Kaan Aslan'ın "Intel
İşlemcileri İçin Korumalı Mod Yazılım Mimarisi" kitabını alıp donanım olarak konuya vakıf olsanız
daha iyi olur gibime geliyor. Gerçi Intel'in sitesindende IA-32 kitaplarını bulabilirisin. Yabancı
kaynaklarda karıştırmıştım ama Aslan'ın anlatım tarzı, konuya hakimliği ve kitabın kompakt tarzı
artıları. Şu anda piyasada bu kitap var mı o da ayrı bir mevzu! Eğer yoksa C&SProg. derneğinde sanırım
bulursun.
-- Bora Şahin borasahin.port5.com