Sayfalama

Sayfalama ya da bellek adresleme, durgun sanal bellek sayfalarının ikincil bellekte (teker) saklanarak daha sonra ihtiyaç duyulduğunda ana belleğe yüklenmesi işlemini içerir. Bir diğer anlamı, adres uzayının belli oranlarda bloklara ayrılmasıdır. Sayfalama, bellek mahallerine ulaşımı ve adreslemeyi kolaylaştırır. 6502 mikroişlemcili bir sistemde 65536'lık adres uzayı 256 adet 256  Baytlık hayalı sayfalara ayrılır. Genelde 6502 işlemcili sitemlerde 1. sayfa yığın olarak ayrılırken 0. sayfaya bakış tabloları veya veri blokları yerleştirilir.
CPU bellekte okuma veya yazma yapacağı zaman ilk önce sadece tek bir bellek alanı veya G/Ç elemanı seçmek için ilgili adresi adres yoluna koyar. Çoğu 8-bitlik işlemciler 16-bitlik adres yoluna sahip olduğundan, 65536 değişik adresi tanımlayabilirler. Bu  adres sahası 0000H ile FFFFH  arasında olup, işlemcinin adresleme uzayını gösterir.
Sistemde 0000H ile FFFFH arasındaki 1KB'lık alan, kullanıcının ve sistem  programının kullandığı RAM  bölgesidir. 0400H ile 04FFH alanı  sistemde olabilecek 256 değişik (PIA  ve ACIA) giriş/çıkış elemanının adreslenmesine ayrılmıştır. Adres  uzayının en üst kısımları, F800H ile FFFFH arasındaki alanı kaplayan 2KB ise, monitör programının bulunduğu ROM bölgesidir. Adres uzayındaki geri kalan alanlar boş tutulur.

Sayfa ve sayfa düzeni

Günümüzde kullanılan sanal bellek sistemleri alanda yerellikten yararlanabilmek için programları belirli boyutlarda blok kümeleri şeklinde yerleştirirler. Bu belirli boyutlardaki blok kümeleri (öbekleri) “sayfa” olarak adlandırılır. Ana belleğin sayfalarla aynı boyutlarda bloklardan oluştuğu varsayılır. Bu varsayım “sayfa çerçevesi” (page frame) olarak nitelendirilir.

Sanal adres numarasının gerçek adres numarasına dönüştürülmesi

Ana bellekte kullanılan gerçek adres numarası, gerçek adresin üst bölümünü, sayfa eklemesi ise gerçek adresin alt bölümünü oluşturur. Sayfa eklemesindeki bitlerin sayısı sayfanın boyutunu belirler ve değişim göstermez. Sanal adreslerle adreslenebilen sayfa sayısı gerçek adreslerle adreslenen sayfa sayısı ile örtüşmek zorunda değildir; sanal sayfa sayısının gerçek sayfa sayısının üzerinde olması sınırsız boyuttaki bellek izlenimini yaratmada esas alınan noktadır.
Herhangi bir hatayla karşılaşılmadıkça olağan sanal adres dönüştürme işlemi şu şekilde yapılır:

if (ADÖ && önbellek) { veriyi işlemciye ilet; }
else if (!önbellek && ADÖ) { işlemciye = Ana_Bellek[ADÖ’ den gelen Gerçek Adres]; }
else { olağan dönüştürme işlemini gerçekleştir; }

Sayfa tablosu

Sanal bellekte sayfalar, belleği dizinleyen bir tablo kullanılarak yerleştirilirler. Bu yapı “sayfa tablosu (page table)” olarak adlandırılır. Bellekte tutulan sayfa tablosu sanal bellek adresinin numarasına göre dizinlenmiştir ve ona karşılık gelen gerçek sayfa numarasını içerir. Her program, sanal adres uzayını, ana bellekteki bellek uzayına dönüştüren kendine ait bir sayfa tablosuna sahiptir. Sayfa tablosu, ana bellekte mevcut olmayan sayfaların kayıtlarını da tutabilir. Her sayfa tablosunda geçerli bit (1 veya 0 ) tutulur. Eğer bu bit mantıksal sıfıra eşit ise sayfa ana bellekte mevcut değil demektir ve “sayfa hatası (page fault)” oluşur. Eğer bit mantıksal bire işaret ediyorsa sayfa ana bellekte mevcut ve geçerli bir fiziksel adrese sahip demektir.
[[|thumb|
Sayfa tablosu, karşılık gelen gerçek adresi elde etmek üzere sanal sayfa numarası ile dizinlenmiştir. Sayfa tablosu yazmacı sayfa tablosunun başlangıç adresini gösterir. Her kaydın geçerli biti adres dönüşümünün ve adresinin geçerliliğini gösterir. Eğer bu bit mantıksal sıfıra işaret ediyorsa sayfa bellekte mevcut değildir. Fazladan bitler ek bilgi saklamak veya güvenlik için kullanılabilir.]]

