noimage

İçeriği Paylaş:

Sanal Bellek (Virtual Memory), Sayfalama (Pagging)

Sanal Bellek (Virtual Memory)Yıllar önce insanlar kullanılabilir olan belleğe sığmayan programlar ile karşılaştılar.Bu programların çalışabilmesi problemini programı yer paylaşan(overlay) adı verilen parçalara bölerek çözdüler.

  1. overlay ilk çalışmaya başlayacaktı ve bittiğinde diğer overlay i çağıracaktı.

Bazen birden fazla overlay in aynı anda bellekte olması gerekebilir.Overlay ler diskte bulunurlar ve işletim sistemince dinamik olarak takaslanırlar.Programın overlay lere parçalanması işlemini programcı yapmalıydı. Bu işlem sıkıcı ve uzun süre gerektiren bir iştir.Bu problemi ortadan kaldırmak için sanal bellek(virtual memory) fikri ortaya çıkmıştır.Temel fikir; programın büyüklüğü, verisi ve yığın(stack) toplamı fiziksel belleği aşabilir.İşletim sistemi programın çalışan parçasını bellekte, diğer kısmını diskte tutar.Örneğin; 16 MB boyutundaki bir program 4 MB lık bir bellekte çalışabilir.Bu işlem için programın hangi parçasının şu anda bellekte bulunması gerektiğine iyi karar verilmesi gerekmektedir.İstek yapıldıkça parçalar disk ver bellek arasında değiş tokuş yapılır.Sayfalama (Pagging)Sanal bellek sistemleri genellikle sayfalama (paging) adı verilen bir teknik kullanır. Bilgisayarda her bellek bölgesinin bir adresi vardır. Programda şu şekilde bir komut (instruction) olabilir:mov eax,1000Bu komut 1000 adresinin içerisindeki veriyi eax yazmacına (register) kopyalar (ya da tam tersi).Adresler indeksleme (indexing), taban yazmacı(base register) ve parça yazmaçları (segment register) kullanılarak oluşturulabilir.Program tarafından oluşturulan bu adreslere sanal adresler (virtual address) denilir. Sanal adres MMU (Memory Manegement Unit) tarafından fiziksel adreslere dönüştürülür.image001Basit bir örneği inceleyelim. Bilgisayarımız 16 bitlik adres üretsin. (0-64 KB) adres olabilir. Bu adresler sanal adreslerdir.Bilgisayarımızın 32 KB fiziksel belleği olduğunu düşünelim.Tüm sanal adres uzayı(virtual memory space =0-64 KB)sayfa (page) adı verilen birimlere bölünür.Her sanal adres sayfasına karşılık gelmesi için fiziksel bellek de aynı boyuttaki sayfalara bölünür.Fiziksel bellekte bulunan birimlere sayfa çerçeveleri (page frames) denilir.Sayfalar(sanal sayfa) ve sayfa çerçeveleri(fiziksel sayfa) her zaman aynı boyuttadır. Örneğimizde bu değer 4KB(4096 byte=212) olsun.Gerçek sistemlerde bu değer 512 byte-64 KB değişebilir.64  KB sanal bellek  = 4kb x 16 sayfadır.32 KB fiziksel bellek= 4kb x 8 sayfa çerçevesidir.Fiziksel bellek(RAM) ile disk arasında her zaman bir sayfa değiş tokuş yapılır.Program örneğin aşağıdaki komut ile 0. sayfaya erişmek istesin.mov eax,00 sanal adresi MMU ya gönderilir. MMU bu adresin 0. sayfada olduğunu görür (0-4095).image0030 sanal adresi MMU ya gönderilir.MMU bu adresin 0. sayfada olduğunu görür (0-4095).Şekilden görüldüğü gibi bu adres 2. sayfa çerçevesine karşılık gelmektedir.Böylece 0 adresini 8192 ye çevirir ve yola (bus) bu adres bilgisini koyar.16 sanal sayfanın 8 sayfa çerçevesine dönüştürülmesi, sanal adres uzayının fiziksel bellekten büyük olması problemini çözmez.Şekildeki gibi X ile gösterilen sanal sayfalar fiziksel bellek ile eşleştirilmemiştir. Donanımda hangi sayfaların bellekte olup olmadığını tutan bir bit mevcuttur.Program eşlenmemiş bir belleğe erişmek isterse ?mov   eax,32780   { 8.sayfanın başı = 32768 +12. byte}

  1. sanal sayfanın 12. byte na erişmek istesin.

MMU bu sayfanın eşlenmediğini fark ettiği zaman işletim sistemine uyarı verir(trap).İşletim sistemine gönderilen bu hataya sayfa hatası (page fault) denilir.İşletim sistemi mevcut bellekteki sayfalardan az kullanılan bir tanesini seçer ve diske yazar.Boşalan yere istenilen sayfayı getirir ve sayfa hatasına neden olan komutu tekrar çalıştırır.İşletim sistemi ayrıca MMU haritasında yeni getirilen sayfanın sanal sayfasını işaretler ve fiziksel sayfa ile eşleştirir.image0058196 sanal adresi MMU ya gelsin. Gelen 16 bitlik sanal adres,4 bit sayfa numarasına (page number) ve 12 bit göreli konuma (offset) ayrılır.12 bitlik göreli konum(offset) ile122 =4096 byte lık olan sayfanıniçerisindeki adres gösterilir.24=16 ile sanal sayfalar gösterilir.image006Sayfa numarası (page number) sayfa tablosu (page table) içerinseki indeks numrasıdır.Sayfa tablosu sanal tabloya karşılık gelen fiziksel sayfa çerçevesinin bulunması için kullanılır.Eğer sayfa tablosunda sayfa eşlemesi yok ise (bu durum present/absent biti ile bilinir) işletim sistemine sayfa hatası (page fault) gönderilir.Eşleme var ise; sayfa çerçevesi bulunur, bu değerin sağına göreli konum(offset) eklenir ve bu değer çıktı yazmacı vasıtasıyla yola (bus) konulur.

İçeriği Paylaş:
İlginizi Çekebilir
Yorum Yapılmamış

Henüz Hiç Yorum Yapılmadı..

Yorum Yaz

Sanal Bellek (Virtual Memory), Sayfalama (Pagging)

İşletim Sistemleri

29/08/2017 | Yorum Yok | 121 | Mustafa Küçükakarsu