İşlemcinin sanal bellek desteğine sahip olması için MMU (Bellek Yönetim Birimi) yongası gerekli mi?


14

İşlemcinin sanal bellek desteğine sahip olması için MMU (Bellek Yönetim Birimi) yongası gerekli mi?

MMU işlevselliğini yazılımda taklit etmek mümkün müdür? (Muhtemelen performans üzerinde büyük bir etkisi olacağını biliyorum).


Tam kapasiteye sahip herhangi bir bilgisayar, performans isabetiyle diğer herhangi bir bilgisayarı taklit edebilir. Veya herhangi bir donanımı taklit edin. Tek soru, isabet edilen performansın büyüklüğüdür.
Vality

bugün her işlemci bir TLB'ye ihtiyaç duyuyor, bu yüzden dahili bir MM birimi var.
rastafile

Yanıtlar:


22

MMU içeren bir sistemi taklit eden herhangi bir sistem emülatörü, yazılımda bir MMU'yu etkili bir şekilde taklit eder, bu nedenle belirtildiği gibi sorunuzun cevabı “evet” tir. Bununla birlikte , sanal bellek, bellek erişim kontrolünü zorlamanın bir yolunu gerektirir veya en azından çevirisi ele alır, bu yüzden kontrol edilen yazılımı çalıştıran CPU'nun tam yazılım öykünmesine veya donanım desteğine ihtiyaç duyar.

Bu nedenle, MMU'su olmayan, QEMU bağlantı noktası olmayan bir sistem oluşturabilir, sanal belleği gerçekten kullanışlı hale getirmek için eksik parçaları ekleyebilir ( örneğin , ana sistemde takas için destek ekleyin) ve QEMU'da MMU gerektiren bir işletim sistemi çalıştırabilirsiniz, Konuk işletim sisteminde beklediğiniz tüm korumayla (QEMU hatalarını engelleme).

Sanal bellek sağlamak için kullanılan MMU'suz “emülasyon” un gerçek ve eski bir örneği, yetmişli yıllarda ve seksenli yılların sonlarında 8 bitlik sistemlerde kodunu ve verilerini sayfalandırabilen ve değiştirebilen Z makinesidir. . Bu, temeldeki gerçek işlemciye sanal bir işlemci taklit ederek çalıştı; bu şekilde yorumlayıcı, çalışan programın “gördüğü” bellek düzeni üzerinde tam kontrol sahibi olur.

Pratikte, sanal bellek desteği için en azından işletim sistemi düzeyinde bir MMU'nun gerekli olduğu düşünülmektedir. MMU'suz çekirdek belirtildiği gibi ? , Linux çekirdeğini MMU'suz sistemlerde çalışabilmesi için oluşturmak mümkündür, ancak ortaya çıkan yapılandırma çok sıra dışıdır ve sadece çok özel kullanım durumları için uygundur (özellikle düşmanca bir yazılım olmadan). Sanal bellek (takas, mmap...) gerektiren birçok senaryoyu desteklemeyebilir .


sanal makine uygulamalarında ayrıca MMU öykünücü bileşeni var mı?
yoyo_fun

Evet - mutlaka ayrı bir bileşen olarak değil, ancak emülasyonda gerekli desteğe sahiptirler.
Stephen Kitt

7
@JenniferAnderson: Bazı modern CPU'lar, emülatörün MMU öykünmesini MMU'nun kendisine boşaltmasına izin veren özelliklere sahiptir. Örneğin, bir öykünücünün içinde çalışan bir programın kendisi birden çok öykünülmüş bellek sayfası kullanacaktır, bu bellek sayfaları elbette öykünücü tarafından kullanılan bellek sayfalarına "yuvalanmıştır". Hem daha yeni üst düzey Intel hem de AMD CPU'larda, öykünücünün bu iç içe yerleştirmeyi MMU'nun içinde (pahalı bir şekilde taklit etmek yerine) ifade etmesine izin veren iç içe sayfa tabloları desteği vardır.
Jörg W Mittag

@ Gerçekten Jörg, açıklama için teşekkürler. Çoğu hipervizör, ekstra donanım desteği olmadan çalışabilmeleri için hala bir miktar yazılım öykünmesi içerir. Sorunun “mümkün mü” yönü ile göz kırptım ;-).
Stephen Kitt

