Sanal adres alanı fiziksel adres alanından daha büyükse, adres eşlemeleri bellekte nasıl saklanır?


15

Diyelim ki 40 fiziksel adres biti olan bir sistemle çalışıyoruz. Toplam fiziksel adres alanı (bayt-adreslenebilir bellek olduğu varsayılarak) bayt veya 1 TiB'dir. Sanal adresler 48 bit uzunluğundaysa, sanal bellekte fiziksel bellekte konumlardan daha fazla adres olduğu anlamına gelir.240

Bu benim için mantıklı, çünkü "fazla" adresler sabit disk konumlarına da işaret edebilir. Ancak, anlamadığım şey, sanal ve fiziksel adresler arasındaki çevirinin nasıl gerçekleştiğidir. VAS konumlarını fiziksel konumlara bağlayan bir yerde saklanan bir eşleme olduğunu varsayıyorum. Fiziksel konumlardan daha fazla sanal adres konumu varsa, bu eşlemelerin tümü bellekte nasıl saklanabilir? Her sanal adresi saklamak için en az 48 bite ve ardından eşlendiği fiziksel konumu saklamak için başka bir 40 bite ihtiyacınız olacaktır. Açıkçası, her sanal adresin 1: 1 eşlemesini fiziksel karşılığına depolayamazsınız, çünkü her konumu eşleştirmek fiziksel belleğin kendisinden daha fazla bellek gerektirir.

Burada tam olarak ne eksik?


Az miktarda bellek ve adres alanı olsa bile bunu yapamazsınız. 16-bit fiziksel adresleriniz ve 16-bit sanal adresleriniz varsa, yine de 1: 1 eşlemelerin tümünü depolayamazsınız!
user253751

2
Sorun düşündüğünüzden bile daha karmaşık. Bilgisayarlarda nadiren TB bellek vardır, bu nedenle fiziksel bellek sanal adres alanından daha azdır. Daha da kötüsü: Her işlem tamamen ayrı sanal adres alanına sahiptir!
Mooing Duck

Sabit disk konumlarına ek olarak, boşa harcayacağınız bitler / alanınız var. Örneğin, algılanmayan taşmaları önlemek için yığının altında büyük bir bölgenin eşlemesini kaldırmış olabilirsiniz. Başka bir saldırı sınıfını önleyerek yüklediğinizi rastgele düzenleyebilirsiniz . Adres çekirdeğe veya kullanıcıya aitse, tek bir bitle belirtmek istersiniz - alanın yarısını boşa harcamış olsanız bile devam edin. Çoğu ders kitabı, sanal belleğin sayfa dışına çıkarmaya odaklanırken, çok daha fazlası var.
Maciej Piechotka

(Ayrıca adreslerin bazen yararlı olabileceğini unutmayın; bu nedenle VA A ve B adresi, A! = B olsa bile aynı PA P'ye başvurur.)
Maciej Piechotka 4:17

Yanıtlar:


26

Bu işi yapmanın hilesi "sayfalama" dır. Bir sabit diskten fiziksel belleğe veri getirirken, sadece birkaç bayt getirmezsiniz. Sayfanın tamamını getirirsiniz. 4k bayt çok yaygın bir sayfa boyutudur.

Her bir bayt için değil, yalnızca sayfaları izlemeniz gerekiyorsa, haritalama çok daha ucuz hale gelir. 48 bit adres alanınız ve 4096 bayt sayfanız varsa, yalnızca 2 ^ 36 sayfadan hangisini (kabaca 69 milyar sayfa) izlemeniz gerekir. Bu çok daha kolay! Tüm sayfaların bulunduğu yere "sayfa tablosu" denir.

Aslında 1-256 TiB belleğe ihtiyacınız varsa, bu sayfa tablosunu saklamak için birkaç gigabayttan vazgeçmek önemli değildir. Bununla birlikte, pratikte, biraz daha verimli olmamızı sağlayan ve sayfaları yalnızca kullandığımız adres alanının bölgeleri için tutan çok seviyeli sayfa tabloları kullanma gibi şeyler yapacağız .


6
Sayfa dosyası, içeriği saklanması gereken bellek yetersizliği nedeniyle geri kazanılan fiziksel sayfa çerçevelerinin içeriğini içeren bir diskteki fiziksel dosya için kullanılan Windows terimidir. Yanılmıyorsam, sanal sayfa adreslerini fiziksel sayfa adresleriyle eşleyen veri yapısı bir sayfa tablosu olarak adlandırılmalıdır .
Monica'yı eski durumuna getir - ζ--

@hexafraction Bence haklısın. Değişikliği yaptım.
Cort Ammon

2
Gerçek bellek büyük olduğunda, sayfa tabloları için gereken belleği azaltmanın başka bir yolu da daha büyük sayfalara izin vermektir. x86, 4 KiB sayfasını 2/4 MiB sayfasıyla karıştırma seçeneğine sahiptir.
Nate Eldredge
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.