X86 mimarisinde, sanal adres alanı için neden fizikselden daha az bit var?


11

64 bit bilgi işlem üzerine bu makaleyi okuyordum ve bundan bahsediyor:

Örneğin, 2011 yılı itibariyle AMD64 mimarisi fiziksel bellek için 52 bite ve sanal bellek için 48 bite izin verdi

Fiziksel bellekten daha fazla sanal belleğe izin vermenin daha mantıklı olacağını düşünürdüm, neden aslında tam tersi?

Bonus soru: 64 bit mimaride 52 veya 48 bit için "izin vermek" ne anlama geliyor? Diğer bitler ne için kullanılır?


X86 için, kullanılmayan VA bitleri VA MSbit'in işaret uzantısı olmalıdır. (ARM AArch64, etiketler için uygun şekilde kullanılabilmeleri için donanım tarafından 8 MSbit'in göz ardı edilmesine izin verme seçeneği sunar. Azul Systems Vega işlemci - bir Java cihazının parçası - etiketler için 16 bit VA kullanılmasını sağladı.) Sayfa tablosunda, ayrılmış PA bitleri sıfır olmalıdır (öncelikle yazılımın bunları kullanmaya çalışmadığını ve daha sonraki donanımlarla uyumluluğu bozmadığından emin olmak için).
Paul A. Clayton

Yanıtlar:


11

İşte bir AMD64 sayfa tablosunun resmi (AMD Architecture Programmer's Guide, Cilt 2, Rev 3.23, 2013, sayfa 132'den).

AMD64 Longmode sayfa tablosu

AMD64 mimarisindeki bir sayfanın "doğal" boyutu 2 12 = 4096 bayttır. (2 21 = 2Mbyte sayfaya sahip olabileceğiniz modlar var , ancak şimdilik bunları yok sayacağız.)

Her sayfa tablo girişi (PTE) (ya da PDE, PDPE veya PML4E adı seviyesine bağlı olarak) 64 bit = 2 3 bayt. Yani sayfa başına 2 9 giriş var . Böylece 4 sayfa sayfası düzeyi, işlem başına 4x9 + 12 = 48 bit sanal adres sağlar. Sayfa tablosunda yürümek pahalıdır, bu nedenle tüketici talebi olmadığı sürece / veya 5 seviyeye çıkmazlar.

Neden 52 bitlik fiziksel adres sınırına karar verdiklerinden emin değilim. Bu, gelecekte 63 bite kadar genişletilebilir. Ekim 2013 fiyatlarında (4Gbit yongalar için yaklaşık 1US $ / Gigabit), 2 52 baytlık bir bellek oluşturmak 32.000.000,00 ABD dolarının üzerine mal olacak, bu nedenle fiziksel adres sınırını artırmak için önemli bir talep olması biraz zaman alacak. Fiziksel adresleri olabildiğince küçük tutmak istemenizin her türlü nedeni vardır: TLB ve önbellek etiketlerinin fiziksel adresleri tutması gerekir.

Sanaldan daha fazla fiziksel bellek olması geriye doğru değil. Sanal bellek, işlem başına fiziksel bellek tüm işlemler tarafından paylaşılır. Bu nedenle, 48 bit sanal adreslere ve 2 52 bayt belleğe sahip bir sunucu, 16 eşzamanlı işlemi destekleyebilir ve yine de değiştirilmemesini garanti edebilir.


Bilgisayar mimarlarının üst bitlerin donanım tarafından kullanılmasını, genellikle işletim sistemi için negatif adreslerin ortak kullanımına uyması için işaret uzantısıyla ("Diğer bitler nelerdir?") Gerekli olduğunu öğrendiklerini belirtmek gerekir. Ayrıca, Ln dizini giriş önbelleklemesi ile, 5 seviyeli bir tablonun çoğu zaman tam olarak yürümesi gerekmez. PTE bitleri 52:62 yazılım için ayrılmıştır, bu nedenle 4KiB sayfalarını 52 bit PA ile sınırlandırarak uyumluluğu bozmadan fiziksel adresler için kullanılamaz. Ayrıca, Linus Torvalds PAE'ye karşı öfkeyle öfkeleniyor (VA> PA "geleneksel" işletim sistemi tasarımını basitleştiriyor gibi görünüyor.
Paul A. Clayton

"Bu, gelecekte 63 bite kadar genişletilebilir." Hayır, sayfa tablosu yapısını değiştirmeden olmaz. Olduğu gibi, PxE'nin 52 ila 62 bitleri işletim sistemi kullanımı için ayrılmıştır. Ve işletim sistemleri bunları kullanıyor (Windows bu alanı "çalışma kümesi listesi dizini" için kullanıyor), bu nedenle işlemci mimarları PFN alanını kendilerine genişletmekte özgür değiller. Elbette gelecekte PT yapısını PFN'nin daha fazla bitine izin verecek şekilde değiştirecek PAE benzeri bir seçeneğe sahip olmak mümkün olacaktır, ancak bu önemli bir mimari değişiklik olacaktır.
Jamie Hanrahan

3

Dikkate alınması gereken birkaç nokta, fiziksel RAM pahalıdır. Elbette 16 GB daha ucuz, ancak 4GB sadece birkaç yıl önce, ancak 2 ^ 64 (16 exabyte) gülünç derecede büyük.

Bu nedenle AMD'nin x64 için x86 uzantıları , kayıtları sınırlandırarak 2 ^ 52'ye kadar "izin verdi" . Bu iki şey yapar, işlemcilerin maliyetini düşürür ve performansı artırır. Kullanılmayan daha fazla kayıt, işlemler sırasında hala dikkate alınması gereken çok fazla boş alan olduğu anlamına gelir.

Ve eğer matematikçi değilsen ... Üç beden arasındaki fark çok büyük! Ben matematik gurusu değilim, ama ondalık 52 bit 64bit'in yaklaşık% 02'sidir. 48 bit 52'nin% 6'sıdır. (Birisi matematik hesabımı kontrol eder mi?)

AMD'nin neden sanaldan daha fazla fiziksel RAM'e izin verdiğine gelince, makale bunun AMD'nin sunucuları düşünmesi nedeniyle olduğunu belirtti. Sunucular büyük miktarda fiziksel RAM'e ihtiyaç duyar. Sanal RAM, yüzlerce veya binlerce çalışan için ortalama sunucu uygulamalarını destekleyemeyecek kadar yavaştır.

Kendi düşüncelerim: RAM'in küçük olduğu ve sabit sürücülerin RAM'i desteklemek zorunda kaldığı zamanı bıraktık. RAM'deki fiyat, ortalama bir kişinin yeterli RAM'den fazlasını koyabileceği bir noktaya düştü. 1-2 GB RAM gerektiren Office gibi tipik uygulamaları alın. Bilgisayarım 7 yıl önce bunu halledebilirdi. Her ne kadar diske okuma ve yazma hızları olsa da, sanal bellekten (eski PM * 2.5 felsefesini kullanarak) 7GB'lık bir dosya almak zorunda kalmamayı umuyorum.

Ayrıca AMD'nin, entegre GPU'larda RAM gibi fiziksel RAM kayıtlarını kullanan kayıtlara yer bırakmak istediğini varsayabilirim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.