Sayfa hatası denetimi (Paging Supervisor) ve sayfa değişimi (takas)

Sayfa hatası meydana geldiğinde, yönetim işletim sistemine bırakılır. Bu devir kural dışı durum (hata) işleyişi (exception mechanism) ile gerçekleştirilir. Yönetim işletim sistemine geçtiğinde, sayfayı bir sonraki sıradüzende (genelde teker) bulmalı ve istenen sayfayı ana bellekte nereye koyacağına karar vermelidir. Sanal adres tek başına sayfanın tekerin neresinde olduğunu belirtmek için yeterli olmadığından, sanal adres uzayında bulunan her sayfanın tekerde izini sürmek gerekir. İşletim sistemi bu işlem için her sanal sayfanın tekerde nerede saklandığını kaydeden veri yapıları yaratır. Bu veri yapısı sayfa tablosunda veya ayrı bir tabloda tutulabilir. İşletim sistemi aynı zamanda her gerçek sayfanın hangi uygulamalar ve hangi sanal sayfalar tarafından kullanıldığını takip etmek üzere ayrı bir veri yapısı daha oluşturur. Ana bellekteki tüm sayfalar kullanımdayken sayfa hatası oluşması durumunda, işletim sistemi bir sayfayı değiştirmek(takas yapmak) üzere seçmelidir. Sayfa hatalarının en aza indirilmesi amaçlandığından çoğu işletim sistemi yakın bir zamanda kullanılmayacağını varsaydığı bir sayfayı seçer. İşletim sistemlerin bu varsayımları geçmiş durum değerlendirmelerine dayanarak gelecek durumun tahmin edilmesine dayanır. Bu tahminlerde kullanılan algoritmaların başında en uzun zamandır kullanılmayanla değiştirme (least recently used (LRU)) gelir. İşletim sistemi en uzun zamandır kullanılmayan sayfanın daha yakın bir zamanda kullanılan sayfadan daha az gerekli olduğu varsayımı yaparak uzun zamandır kullanılmayan sayfayı istenen sayfayla değiştirmek üzere seçer.
En uzun zamandır kullanılmayan yönteminin kusursuz ve eksiksiz olarak uygulanması veri yapısının her bellek başvurusunda güncellenmesini gerektireceğinden oldukça masraflıdır. Bunun yerine birçok işletim sisteminde hangi sayfaların yakın zamanda kullanılıp hangilerinin kullanılmadığına dair iz sürülür. İşletim sisteminin yükünü hafifletmek için donanımda başvuru biti (reference/use bit) tutulabilir. Bu bit sayfanın her kullanımında kurulur. İşletim sistemi belirli aralıklarla bu bitleri temizler ve hangi sayfaların kullanılıp kullanılmadığı bilgisinin kaydını tutar. Bu bilgi ışığında, işletim sistemi bir sayfa değiştireceği zaman en uzun zamandır kullanılmayan; yani başvuru bitleri mantıksal sıfıra eşit olan sayfalar arasından bir seçim yapar.

Değiştirme (Takas) için kullanılabilecek diğer algoritmalar

İlk Giren İlk Çıkar (First In First Out (FIFO)) 
Değiştirilmek üzere seçilen sayfa bellekte en uzun zamandır tutulan; belleğe diğerlerinden önce yüklenen sayfadır.
Son Giren İlk Çıkar (Last In First Out (LIFO)): 
Değiştirilmek üzere seçilen sayfa bellekte en kısa zamandır tutulan; belleğe en yakın zamanda yüklenen sayfadır.
En Az Sıklıkta Kullanılan (Least Frequently Used (LFU)):
Değiştirilmek üzere seçilen sayfa o an için bellekte en az sıklıkta kullanıldığı belirlenen sayfadır.
En Uygun (İdeal) (Optimal (OPT / MIN)):
Değiştirilmek üzere seçilen sayfa uzun bir süreliğine kullanılmayacak olan sayfadır.
Bu sayfanın belirlenmesi için algoritmanın gelecekteki başvuru (istek) durumları hakkında bilgi sahibi olması gerekmektedir ki genellikle bu bilgi mevcut değildir.