Sanal bellek, bir sürecin sanal adres alanıyla ilişkili midir?


1

Disk belleği, bilgisayarın ikincil depolama biriminden işlemi yürütmek için ana belleğe veri getirmesini sağlayan bir bellek yönetimi tekniği olduğunu anladım. Kullanabileceği geniş bir bitişik adres alanına (sanal adres alanı) sahip olduğu izlenimini verir. Sayfa tablosu, bir işlemin sanal adreslerini fiziksel adrese eşler. Sanal adresler CPU'nun kullandığı adrestir. Belleğe erişilmesi gerektiğinde, çeviri işlemi kullanılarak sayfa tablosundan sanal adrese karşılık gelen fiziksel adres (RAM'deki gerçek adres) elde edilir. Ve Sanal bellek kavramı - CPU mevcut fiziksel bellekten daha fazla belleğe ihtiyaç duyduğunda, işletim sistemi ikincil belleğin bir bölümünü RAM olarak kullanır.

Bu iki kavramı ilişkilendirmeye çalıştığımda kafam karışıyor. Sorum şu - bir işlemin sanal adres alanıyla ilgili sanal bellek. Bir işlemin sanal adres alanı aslında sanal bellekte var mı? Ancak sanal bellek aslında ikincil depolamanın bir parçası olduğundan bu nasıl mümkün olabilir. VEYA işlemin sanal adres alanı RAM'de bulunur? RAM'de bir işlemin hem Sanal hem Fiziksel adres alanı var mı? Nazikçe açıklığa kavuşturun.

Yanıtlar:


2

Sanal bellek ve sayfalama ile karıştırılmamalıdır sayfa dosyası (ayrıca denir dosya değiştir ).
İki kavram birbiriyle ilişkili, ancak yine de farklı.

Sanal bellek, bir işlemin sanal adres alanını ifade eder: her işlem, aslında bunu yapmadan, özel bir 32 bit (veya 64 bit) adres alanına sahip olduğunu "düşünür". aslında bellekte var olabilir veya farklı bir fiziksel adreste bulunabilir, ancak işlem umursamıyor.

yöntem bunun uygulandığı sayfalama : Bir işlem belleğe her eriştiğinde, Bellek Yönetimi Birimi sanal adresi çevirerek sanal adresi çevirir. fiziksel sayfa karşılık gelen RAM’in sanal sayfa Hafıza (Bir sayfa, genellikle 4 KB büyük olan daha büyük bir bellek yönetimi birimidir). Eğer hiçbir haritalama mevcut değilse, bir sayfa hatası , işletim sistemini bilgilendirmek için.

Bu noktada, işletim sistemi daha sonra ne olacağına karar verir. Programı sonlandırabilir, verileri rasgele (!) Oluşturabilir veya bir veri kaynağından depolayabilir veya alabilir. sayfa dosyası (veya dosya değiştir ) başka bir depolama cihazında. Ancak bu noktada, donanım ne olacağını umursamıyor - işletim sistemi yapabilir ne olursa olsun istek işlenirken

Yani, sanal bellek ve sayfa dosyası değil doğal olarak ilişkili, ancak tipik durumlarda el ele gelirler.


0

Örnek olarak 32 bit x86 CPU'ları örnek olarak basitleştirelim. Aşağıdakilerden bazıları kavramı sunmak amacıyla biraz yanlış.

Belleği yüklemenize ve saklamanıza izin veren talimatlar 32 bit argümanlar alır. Yani "32 bit adres" alanınız var. Bu, 4Gbayt değerinde RAM veya başka bir şey olursa, "konuşabileceğiniz" anlamına gelir.

Sanal bellek, bir adresi (mantıksal veya sanal adres) başka bir adresle (fiziksel, gerçek adres) eşlememizi sağlar. Varsayılan durum, her bir mantıksal adresin sanal adresine ayarlandığı "kimlik eşlemesi" dir. Haritalama 4KByte "sayfa" düzeyinde gerçekleşir.

2 yürütme seviyeniz var - kullanıcı modu ve çekirdek modu. Çekirdek modunun kimlik eşlemesi yapılması gerekir çünkü sistemi ve diğer işlemleri yönetir.

Kullanıcı modunda, çekirdek RAM'in 0 adresinde başladığı hafızayı eşler ve sadece kendisine tahsis edilen hafıza miktarı kadar yüksek olabilir. Çekirdek, tüm işlemlerin bellek eşlemesini kontrol eder ve hangi belleğin serbest olduğunu ve kullanımda olduğunu yönetir. Çekirdek, herhangi bir yerden ücretsiz 4K bayt sayfa seçebilir ve bunları kullanıcı modu işlemine sürekli görünecek şekilde düzenleyebilir.

Kullanıcı modu sayfası, geçersiz bir sayfaya sahip bir adrese erişirse, eşleme mekanizması bir "sayfa hatasına" neden olabilir. Kullanıcı modu uygulaması, sahip olduğundan daha fazla belleğe erişmeye çalışırsa, "kötü" sayfalara çarpar ve bir çekirdek istisnasını açar. Sonra çekirdek bir "Segmentasyon hatası" hatasıyla öldürür. Çekirdek API'leri uygulamanın daha fazla bellek istemesini sağlar - çekirdek daha sonra mümkünse biraz boş bellek eşler ve bitince serbest bırakır.

Bu nedenle, 32 bitlik bir adres alanınız varken, burada bir şey eşleştirilmediği sürece, tüm adresleri kullanıcı işleminde kullanamazsınız.

Şimdi - eğer bir işlem uykuda ise, çekirdek bu sayfalara bir süre erişilmediğini tespit ederse bazı sayfaları "kötü" olarak işaretleyebilir ve onları diske yazar. Süreç uyandığında, bu kötü sayfalara erişmeye ve bir çekirdek istisnasını tetiklemeye çalışacaktır. Çekirdek "segfaulting" yerine sayfaları diskten alır, tekrar belleğe (muhtemelen farklı bir fiziksel noktaya ancak işlemin aynı mantıksal noktasına eşlenir) geri alır ve ardından işleme devam eder. Bu, takas veya sayfa dosyasının karışıma nasıl uyduğunu gösterir.

Hem modern Windows hem de Linux çekirdekleri denilen bir olanak sağlar mmap bu mekanizmanın bir dosyaya belleğin bir parçası gibi erişilmesine izin vermek için "bilerek" kullanıldığı yerde. Kullanıcı alanı işlemi koymak için bir adres seçebilir - ve çekirdek dosyanın doğru parçalarını anında yükleyerek veya yazarak "hatalara" cevap verir. Buna izin vermek için bu çağrı mekanizmasını kullanır. Çok geniş adres alanına sahip 64 bit sistemlerde, çok büyük dosyalara bellekteki gibi erişilebilir, bu da bazı programları basitleştirir.

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.