İş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).
İş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).
Yanıtlar:
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 .
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ı GlobalLock
ve GlobalUnlock
, LocalLock
ve LocalUnlock
iş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.
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.
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.
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 .
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ı )