Sayfalama, Mantıksal adres eşleme ve sayfa değiştirme algoritması


0

Bunu benim için açıklığa kavuşturmak için birine ihtiyaç duyduğum bazı kavramlarla karıştırıldım.

Programın bir kısmının yürütme sırasında sabit diskte depolandığını biliyorum, yani sanal bellekte, değil mi? sanal bellek, sayfalama sisteminde bu sayfaların sabit büyüklükte (4KByte gibi) sahip olduğu, bu sayfaların bazılarının (ana bellekte var olan ve yüklü) gerçek fiziksel adreslere eşlendiği ve saklandığı veri bloklarına bölünmüştür. sabit boyutlu veri bloğu (örneğin 4kbayt olan sayfalarla aynı boyutta) ve bu veri bloklarına sayfa çerçeveleri "ya da Sadece Kareler" denir.
Şimdi, sanal bellek ve fiziksel bellek arasında bir eşleştirme tablosu var? ve ayrıca cpu tarafından oluşturulan ve gerçek fiziksel bellek adresiyle eşleştirilen bir mantıksal adres var. yani sayfa haritalama ve mantıksal adres haritalama iki farklı şeydir, fakat bazıları nasıl aynı doğru veya yanlış gibi çalışır ?!

not: bu noktaya kadar yanılıyorsam beni düzeltecek birine ihtiyacım var !!

Şimdi program diskte (sayfalar) depolanan fakat bellekte eşleştirilmemiş (çerçeveler) veri kullanmak istediğinde, belleğin sayfa değiştirme hakkı sağlaması gerekir ?!

örneğin, fiziksel bellek hafızasında bir kare olduğunu bildiğimiz (şimdi doğruysa) ve her karenin bir bayt büyüklüğüne sahip olduğunu bildiğimiz en iyi sayfa değiştirme algoritmasını kullanır, program doğru mu?!) bir program belleğe eşlenmemiş verileri sorsa (sayfa hatası) ve optimum algoritmayı kullanarak sayfa değiştirme işlemi yapmalıysa, bir sonraki sorumun aptalca olduğunu biliyorum çünkü sayfa değiştirme işlemi açık. tam bir sayfanın yerini alıyor, ancak tam bir sayfanın veya sayfanın içindeki baytların (yani bir sayfa çerçevesi) yerini alıyor, çünkü bu örneği aşağıdaki videoda gördüm ve başındakilerin söylediklerinin kafasını karıştırdım. 3 boyutlu bir kareye sahip olduğumuz video (hafızada 3 kare değil) ve 3 boyutlu bir sayfadaki sayfaları değiştirmeye başladı; yani 3 sayfa değiştirmelisiniz.

Lütfen ne olduğunu bana yönlendirecek birine ihtiyacım var, çünkü algoritmanın nasıl çalıştığını anladım, fakat kullandığı kavramlarla ilgili sorunum var !!

video : https://www.youtube.com/watch?v=uYcVtK65KHk

P.S: Kötü ingilizcem için açıklamak ve özür dilerim.

Saygılarımla


Eğer bir kurs yapıyorsanız, kurs metniniz nedir? İngilizce bilen insanlardan herhangi bir kaynağınız yok mu?
barlop

Yanıtlar:


2

Feragatname: Bu cevabın çoğu Windows merkezli, özellikle terminolojinin bir kısmı ve x86 / x64 merkezli. Kavramların çoğu, diğer genel amaçlı sanal bellek işletim sistemleri ve çoğu diğer platformlar için geçerlidir, ancak ince detaylar ve bazı terimler farklı olacaktır.

Programın bir kısmı yürütme sırasında sabit diskte saklanır, yani sanal bellekte, değil mi?

Evet, ama hepsi bu kadar VM için değil. (n.b .: Bu cevaptaki "VM", her zaman "sanal bellek" anlamına gelmez, asla "sanal makine" anlamına gelir.) Tipik bir VM ortamında, programın + adres alanının tüm adres alanı sanal bellekte kabul edilir.

Herhangi bir anda, bir sanal bellek alt kümesi RAM'de "anlamlıdır" ve bir sayfa hatasına neden olmadan başvuru yapılabilir "anlamına gelir". Geri kalanların çoğu, bugünlerde hemen hemen her zaman genellikle disk veya SSD olan “ikincil depolama” dır. (Özellikle yerleşik olmayan sanal belleği tutmak için özellikle kullanılmakta olan "ikincil depolama" için bir başka ad "yedek depo" dır.)

Sanal adres alanının üçüncü bir alt kümesi var, bu RAM'de olan ama yine de buna ulaşmak için bir sayfa hatası gerektirecek bir şey - Windows'ta bu, değiştirilmiş veya beklemede olan sayfa listesinde veya zaten paylaşılmış bir sayfada olacak RAM’de başka bir işlem için, ancak hataya neden olan işlem için geçerli değil. Ayrıca "sıfır talep" hataları da var. Bunların hepsi "yumuşak hata" örnekleridir, yani disk okumayanlar. Bu davalara girmeyeceğim çünkü bu zaten uzun bir cevap olacak ve ayrıca sorunuzla ilgisi yok: hiçbiri sayfanın değiştirilmesini gerektirmiyor.

