Sanal bellek
Tarihçe

Sanal belleğin geliştirilmesinden önceki dönemlerde (1940 ve 50'ler) büyükçe izlenceler (program), iki seviyeli saklamayı gerçekleştirebilmek için üstyazım (overlaying) yöntemleri gibi mantıksal çıkarımlara ihtiyaç duymaktaydı. İzlenceler üst ek sayfaları (overlay) birincil ve ikincil bellek arasında taşımakla görevliydi.
Sanal belleği bilişim dünyasına tanıtmanın temel gerekçesi birincil belleği genişletmek değil bu genişlemeleri yazılımcılar tarafından kolay kullanılabilir hale getirmekti.
Birçok sistem sanal bellek kullanımından önce de belleğin birden çok izlence arasında paylaşımını sağlayabilecek yeteneğe sahipti. PDP-10 ‘un ilk modellerinde görülen taban ve sınır yazmaçlarını ( base and bounds registers) bu duruma örnek olarak gösterebiliriz. Bu yöntem her bir uygulamaya 0'dan başlayan özel bir adres uzayı ve bunun yanında adresin bellekte uygulama için ayrılan kısmında olup olmadığını denetleyen bir sınır yazmacının kullanımını içerir. Eğer yazmaç adresin ilgili kısma ait olduğunu onaylarsa, karşılık gelen taban yazmacı içeriğini de ana bellekteki adresi göstermek üzere işleme dâhil eder. Bu sanal bellek kullanılmadan bölümlere ayırmanın (segmentation) basit bir biçimidir.
Sanal bellek 1952-1962 yılları arasında Manchester Üniversitesi'nde Atlas Bilgisayar için geliştirilmiş ve 1962 yılında tamamlanmıştır. Ancak Almanya'nın öncü bilgisayar bilimcilerinden ve Telefunken TR440 anabilgisayarının geliştiricisi olan Fritz-Rudolf Güntsch sanal bellek kavramını 1957 yılında doktora tezinde (Logischer Entwurf eines digitalen Rechengerätes mit mehreren asynchron laufenden Trommeln und automatischem Schnellspeicherbetrieb (Sayısal çoklu zamanuyumsuz tambura(bazı tip makineli tüfeklerde ve tepkisiz toplarda, içerisine mermi konulan silindir şeklindeki şarjör) saklama ve özdevimli hızlı bellek biçimli bilgisayar düzeni mantık kavramı)( Logic Concept of a Digital Computing Device with Multiple Asynchronous Drum Storage and Automatic Fast Memory Mode ) ) kendisinin yarattığını iddia etmiştir.
1961'de Burroughs, sanal belleğe sahip ilk ticari bilgisayarı olan B5000'i piyasaya sürdü. Sistem sayfalama (paging) yerine bölümlere ayırma (segmentation) kullanmaktaydı.
Bilgisayar bilimi tarihindeki birçok teknoloji gibi sanal belleğin benimsenmesi de birçok güçlüklerle karşılaştı. Anabilgisayarların işletim sistemlerinde uygulanmasından önce karşılaşılan birçok sorunla baş etmek için çeşitli modeller, deneyler ve kuramların geliştirilmesi gerekti. Devingen adres dönüşümleri özelleştirilmiş, pahalı ve kurulumu zor donanımı ve belleğe erişimi kısmen yavaşlatması en büyük sorunlarıydı. Ayrıca tüm sistemi kapsayan uygulama ve algoritmaların ikincil belleği kullanmasındaki etkinliği düşüreceğine dair endişeler bulunmaktaydı.
1969'a gelindiğinde sanal belleğin ticari bilgisayarlarda kullanımına dair tartışmalar da sona ermişti. David Sayre'nin liderliğindeki bir IBM araştırma grubu sanal belleğin diğer sistemlerden çok daha iyi çalıştığını ortaya koydu.
Sanal belleği tanıtan ilk minibilgisayar(minicomputer) Norveç üretimi NORD-1 oldu.1970'ler boyunca, VAX modelleri başta olmak üzere başka minibilgisayarlar da sanal belleği uygulamaya koydu.
Sanal bellek X86 mimarisine Intel'in I286 (80286) işlemcisinin güvenli biçimi (protected mode) ile tanıtıldı. Önceleri bölüm takası (segment swapping) ile gerçekleştirildi ancak büyük bölümlerde (segment) sorun yaratıyordu. Intel 80386 mevcut bölmelere ayırma katmanının altında işleyen sayfalama(paging) yöntemini tanıttı. Artık sayfa hatası (page fault) diğer kural dışı durumlarla (exception) birlikte değerlendirilebilmekteydi.

Sanal bellekte, adreslerin yapısı “sanal sayfa numarası”(virtual page number) ve “sayfa eklemesi”(page offset) olmak üzere iki kısma ayrılmıştır.
Bir sayfa tablosunun ana bellekteki yerini belirtmek için, donanımda sayfa tablosunun başlangıcını işaret eden bir yazmaç (register) bulunur. Bu yazmaç “sayfa tablosu yazmacı” olarak tanımlanır.
Adres Dönüştürme Önbelleği (ADÖ) (Translation Lookaside Buffer (TLB)) sayfa tablosu satırlarını tutar ve adres dönüşümlerinin izini sürer.
Adres Dönüştürme Önbelleği (ADÖ) (Translation Lookaside Buffer (TLB)) kullanılarak adres dönüşümü
Adres Dönüştürme Önbelleği (ADÖ) sayfa tablosunda gerçek adreslere eşlenen kayıtları tutan bir önbellek işlevi görür.
Eşzamanlı Önbellek ve ADÖ Erişimi
DECStation3100 Adres Dönüştürme Önbelleği (ADÖ) ve önbelleğinde (cache) gerçekleştirilen okuma/yazma işleminin adımları
Fritz Rudolf Güntsch (1992)