|  06-22-2012 | #2 | 
	| 
Prof. Dr. Sinsi
 | 
				  Sanal Bellek - Virtual Memory 
 
            SANAL BELLEK - Virtual MemoryÇalışabilmesi için var olan bellek kapasitesinden fazlasını isteyen programların çalışabilir kılınması eski bir bilgisayar problemidir
  Buna üretilen genel çözüm katman (overlay) yaklaşımı idi  Katmanlar programın parçalara bölünmüş hali idi  Sıfırıncı katman ilk olarak çalışmalı, işi bittikten sonra başka bir katmanı çağırmalıydı  Bunun yanında karmaşık yapılı, bellekte çoklu katmanlar çalıştırılmasını sağlayan yaklaşımlar da vardı  Katmanlar diskte bulunmalı, işletim sistemi tarafından belleğe yüklenmesi veya bellekten kaldırılması yapılmalı idi  
 Bu yaklaşımdaki temel sorun, programın parçalara bölünme işinin programcı tarafından yapılmak zorunda olması idi
  Bu işin büyük bir program için yapılması da oldukça zaman kaybına sebep olacağı açık idi  
 Sonuçta sanal bellek kavramı ortaya çıktı
  Temel mantığı program kodunun, programda kullanılan değişkenler, veri yapıları, vs  nin (data) ve de programın yığın alanının (stack) var olan bellek alanına sığmamasına dayanır  Bu durumda işletim sistemi programın kullanılan parçalarından kullanılanları bellekte, kalanını ise diskte tutar  
 Kısaca söylemek gerekirse, sanal bellek bir bilgisayar programının var olan gerçek fiziksel bellekten daha fazla bellek varmış gibi davranmasını sağlayan sistemdir
  SAYFALAMA VE SAYFA HATASI
 Pekçok bilgisayar sistemi sanal bellek adı verilen bir teknik kullanmaktadır
  Her bilgisayarda kullanılabilecek bir adres uzayı vardır  Adres uzayı ile işlemcinin, bir sürecin veya bellek ve işlemci dışındaki bir bilgisayar donanımının erişebileceği adress genişliği/sınırı kastedilmektedir  Aşağıdaki program kodunu inceleyelim  
 MOVE x, 1000
 
 Mimari tasarımın, bu kod parçasının 1000 numaralı adresteki verinin, X ile gösterilen yazmaca veya değişkene atanmasını sağlayacak şekilde yapıldığını düşünelim
  Programda üretilen/kullanılan adresler sanal bellek sisteminin kullanıldığı bir tasarımda gerçek fiziksel adresler değildir  Programda üretilen adreslere sanal adres denir ve bu adresler sanal adres uzayını oluşturur  Sanal adresler yazılımsal veya donanımsal olarak gerçek fiziksel adreslere çevrilmektedir  Sanal adres uzayı eşit büyüklükteki parçalara bölünür  Bunların herbirine sayfa (page) denir  Bu sayfalara karşılık gelen fiziksel bellek alanlarına ise sayfa çerçevesi denir  Eşit büyüklükte ve adreslenebilirlikteki kolaylığı nedeniyle 4K seçilen sayfa ve sayfa çerçevelerinden oluşan bir gösterim aşağıdaki gibi olabilir  
  Görüldüğü gibi sanal bellek üzerindeki bazı alanlar gerçek fiziksel bellek üzerindeki alanlara karşılık gelmektedir
  Bire-bir şekilde yapılan iki yapı arasındaki bu eşlemeye haritalama (mapping) denir  Yazının bundan sonraki kısmında bellekteki sayfa ile, sanal bellek üzerinde fiziksel belleğin bir alanını referans eden sayfa ve bunun referans ettiği alan içindeki bilgiler kastedilecektir  SAYFA HATASI
 Yukarıdaki şekilde sayfaların bazılarının fiziksel belleğe referans etmediği görülmektedir
  (X ile işaretli alanlar) Programın çalışması sırasında program kodu, erişim yetkisi olmayan bir alana erişmeye çalışabilir veya sanal bellek üzerinde fiziksel belleğe henüz referans edilmemiş bir alana erişmeye çalışabilir  Sayfa Hatası olarak adlandırılan bu durumda, işletim sisteminin bellekten uygun bir sayfayı boşaltması ve istekte bulunan programa bunu tahsis etmesi gerekmektedir  Bellekte uygun bir sayfa ayarlandıktan sonra, sayfa hatasına sebep olan kod tekrar çalıştırılır  Gözden kaçırılmaması gereken nokta, tahsis edilecek bellek gözündeki veriler değiştiyse, önce bunların takas alanına aktarılarak saklanması gerekliliğidir  Değişmediyse, ayarlanan sayfa üzerine veriler yazılacaktır  
 Yukarıda bahsi geçen, sayfa hatası durumunda bellekteki uygun bir sayfanın seçimi ele alınması gereken bir noktadır
  Eğer sıklıkla kullanılan bir sayfa seçilirse, takas alanından bu sayfanın sık çağrılmasından dolayı performans kaybı olacaktır  Şimdi sayfa hatası durumunda seçilecek sayfayı belirlemeye getirilen yaklaşımlardan biri olan FIFO (first in- first out)'yu inceleyelim  FIFO (First In - First Out)
 Bu yaklaşımda işletim sistemi bellekte bulunan sayfalar için bağlı bir liste yapısı oluşturur
  Listedeki yapıların bellekteki sayfaları işaret eden yapılar olduğunu düşünebiliriz  Bu listenin baş (head) kısmı en eski (belleğe ilk gelen) sayfayı tutarken, kuyruk (tail) kısmı en yeni (en son gelen) sayfayı tutar  Bir sayfa hatası durumunda, listede baş kısmın işaret ettiği sayfa seçilmektedir  Belleğe yeni yüklenen sayfa da liste sonuna eklenir  Uygulaması ve yazılması kolay bir metoddur
  Fakat sadece sayfaların belleğe geliş sıralarına bakmakta, sayfaların kullanım sıklığını göz ardı etmektedir  Sıklıkla kullanılan sayfaların da bellekten çıkarılmasına sebep olabilmektedir  Ayrıca belleğe her sayfa giriş çıkışında da bağlı listenin güncellenmesi gerekecektir  Bunun için tercih edilen bir metod değildir  
 Sadece 3 tane sayfayla referans edilebilen bir bellekte sirasiyla 1,5,3,1,6,1,6,5 numarali sayfalara erişim gerekliliği olsun
  Bellekteki sayfaların durumu sırasıyla aşağıdaki gibi olacaktır  
  1 numarali sayfaya istekte bulunulduğunda sayfa belleğe yüklenecektir
  Daha sonra 5 numarali sayfaya istekte 5 ve ardindan da 3 numarali sayfa belleğe yüklenecektir  Bu anda belleğe ilk yüklenen 1 numarali sayfa en eski durumunda, son eklenen 3 ise en yeni durumundadır  Daha sonra 1 numaralı sayfaya tekrar istekte bulunulur ve bellekte zaten olduğu için herhangi bir yerdeğiştirme yapılmadan sıradaki 6 numaralı sayfaya istek ele alınır  Henüz bellekte referans edilmemiş bir sayfa numarasına istek verildiğinden sayfa hatası oluşur ve bunun FIFO ile çözümünün yapılabilmesi için en eski sayfanın çıkarılıp yerine yeni gelen sayfanın yüklenmesi gerekmektedir  Buradaki çıkarma işleminin eger çıkarılacak sayfada bir değişiklik olduysa takas alanına yazmak ya da kullanılmayacaksa üzerine yazmak şeklinde olacağı unutulmamalıdır  Böylece 6 numaralı sayfa 1 numaralı sayfanın olduğu konuma yüklenir  Bu durumda en yeni olan sayfa 6, en eski olan sayfa ise 5 dir  1 numaralı sayfaya tekrar istek geldiğinde artık bellekte olmadığından tekrar sayfa hatası oluşur ve bu sefer 5 numaralı sayfa çıkarılarak yerine 1 numaralı sayfa yüklenir  Tekrar 6 numaralı sayfaya istekte bulunulduğunda zaten bellekte olduğu için sıradaki isteğe geçilir ve 5 numaralı sayfa isteğiyle sayfa hatası tekrar oluşur ve diğerlerine göre daha uzun süredir bellekte beklemekte olan 3 numaralı sayfa çıkarılarak yerine 5 numaralı sayfa yüklenir  
 Üstekiyle bunun anlatımları farklı istediğinizi yazabilirsiniz
 | 
	|  |   |