sanal belleğin, sayfalama sisteminde bu sayfaların sabit büyüklükte olduğu (4KByte gibi) veri bloklarına bölündüğü yerlerde, bu sayfaların bazıları (ana bellekte var olan ve yüklü) gerçek fiziksel adreslere eşlenir ve saklanır. sabit boyutlu veri bloğu (örneğin 4kbayt olan sayfalarla aynı boyutta) ve bu veri bloklarına sayfa çerçeveleri "ya da Sadece Kareler" denir.

RAM, sayfalarının içeriği değil, "veri çerçevesi" olarak adlandırılan sayfalardır. Ayrıca btw, bu sadece veri değil, aynı zamanda programlamanın sayfalama tarafından getirilen kodudur.

sanal hafıza ile fiziksel hafıza arasında eşleştirme tablosu var mı?

Evet. Sayfa tabloları denir. Bunu düşünmenin daha iyi bir yolu, sayfa tablolarının sanal sayfa numaraları ile fiziksel sayfa numaraları, yani sayfa çerçeve numaraları arasında eşleşmesidir. Yani izin veriyorlar adres çevirisi sanal adreslerden fiziğe.

btw: Yerleşik öğelerin hala "sanal" olduğunu düşünüyoruz, çünkü başvurmak için kullandığımız adreslerin hala fiziksel olarak çevrilmesi gerekiyor. Ve yerleşik olan şeyler bile fiziksel konumlarını istediğiniz zaman değiştirebilir.

ve ayrıca cpu tarafından oluşturulan ve gerçek fiziksel bellek adresiyle eşleştirilen bir mantıksal adres var. yani sayfa haritalama ve mantıksal adres haritalama iki farklı şeydir, fakat bazıları nasıl aynı doğru veya yanlış gibi çalışır ?!

