2011-01-28 25 views
7

Linux ve 32 bit x86 arch göz önünde bulundurulduğunda, erişilebilir 4GB adres alanının 3: 1 bölünmesi var. Kullanıcı alanı 0-3 Gb olarak ayrılırken, 3-4 Gb çekirdeğe ayrılır. 3Gb'den daha büyük ve dolayısıyla çekirdek adres boşluğuna ait olan sanal adres fiziksel adrese nasıl dönüştürülür? Sayfa tabloları resme girer mi?kernel sanal adres çevirisi

cevap

5

Mel Gorman'ın kitabında Understanding the Linux Virtual Memory Manager kitabında bazı bilgiler vardır.

Kısa cevap: Evet, çekirdek fiziksel adres 0'ı sanal adres 3 GiB'ye dönüştürmek için sayfa tabloları ayarlar. (Bölüm 3.7.1). Bu, çekirdeğin yüklendiği fiziksel konumu içerir (genellikle x86 üzerinde 1MB).

+0

Cevabınız için teşekkürler. Bazı googling yaptıktan sonra 3GB (yapılandırılabilir) bir PAGE_OFFSET olan ve çekirdek sanal adresinin, fiziksel adrese basitçe PAGE_OFFSET değerini çıkararak ve böylece sayfa tabloları kullanılmadan elde edilen fiziksel adrese birebir eşleme olduğunu buldu. Yanlışım varsa lütfen düzelt. – user593575

+1

Bu basit haritalama, virt_to_phys() işlevinin uygulanmasını kolaylaştırır: dediğiniz gibi, sadece PAGE_OFFSET değerini çıkartın. Ancak sayfalama etkin - bu, talimatların getirildiği ve verilere erişildiği için sanal adreslerin donanıma fiziksel olarak tercüme edilmesine izin verir. –

+0

Amacınızı aldım. Sayfa adresi, sanal adresin çekirdek veya kullanıcı alanına ait olmasına bakılmaksızın sayfalama etkinleştirildiğinde her zaman kullanılır. (Ne yazık ki en az 15 puan gerektiren kadar oy veremiyorum) – user593575