3
@JenniferAnderson: Evet, bu işlev özellikle para-sanallaştırma için tanıtıldı. (Yeni bir şey olmadığını unutmayın, 1960'lı yılların başından beri ana bilgisayar dünyasında donanım destekli para-sanallaştırma var.) Ancak, Çöp Toplama işlemini hızlandırmak gibi diğer ilginç uygulamalar için de kullanılabileceği ortaya çıkıyor (bkz. örneğin Azul'un Zing JVM'sindeki C4 toplayıcı). Ancak, tüm bunların her iki yönde de işe yaradığını unutmayın: MMU'ları sanallaştırma desteği ile genişletmek aynı şekilde performans optimizasyonu ve sanallaştırmadan başka bir şey değildir…
Jörg W Mittag

7

Tam olarak sanal bellek dediğiniz şeye bağlıdır. İlginç bir model eski Win16 modelidir (en iyi Windows NT'den değil, eski Windows 3.x'ten bilinir). Bu modelde, sen vardı GlobalLockve GlobalUnlock, LocalLockve LocalUnlockişlevleri. Bunlar sanal belleğin işbirlikçi, manuel yönetim biçimiydi. Bu (uygulama) yazılımında yapıldığı için MMU gerektirmiyordu. Ve bellek, kilidi açılmış belleğin diske takılması anlamında sanaldı.

Bununla birlikte, Win16 modelinde farklı süreçler arasında koruma yoktur. Başka bir işlem verileri bellekte bıraktıysa, üzerine yazabilirsiniz. Bu temel bir kısıtlama değildir. Bu günlerde hızlı SSD'lerle, çalışmayan bir işlemi bellekten tamamen kaldırabilir ve makul bir zamanda yapabilirsiniz.


7

Eğer yazılıma sahip ise, o bir donanım MMU'yu olması gerekli değil o kutunun takas ve fiziksel bellekten süreçler.

Bu, erken çoklu görev işletim sistemlerinin çalışma moduydu. Herhangi bir zamanda yalnızca bir işlem bellekte yerleşiktir, zaman diliminin süresi dolduğunda bütünüyle değiştirilir (bunun büyük işlemlerle sorunlu hale geldiğini görebilirsiniz). Çalışmakta olan işlem tarafından görülen bellek içeriği, diğer işlemlerin gördüğü ile aynı değildir ve her birinin adres alanı hakkında kendi görüşü vardır.

Bazı donanım desteği yararlıdır - işletim sisteminin kendi kullanımı için "korumalı" bir bellek alanı (örneğin MSB setine sahip tüm adreslere yalnızca süpervizör modunda erişilebilir) ve kullanımda en yüksek adresi, ancak bellek yönetimini gösteren "kesme" değeri kavramı donanım sanal bellek için mutlak bir gereklilik değildir; bunu başarmanın sadece etkili bir yoludur.


2
Bu gerçekten sanal bir bellek değil, sadece süreç değişimi ... (Bu soruya doğru bir cevap için gerçekten “sanal bellek” tanımlamamız gerekecek!)
Stephen Kitt

Her işlemin adres alanı ile ilgili kendi görünümü vardır - kullandığım tanımı netleştirmek için düzenleyeceğim.
Toby Speight

Doğru, ancak tüm işlemler için bire bir eşleme. (Süreçler açısından çok fazla fark yoktur, bu yüzden orada gerçek bir tartışma yoktur ...)
Stephen Kitt

0

VM yapacak orijinal ticari makinelerde MMU yoktu - işlemcide VM vardı. Şu anki düşüncem MMU'ların VM'yi VM olmayan işlemcilerin üzerine koymak için daha sonra düşünülmüş olmaları. VM, Manchester Üniversitesi'nde geliştirildi ve Burroughs tasarımcıları, o zamanlar çok yenilikçi olmasına rağmen, dahil etmeleri gerektiğine ikna edildi.

Burroughs B5000 (şimdi Unisys MCP makineleri), bellek sınırlarını zorlayan bellek tanımlayıcıları kullandı - bir sınırın dışına çıktı ve programınız atıldı (sınırlara saygı göstermek güzel bir toplumun temelidir, ancak bazıları ayrıcalığı kötüye kullanır, bu nedenle sınırlar uygulanmalıdır).

Tanımlayıcılar bir bellek adresi, blok uzunluğu ve veri türünün yanı sıra tüm önemli P bitini veya varlık bitini de içerir. P bit, bloğun bellekte olduğunu gösterir. Sıfırlık bir p bit, bloğun yığın depolamada olduğu ve adresin orijinal programda (kod veya veri) veya VM'de (aktarılan veriler) depolama adresi olduğu anlamına gelir.

Bu makineler hiyerarşik bir bellek modeli uyguladı. MMU'lar, kullanıcı nesnelerini düz belleğe eşlemek zorunda kalan düz bellek eksikliklerini telafi ediyor gibi görünmektedir. JK Iliffe ayrıca bu modelle ICL makineleri tasarladı:

http://www.computerconservationsociety.org/resurrection/res74.htm#f

https://en.wikipedia.org/wiki/Burroughs_large_systems

Bu makineler ve günümüzün çoğu arasındaki fark, sadece bir CPU mimarisi değil, tüm sistem mimarisini ele almalarıdır.

Öyle görünüyor ki sadece MMU'lar gerekli değil, sistemler onlarsız daha iyi durumda.


-1

Masaüstü, dizüstü bilgisayar ve sunucu işlemcilerin çoğunda bellek yönetimi donanımında bir veya daha fazla TLB bulunur ve disk belleği veya bölümlere ayrılmış sanal bellek kullanan herhangi bir işlemcide neredeyse her zaman bulunur .

Translation_lookaside_buffer

Ve sonra Sanal Bellek ve bunun ne anlama geldiğini okuyun. Büyük sanal adres alanı ana fikir değildir. Ana fikir, birçok düzeyde önbellekleme / tamponlamadır.

Basit olmaktan uzak, ancak bu TLB bellek önbelleği, çekirdeğin mm alt sisteminin üzerine inşa ettiği önemli bir donanım parçasıdır (aksi takdirde VM büyük ölçüde ek yük olur).


VM =

sanal bellek VEYA sanal makine. Çok farklı, çok bağlı.


Bu nedenle cevap hayır, bir MMU yongası ( anakartta CPU dışında ayrı bir birim ) gerekli değildir.

Evet, kullanışlı VM hakkında düşünmek için bazı donanım MMU'ları (CPU'da) gereklidir. ( X86 platformu için bu 8086 segmentasyonu ile başladı )

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.