Saf talep sayfalaması sırasında alan yönetimini değiştirin


12

Bir işletim sistemi ev ödevi yaparken karşılaştığım bir şüphe - ancak, basit bir kodlama sorusundan daha fazla konsept tabanlı görünüyor, bu yüzden IMHO ödev etiketinin bunun için uygun olduğunu düşünmüyorum.

Sabit miktarda RAM ve Takas belleği verildiğinde, aynı anda çalışan birden çok işlem için saf bir talep sayfalama şemasında, aşağıdaki 2 durumda takas alanı ne olur?

  1. Bir işlem bir sayfa hatasıyla karşılaşır ve RAM'de boş çerçeve yoktur, bu nedenle işlemin Çekirdek Çerçevelerinin yığınındaki sayfalardan birinin takas için yazılmasını gerektirir (basitlik için, kopyayı düşünmüyorum yazma durumunda). Açıkça, Takas alanında nereye bu çerçeve yazılır ve bunun için hangi veri yapılarının güncellenmesi gerekir?

  2. Bir işlemin belirli bir sayfayı sayfaya girmesi gerektiğinde, Takas belleğinde nereye bakar ve söz konusu sayfanın Takas'ta mevcut olup olmadığını nasıl bilebilir?

Tahmin edebileceğiniz gibi, saf talep yönetimi şeması sırasında Swap alanını nasıl yöneteceğinizi ve hangi veri yapılarının gerekli olacağını anlamakta güçlük çekiyorum. Cevabınızdaki herhangi bir bağlantıya başvurabilirseniz harika olurdu (Silberschatz tarafından "İşletim Sistemi Kavramları - 8. baskıda aradım, sorum için açık bir cevap bulamadım).


3
Güzel bir sert çekirdekli CS sorusu!
Dave Clarke

Yanıtlar:


8

Bu soruyu cevaplamak için bazı ön koşulları anlayacağım. Saf talep sayfalaması, donanım desteği olmadan gerçekleştirilemez. Tüm modern bilgisayar mimarileri sayfalamayı destekler, ancak çoğunun farklı uygulama ayrıntıları vardır.

x86 işlemciler sayfa bile olduğunu olsun veya olmasın, daha alakalı erişim yetkilerine ve yaklaşık sanal adres alanlarının ve sayfa eşleştirmeleri takip yanı sıra bit tutmak için bir sayfa tablosu denir kullanır mevcut fiziksel bellekte. İhlaller, işletim sistemi tarafından yakalanan sayfa hatalarını tetikler.

Bununla ilgili daha fazla bilgi için bu makaleye bakın .

Sayfa değiştirme sorusunu cevaplamak için, öncelikle işletim sisteminin hangi sayfaların hangi işlem tarafından kullanıldığını ve nasıl tahsis edildiğini nasıl takip ettiği sorusunu ziyaret etmeliyiz. Bunun için kullanılabilecek birçok farklı veri yapısı vardır. Bir çerçevenin tahsis edilip edilmediğini işaret eden düz bit dizisi bir yoldur. Bağlantılı listeler veya yığınlar başka bir listedir. Saf talep sayfalaması ile, ayrılan sayfalar tahsis edildiğinde gerçekte mevcut olarak işaretlenmez. Bunun, hiçbir işlem gerçekten yazılıncaya kadar fiziksel bir koçun bir kenara bırakılmaması etkisi vardır. Bir kez, donanım OS'nin yakaladığı bir hata atar ve daha önce tahsis edilmiş sanal sayfaya atanacak fiziksel sayfa yoksa işletim sistemi bir takas algoritması kullanır.

Sayfa çerçevesi ayırma hakkında daha fazla bilgi için buraya bakın . Orada bazı uygun veri yapılarına genel bir bakış bulacaksınız.

Sayfa tahsisi için uygun bir algoritma uygulandığında, takas için disk alanı tahsis etmek için başka bir algoritma seçilmelidir. Windows, örnek olarak, geçmişte sayfa değiştirmede dosya sisteminde düz bir dosya kullanmıştır. Tahsis edilen sayfaları takip eden veri yapısındaki her bir düğüm için, dosyadaki bir ofsetin, diskteki sayfanın konumunu gösteren bir işaretçi olduğunu hayal ediyorum. Unix benzeri işletim sistemleri, geleneksel olarak sayfa değişimi için ayrı bölümler kullanmıştır; bu, dosya sistemi katmanı olmadığı için muhtemelen daha hızlıdır.

Takas algoritması veri yapılarını ayırma algoritmasından ayırmak da mümkündür, ancak ikisi birbiriyle ilişkilidir, bu nedenle bu muhtemelen sık yapılmaz.

Umarım sorunuzu, tedavi ettiğim göreceli kısalığa rağmen cevaplar. İşletim sistemleri hakkında bilgi edinmenin en iyi yolunun, özellikle hobi işletim sistemi yapımıyla ilgilenen ve mükemmel öğreticiler sunan wiki.osdev.org ve www.osdever.net gibi sitelerde bulunan bazen kötü mimari spesifik ayrıntılara dalmak olduğunu buldum. böyle ayrıntılarda.


Evet, şimdi veri yapıları vb ayrıntılarının osdev.org bağlantıları için OSes - +1 arasında nasıl çılgınca değişebileceğini anlıyorum!
TCSGrad
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.