Hem "mantıksal adres" hem de "doğrusal adres", genellikle x86 bölümlenmiş adresleme ile ilişkili terimlerdir. (ya da 70'li yıllardan beri düz adres alanlarında yaşayan bizlere "hileli adresleme" diyoruz.) "mantıksal adres", komut işlenenden gelen bir "yer değiştirme" veya "ofset" ve tabandan oluşur Bu işlenen tarafından örtük veya açıkça kullanılan "bellek bölümünün" adresi. Kod için C (CALL ve JMP komutları gibi komut akışına referans veren herhangi bir şey için dolaylı olarak kullanılır), veri için D (kod olmayan çoğu başvuru için dolaylı olarak kullanılır), yığın için S (yığın ile ilgili referanslar için dolaylı olarak kullanılır) olarak adlandırılan altı olası segment vardır. yığın işaretçisi yazmacı) ve istediğiniz ne için kullanılabilecek üç "ekstra", E, F ve G. İşlenen kodlaması bazı durumlarda varsayılan kesimi geçersiz kılmanıza izin verir. MMU, "doğrusal bir adres" oluşturmak için yer değiştirmeyi parçanın taban adresine ekler.

Uygulamada, modern işletim sistemlerinde, segmentleme neredeyse devre dışı bırakılmıştır - bunun anlamı, hemen hemen tüm segmentlerin (F ve G segmentleri hariç), 0 temel adrese sahip olmasıdır, bu nedenle komut işleçlerinin iddia ettiği "yer değiştirme" sadece doğrusal adres olur . İşlemcide "çağrı" açıldığında (bu işletim sistemi önyüklemesinde çok erken olur ve işletim sistemi çalışırken asla kapanmaz), doğrusal adres daha sonra sayfa tabloları aracılığıyla sanal bir adres olarak çevrilir. Bu yüzden VM işletim sistemlerinde "doğrusal adresler" anlamında düşünmüyoruz. Yer değiştirme, doğrusal adresle aynıdır, sanal adresle aynıdır ve biz sadece sanal adresleri düşünürüz.

btw, AMD'deki x64 tasarımcıları, çeşitli işletim sistemlerinde çalışan çekirdek mühendislere danıştıktan sonra, Windows ve diğer işletim sistemlerinin temel işletim sistemi veri yapılarını bulmak için kullandıkları F ve G segmentleri hariç, neredeyse tamamen parçalama mekanizmasını bıraktı.

İşletim sisteminde bunu düşündüğümüz yol şudur: VM ortamında talimatlar yürütürken CPU: her zaman sanal adresler aracılığıyla belleğe gönderme. Sanal adres, sanal sayfa numarası ve sayfa içindeki bir bayt ofsetinden oluşur; ikincisi, düşük sıralı 12 bit'tir. CPU'nun bellek yönetim birimi (MMU) sanal sayfa numarasının çevirisini sayfa tablolarındaki fiziksel sayfa numarasına çevirir. Sayfa tablosu girişi (PTE) "geçerli" bit ayarına sahip değilse, sayfa "yerleşik" değildir ve işlemci bir sayfa hatası istisnası oluşturur anlamına gelir. İşletim sisteminin çağrı cihazı, bu istisna türünün istisna işleyicisidir. Mümkünse, geçerli bir PTE ile sonuçlanan hatayı giderir ve ardından istisnayı reddeder. İşlemci daha sonra hatayı kaldıran talimatı yeniden uygular - fakat bu sefer hatayı arttırmaz.

Şimdi program diskte (sayfalar) depolanan fakat bellekte eşleştirilmemiş (çerçeveler) veri kullanmak istediğinde, belleğin sayfa değiştirme hakkı sağlaması gerekir ?!

Şart değil. Bir "zor" sayfa hatasını çözme, genel olarak aşağıdakilerden oluşur:

  1. Diskte istenen sayfanın içeriğinin nerede depolandığını belirleme
  2. Kullanılabilir bir RAM sayfasını bulma ve faylanma işlemine atama
  3. Disk içeriğini mevcut sayfaya okuma
  4. Sayfanın konumu için sayfa tablosu girişini güncelleme ve "geçerli" bit ayarını yapma
  5. Sayfa hatası istisnasını reddetme

2. Adım, sayfa değişimini içerebilir, ancak şu anda kullanımda olmayan bir sayfayı kullanır. Tipik VM işletim sistemleri bu tür sayfaların listesini tutar.

gerçekten tam bir sayfanın veya sayfanın içindeki baytların yerini alıyor mu (bu bir sayfa çerçevesidir), çünkü bu örneği aşağıdaki videoda gördüm ve videonun başında söylediklerinin kafasını karıştırdım. (hafızada 3 kare değil) ve 3 boyutta bir sayfa içindeki sayfaları değiştirmeye başlar yani 3 haftayı değiştirmelisiniz.

Yukarıdaki listemdeki 3. adımda, hedef sayfa (ların) her zaman tam olarak üzerine yazılır. Açıkçası "3 sayfa büyüklüğündeki sayfaları değiştir" ne anlama geldiğini bilmiyorum.

Şimdi, yukarıda bahsettiğim optimizasyonlardan biri, sanal sayfaya ihtiyacınız varsa n şimdi, muhtemelen sanal sayfaya ihtiyacınız olacak n Yakında + 1, vb. Ileride okuyun , bir kerede bir sayfadan daha fazla okuma. Evet, üç sayfada okumak istiyorsanız, üç sayfayla fiziksel bellekte uğraşırsınız. Çalışma grubu listesinde ya da fiziksel RAM adresleri açısından mutlaka bitişik olmaları gerekmez. Aslında, sanal belleğin en büyük yararlarından biri, bitişik ücretsiz sanal belleğe yönelik kaygının temelde ortadan kalkmasıdır.

Referanslar:


Bunu hiç kaynak göstermeden yazdınız .. Hangi kitaplardan ve / veya web sitelerinden veya bu konuda okuduğunuz yöntemlerden bahseder misiniz?
barlop

@ barlop tamam, yapıldı.
Jamie Hanrahan

Öncelikle büyük cevabınız için teşekkür ederim, “MMU, doğrusal bir adres oluşturmak için segmenti temel adrese yer değiştirmeye ekler” demiştiniz. Bu, doğrusal adresin fiziksel olduğu anlamına mı geliyor? Daha açık olmak gerekirse, bu sayfalama açık olan doğrusal adresin sanal adres (mantıksal hak aynı mı?!) anlamına gelir ve sayfalama olmadan fiziksel olarak aynı mıdır? Son bir şey, "sayfaya başvuruda bulunulduğunda (okunduğunda veya yazıldığında)" derken, bunun hafızada olduğu anlamına gelir (veya sayfa doğru fiziksel hafızaya eşlenir) ?! aptalca sorularım için özür dilerim Saygılarımla
Wissam A Jackal

Evet, sayfalamanın etkin olduğu doğrusal adres sanal bir adrestir (ancak bu mantıksal ile aynı değildir). Disk belleği kapalıyken, doğrusal adres fiziksel (RAM) bir adrestir. "Sayfa başvurulan", bir talimatın sayfa içindeki bir adresi ifade ettiği anlamına gelir. Sayfa henüz RAM'de olmayabilir, bu durumda referans bir sayfa hatasına neden olur.
Jamie Hanrahan

Ve btw, lütfen "aptal sorular" sorduğunu düşünme. Hiç kimse bu şeyleri bilmekle doğmaz ve terminolojide farklı insanların bir şeyleri açıklamak için kullandığı çok fazla değişiklik vardır. Sorular hepimizin nasıl öğrendiği. :)
Jamie Hanrahan
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.