Elektronik

Bilgisayar Organizasyonu Ünite 8. BELLEK

8. BELLEK

8.1. Bellek Türleri

CPU tasarımındaki gelişmelere uyumluluk sağlamak amacıyla farklı bellek türleri ortaya çıkmıştır. Bellek hızı, bir şekilde CPU’ya ayak uydurmak zorundadır, aksi halde bellek sistemi yavaşlatan bir eleman olmaya başlar. Son yıllarda CPU’larda pek çok gelişme görülmesine rağmen, ön bellek (Cache Memory) kullanımı sayesinde ana belleğin CPU’ya ayak uydurmak için geliştirilme ihtiyacı azalmıştır. Ön bellek, sık erişilen veriler için bir arabellek (Buffer) görevi gören küçük, yüksek hızlı (ve dolayısıyla yüksek maliyetli) bir bellek türüdür.

Çok sayıda bellek teknolojisi mevcut olsa da, yalnızca iki temel bellek türü vardır: RAM (rastgele erişim belleği – random access memory) ve ROM (salt okunur bellek – read only memory). Genellikle birincil bellek olarak adlandırılan RAM, bilgisayarın programları çalıştırırken ihtiyaç duyduğu programları ve verileri depolamak için kullanılır; ancak RAM depolaması geçicidir ve güç kapatıldığında bu bilgileri kaybeder. Günümüz bilgisayarlarında RAM belleğinin büyük kısmını oluşturmak için kullanılan iki genel yonga türü vardır: SRAM ve DRAM (statik ve dinamik rasgele erişimli bellek).

Dinamik RAM, çok sayıda küçük kapasitörlerden yapılmıştır. DRAM üzerinde ki verilerin korunması için birkaç milisaniyede bir kapasitörlerinin yeniden şarj edilmesi gereklidir. Statik RAM teknolojisi, aksine, güç mevcut olduğu sürece içeriğini tutar. SRAM, daha önce incelediğimiz D flip-floplarına benzer devrelerden oluşur. SRAM, DRAM’den daha hızlı ve çok daha pahalıdır; ancak tasarımcılar çok daha yoğun (yonga başına birçok bit depolayabilir), daha az güç kullanan ve SRAM’den daha az ısı üreten DRAM’i kullanır. Bu nedenlerle, ana bellek için DRAM ve önbellek için SRAM olacak şekilde her iki teknoloji de sıklıkla birlikte kullanılır. Birçok DRAM çeşidi olmasına rağmen hepsinin temel çalışması aynıdır, DRAM çeşitleri aşağıdaki gibi sıralanabilir:

 Multibank DRAM (MDRAM)

 Fast-Page Mode (FPM) DRAM

 Extended Data Out (EDO) DRAM

 Burst EDO DRAM (BEDO DRAM)

 Synchronous Dynamic Random Access Memory (SDRAM)

 Synchronous Link (SL) DRAM

 Double Data Rate (DDR) SDRAM

 Direct Rambus (DR) DRAM.

RAM’e ek olarak, çoğu bilgisayar bilgisayarı başlatmak ve sistemi çalıştırmak için gerekli program gibi kritik bilgileri depolayan küçük boyutta ROM (salt okunur bellek) bulundurur. ROM içindeki veriler kaybolmaz ve her zaman verilerini tutar. Bu tür bellekler, gömülü sistemlerde veya programın değişmesinin gerekmediği sistemlerde de kullanılmaktadır. Pek çok cihaz, oyuncaklar ve hatta otomobiller, güç kesildiğinde bilgileri korumak için ROM yongaları kullanır. ROM’lar ayrıca, yazı tiplerini ROM’larda saklayan lazer yazıcılar gibi çevre birimlerinde ve hesap makinelerinde yaygın olarak kullanılır.

Beş farklı temel ROM türü vardır: ROM, PROM, EPROM, EEPROM ve flash bellek. PROM (programlanabilir salt okunur bellek – programmable  read only  memory) ROM’un bir varyasyonudur. PROM’lar, kullanıcı tarafından uygun ekipmanla programlanabilir. Programlandıktan sonra, PROM’daki veriler ve talimatlar değiştirilemez. EPROM (silinebilir PROM – erasable PROM), yeniden programlanabilir bir ROM türüdür ancak silmek için ayrı yeniden programlamak için ayrı özel araçlar gerektirir. Bir EPROM’u yeniden programlamak için önce tüm yonganın silinmesi gerekir. Veriler silinmeden yeni veriler eskisinin üzerine yazılamaz. EEPROM (elektriksel olarak silinebilir PROM – electrically erasable PROM), silme için özel bir araç gerektirmez ve yonganın istenilen bölümleri silinebilir böylece EPROM’un birçok dezavantajını ortadan kaldırır.  Flash bellek temelde EEPROM’dur ve verilerin bloklar halinde yazılabilmesi veya silinebilmesi gibi ek özellikleri vardır. Bu, flash belleği EEPROM’dan daha hızlı hale getirir.

8.2. Bellek Hiyerarşisi

Modern bir işlemcinin performans yeteneklerini anlamada en önemli hususlardan biri bellek hiyerarşisidir. Ancak, bazı bellek türleri çok daha az verimli ve bu nedenle diğerlerinden daha ucuz olduğundan tüm bellekler eşit değildir. Bu eşitsizlikle başa çıkmak için günümüzün bilgisayar sistemleri, en iyi performansı en iyi maliyetle sağlamak için bellek türlerinin bir kombinasyonunu kullanır. Bu yaklaşıma hiyerarşik bellek denir. Kural olarak, bellek ne kadar hızlıysa, depolama biti başına o kadar pahalıdır. Her biri farklı erişim hızlarına ve depolama kapasitelerine sahip bir bellek hiyerarşisi kullanarak, bir bilgisayar sistemi, oldukça iyi performans sergileyebilir. Hiyerarşik bellek sistemini oluşturan temel türler, yazmaçlar, önbellek, ana bellek ve ikincil bellektir.

Günümüz bilgisayarlarının her biri, sık kullanılan bellek konumlarından gelen verilerin geçici olarak saklanabileceği önbellek adı verilen çok yüksek hızlı belleğe sahiptir. Bu önbellek, tipik olarak orta hızda bir bellek olan çok daha büyük bir ana belleğe bağlıdır. Bu bellek, bir sabit diskten ve çeşitli çıkarılabilir ortamlardan oluşan çok büyük bir ikincil bellekle tamamlanır. Böyle bir hiyerarşik şema kullanılarak, yalnızca az sayıda hızlı (ve pahalı) yonga kullanılarak belleğin etkili erişim hızı iyileştirilebilir. Bu, tasarımcıların makul bir maliyetle kabul edilebilir performansa sahip bir bilgisayar oluşturmasına olanak tanır.

Bellekler, erişim için gereken makine döngüsü sayısı ve işlemciden uzaklığına göre sınıflandırılır. Bellek işlemciye ne kadar yakınsa, o kadar hızlı olmalıdır. Bellek ana işlemciden uzaklaştıkça, daha uzun erişim süreleri oluşur. Bu nedenle, daha uzaktaki bellekler için daha yavaş teknolojiler kullanılırken, CPU’ya daha yakın bellekler için daha hızlı teknolojiler kullanılır. Teknoloji ne kadar iyi olursa bellek o kadar hızlı ve pahalı hale gelir. Bu nedenle, daha hızlı bellekler, maliyet nedeniyle daha yavaş olanlardan daha küçük olma eğilimindedir.

Bu bellek hiyerarşisi terminolojisi aşağıdaki gibidir:

• Hit: İstenen veriler belirli bir bellek düzeyinde bulunur

• Miss: İstenen veriler, verilen bellek düzeyinde bulunmaz.

• Hit rate: Belirli bir bellek düzeyindeki bellek erişimlerinin yüzdesi.

• Miss rate: Belli bir bellek düzeyinde bulunmayan bellek erişimlerinin yüzdesi.
Not: Miss Rate = 1 Hit Rate.

• Hit time: Belirli bir bellek düzeyinde istenen bilgilere erişmek için gereken süre.

• Miss penalty: Üst bellek seviyesindeki bir bloğun değiştirilmesini içeren bir Miss’i işlemek için gereken süre, ilave olarak istenen veriyi işlemciye iletmek için ek süre. (Bir Miss’i işleme koyma süresi, tipik olarak, bir Hit’in işleme koyulma süresinden önemli ölçüde daha fazladır.)

Bellek hiyerarşisi Şekil 8.1’de gösterilmektedir. Daha yukarıda olan bellekler boyut olarak daha küçük olma eğilimindedir. Ancak daha küçük bellekler daha iyi performansa sahipken ve bu nedenle daha düşük seviyede bulunan belleklerden daha yüksek bir maliyete (bit başına) sahiptir. Şeklin solunda verilen sayılar tipik erişim sürelerini gösterir.

İşlemci herhangi bir veri isteğini belleğin en hızlı, en küçük bölümüne gönderir (genellikle önbellek). Veriler önbellekte bulunursa, hızlı bir şekilde CPU’ya yüklenebilir. Önbellekte yerleşik değilse, istek hiyerarşinin bir sonraki alt düzeyine iletilir ve arama süreci yeniden başlar. Veriler bu seviyede bulunursa, verinin bulunduğu tüm blok önbelleğe aktarılır. Veriler bu seviyede bulunamazsa, talep bir sonraki alt seviyeye iletilir ve bu böyle devam eder. Temel fikir, hiyerarşinin daha düşük (daha yavaş, daha büyük ve daha ucuz) seviyeleri, X konumunun içeriği için daha yüksek seviyelerden gelen bir talebe cevap verirken, aynı zamanda, X + 1, X + 2, …. adreslerinde bulunan verileri de gönderir. Böylece tüm bir veri bloğu daha yüksek seviyeli belleğe iletilir. İşlemlerin bu şekilde yürütülmesinin amacı, bu fazladan verilere yakın gelecekte başvurulacak olma ihtimalidir ki bu çoğu durumda öyledir.

8.3. Ön Bellek (CACHE)

Bir bilgisayar işlemcisi oldukça hızlıdır ve sürekli olarak bellekten bilgi okur. Bellek erişim süreleri işlemci hızından daha yavaş olduğundan, işlemci genellikle bilginin gelmesini beklemek zorunda kalır. Önbellek, işlemcinin çok yakın gelecekte yeniden ihtiyaç duyacağı bilgiler için kullandığı küçük, geçici, ancak hızlı bir bellektir. Erişilen verileri ve muhtemel erişilmek istenecek verileri hafızasında tutar.

Bir bilgisayarın sonraki döngüde hangi verilere erişeceğini bilmesinin bir yolu yoktur, bu nedenle yerellik ilkesini kullanır ve ne zaman bir ana bellek erişimi yapması gerekiyorsa ana bellekten tüm bloğu önbelleğe aktarır. Getirilen bu blokta başka bir şey kullanılırsa, tüm bloğun aktarılmış olması erişim süresinden tasarruf sağlar. Bu yeni bloğun önbellek konumu önbellek eşleme politikası ve önbellek boyutuna (yeni blok için yer olup olmadığını etkiler) bağlıdır.

Önbellek boyutu büyük ölçüde değişkendir. Günümüz kişisel bilgisayarlarında seviye 2 (L2) önbelleği 4MB ile 9MB arasında olabilmektedir. Seviye 1 (L1) önbellek daha küçüktür. L1 önbelleği işlemcide bulunurken, L2 önbelleği CPU ile ana bellek arasında bulunur. Bu nedenle L1 önbelleği, L2 önbelleğinden daha hızlıdır.

Önbelleğin amacı, son kullanılan verileri ana bellekte depolamak yerine CPU’ya daha yakın depolayarak bellek erişimini hızlandırmaktır. Önbellek, ana bellek kadar büyük olmasa da, oldukça hızlıdır. Ana bellek tipik olarak, örneğin 60ns erişim süreli DRAM’den oluşurken, önbellek tipik olarak SRAM’den oluşur ve DRAM’den çok daha kısa bir döngü süresiyle daha hızlı erişim sağlar (tipik bir önbellek erişim süresi 10ns’dir). İyi performans göstermesi için önbelleğin çok büyük olması gerekmez. Genel bir kural, önbelleği yeterince küçük yapmaktır, böylece bit başına genel ortalama maliyet, ana belleğe yakın, ancak faydalı olacak kadar büyüktür. Bu hızlı bellek oldukça pahalı olduğundan, tüm ana belleği oluşturmak için önbellekte bulunan teknolojiyi kullanmak mümkün değildir.

Önbelleği “özel” yapan ona adresle erişilememesidir, ön belleğe içeriğe göre erişilir. Bu nedenle, önbellek bazen içerik adreslenebilir bellek olarak adlandırılır. Çoğu önbellek eşleme şemasında, istenen değerin önbellekte saklanıp saklanmadığını görmek için önbellek girişleri kontrol edilmeli veya aranmalıdır. Bu istenen verileri bulma sürecini basitleştirmek için çeşitli önbellek eşleme algoritmaları kullanılır.

8.3.1. Önbellek Eşleme Şemaları

Önbelleğin işlevsel olması için yararlı verileri depolaması gerekir. Bununla birlikte, gerekli veriler CPU tarafından bulunamazsa işe yaramaz hale gelirler. Verilere veya talimatlara erişirken, CPU önce bir ana bellek adresi oluşturur. Önbelleğe kopyalanmış verilerin adresleri ana bellek adresleriyle aynı değildir. Örneğin, ana bellek adresi 2E3’te bulunan veriler önbellekteki ilk konumda bulunabilir. CPU, ön bellekteki verileri bulabilmek için ana bellek adresini bir önbellek konumuna “dönüştüren” özel bir eşleme şeması kullanır.

Bu adres dönüşümü, ana bellek adresindeki bitler kullanılarak yapılır. Öncelikle bitler, alanlar denilen farklı gruplara ayrılır. Eşleme şemasına bağlı olarak, iki veya üç alan olabilir. Bu alanların nasıl kullanıldığı, kullanılan eşleme şemasına bağlıdır. Eşleme şeması, verilerin orijinal olarak önbelleğe kopyalandığında nereye yerleştirileceğini belirler ve ayrıca önbellekte arama yaparken CPU’nun önceden kopyalanmış verileri bulması için bir yöntem sağlar.

Bu eşleme şemalarını tartışmadan önce, verilerin önbelleğe nasıl kopyalandığını anlamak önemlidir. Ana bellek ve önbellek aynı büyüklükteki bloklara bölünmüştür. Bir bellek adresi oluşturulduğunda, gerekli word’un orada olup olmadığını görmek için önce önbellek aranır. İstenen word önbellekte bulunmadığında, word’un bulunduğu ana bellek bloğunun tamamı önbelleğe yüklenir. Daha önce bahsedildiği gibi, buna yerellik ilkesi denir. Eğer bir word az önce çağırılmışsa, aynı çevrede bulunan wordlerinde de kısa süre içinde çağırılma ihtimali yüksektir. Bir önbellek wordune erişmek, bir ana bellek wordune erişmekten daha hızlı olduğundan, önbellek genel erişim süresini hızlandırır.

Ana bellek adresinin bir alanı, önbellekte bulunan verilerin bulunduğu (cache hit) yere veya veriler henüz ön bellekte bulunmuyorsa yükleneceği yere (cache miss) işaret eder. Daha sonra başvurulan önbellek bloğunun geçerli olup olmadığı kontrol edilir. Bu, her bir önbellek bloğunu bir bit ile ilişkilendirilerek yapılır. Bir 0 biti, önbellek bloğunun boş olduğunu ve ana belleğe erişilmesi gerektiği anlamına gelir. 1 biti bloğun geçerli olduğu anlamına gelir. Daha sonra önbellek bloğundaki etiket adresin etiket alanıyla karşılaştırılır. (Etiket, önbellekte saklanan ana bellek adresinden türetilen özel bir bit grubudur.) Etiketler aynıysa, istenen önbellek bloğunu bulunmuş olur. Üç ana önbellek eşleme şemasını şu şekildedir:

Doğrudan Eşlemeli Ön Bellek

Doğrudan eşlemeli önbellekte, modüler bir yaklaşım ile önbellek eşlemeleri yapılır. Önbellek bloklarının sayısı ana bellek bloklarından az olduğu için, ön belleğe yüklenecek ana bellek bloklarının seçiminde bir yöntem belirlenmelidir. Doğrudan eşleme, ana belleğin X bloğunu önbelleğin Y bloğuna eşler. Örneğin, 10 bloklu bir önbellekte, ana bellek bloğu 0 önbellek bloğu 0 ile eşleşir, ana bellek bloğu 1 önbellek bloğu 1 ile eşleşir. . . , ana bellek bloğu 9 önbellek bloğu 9 ile eşleşir ve ana bellek bloğu 10 önbellek bloğu 0 ile eşleşir. Bu nedenle, ana bellek blokları 0 ve 10 (ve 20, 30 ve benzeri) önbellek bloğu 0 için rekabet içindedir. Bu durum, Şekil 8.2’de gösterilmektedir.

İlişkisel Ön Bellek (Fully Associative Cache)

Doğrudan eşlemeli önbellek eşleme şeması herhangi bir arama gerektirmediğinden diğer ön belleklerden daha az maliyetlidir. Her ana bellek bloğunun, önbellekte eşlendiği belirli bir konumu vardır; bir ana bellek adresi bir önbellek adresine dönüştürüldüğünde, CPU sadece blok alanındaki bitleri inceleyerek bu bellek bloğu için önbellekte tam olarak nereye bakacağını bilir.

İlişkisel ön bellek te, doğrudan eşlemede yapılan her ana bellek bloğu için benzersiz bir konum belirlemenin tam tersine bir ana bellek bloğunun önbellekte herhangi bir yere yerleştirilmesine izin verilir. Bu şekilde eşlenen bir bloğu bulmanın tek yolu, tüm önbelleği aramaktır. Bir arama, istenen veri bloğunun önbellekte bulunup bulunmadığını belirlemek için istenen etiketi önbellekteki tüm etiketlerle karşılaştırmaktır. İlişkilendirilebilir bellek, ilişkisel arama yapabilmek için özel donanım gerektirir ve bu nedenle oldukça pahalıdır.

Doğrudan eşlemede, yeni bir bloğun yerleştirilmesi gereken önbellek konumunda önceden başka bir blok varsa, veriler doğrudan üzerine yazılır. Ancak önbellekte bulunan o blok eğer değiştirilmiş ise üzerine yazılmadan önce ana belleğe geri yazılır. İlişkisel eşlemede ise, önbellek dolduğunda, önbellekten atılacak bloğa karar vermek için bir değiştirme algoritmasına ihtiyaç duyulur. Basit bir ilk giren ilk çıkar algoritması işe yarayacaktır. Kullanılabilecek birçok değiştirme algoritması vardır; bunlar kısaca tartışılacaktır.

Küme İlişkisel Ön Bellek Eşleme (Set Associative Cache)

Hızı ve karmaşıklığı nedeniyle, ilişkilendirilebilir önbellek çok pahalıdır. Doğrudan eşleme ucuz olsa da çok kısıtlayıcıdır. Bu eşleme biçimi, doğrudan eşleme dezavantajlarının ortadan kaldırıldığı gelişmiş bir doğrudan eşleme biçimidir. Set Associative, doğrudan eşleme yönteminde olası thrashing (yararlı verilerin bellekten çıkarılması) sorununu ele alır. Bunu, bir bloğu önbellekte bir satır olarak eşlemek yerine, bir küme oluşturarak birkaç satırı birlikte gruplayarak yapar. Daha sonra bellekteki bir blok, belirli bir kümenin satırlarından herhangi biriyle eşleşebilir. Küme ilişkisel eşleme, önbellekte bulunan her wordün aynı dizin adresi için ana bellekte iki veya daha fazla worde sahip olabilmesini sağlar. Küme ilişkisel önbellek eşlemesi, doğrudan ve ilişkisel önbellek eşleme tekniklerini birleştirir.

Diğer bir eşleme yöntemi ise N-yollu küme ilişkisel önbellek eşlemesidir. Bu yöntem, bloğu belirli bir önbellek konumuna eşlemek için adres kullandığı için doğrudan eşlenmiş önbelleğe benzemektedir. Önemli fark, tek bir önbellek bloğuna eşleme yapmak yerine, bir adresin birkaç önbellek bloğuna eşlenmesidir. Önbellekteki tüm kümeler aynı boyutta olmalıdır. Bu boyut, önbellekten önbelleğe değişebilir.

8.3.2. Değiştirme İlkeleri

Doğrudan eşlenmiş bir önbellekte, bir önbellek bloğu için bir çekişme varsa, olası tek eylem mevcut bloğun yeni bloğa yer açmak için önbellekten atılmasıdır. Bu işleme değiştirme denir. Doğrudan eşlemede, her yeni bloğun konumu önceden belirlendiği için değiştirme işlemine gerek yoktur. Bununla birlikte, ilişkisel önbellek ve küme ilişkisel önbellek ile, önbellekten kaldırılacak bloğu belirlemek için bir değiştirme algoritmasına ihtiyaç duyulduğundan önceki bölümde bahsedilmişti. İlişkisel önbellek kullanılırken, belirli bir ana bellek bloğunun eşlenebileceği olası K önbellek konumu (burada K, önbellekteki blok sayısıdır) vardır. N-yollu küme ilişkisel eşleme ile bir blok, belirli bir küme içindeki N farklı bloktan herhangi birine eşlenebilir. Değiştirmeyi belirleyen algoritmaya değiştirme ilkesi denir.

Birkaç popüler değiştirme ilkesi vardır. Kısa süre sonra tekrar ihtiyaç duyulacak değerleri önbellekte tutulur ve bir daha ihtiyaç duyulmayacak veya bir süre gerekmeyecek bloklar atılır. Bu iki kritere göre tutulacak veya çıkarılacak kesin blokları belirlemek için geleceğe bakabilecek bir algoritma gereklidir.

Bir kaç adet değiştirme algoritması seçeneği vardır. Örneğin, zamansal yerellik. Son zamanlarda kullanılmayan herhangi bir değere yakında tekrar ihtiyaç duyulmayacağını düşünebiliriz. Her bloğa en son ne zaman erişildiğini takip edebilir (bloğa bir zaman damgası atayabilir) ve en az kullanılan bloğu atılacak blok olarak seçebiliriz. Bu algoritmaya “en az kullanılan” (LRU – least recently used) adı verilir. Ancak LRU, sistemin her önbellek bloğu için bir erişim geçmişi tutmasını gerektirir, bu da önemli bir alan gerektirir ve önbelleğin çalışmasını yavaşlatır.

İlk giren ilk çıkar (FIFO – first in first out) başka bir popüler yaklaşımdır. Bu algoritma ile, önbellekte en uzun süre kalan blok (ne kadar yakın zamanda kullanıldığına bakılmaksızın), önbellekten kaldırılacak blok olarak seçilecektir.

Diğer bir yaklaşım ise rastgele bir blok seçmektir. Ancak rastgele değiştirme, bazen yakında ihtiyaç duyulacak verilerin atılmasına neden olabilir.

Seçilen algoritma genellikle sistemin nasıl kullanılacağına bağlıdır. Tüm senaryolar için aynı anda en iyi tek algoritma yoktur. Bu nedenle, tasarımcılar çok çeşitli koşullar altında iyi performans gösteren farklı algoritmalar kullanırlar.

8.3.3. Ön Belleğe Alma Sorunları

Programlar yerellik ilkesine uyduğunda, önbelleğe alma sorunsuz gerçekleşir. Aksi halde önbelleğe alma bozulur ve bellek hiyerarşisinin performansı azalır. Özellikle, nesne yönelimli programlama, programların optimal yerellikten daha azını sergilemesine neden olabilir.

8.4. Sanal Bellek (Virtual Memory)

Verileri önbelleğe almak, bir bilgisayarın sık kullanılan verilere daha küçük ancak daha hızlı bir bellekten erişmesini sağlar. Önbellek, bellek hiyerarşisinin en üstüne yakın bir yerde bulunur. Hiyerarşide bulunan bir diğer önemli kavram sanal bellektir. Sanal belleğin amacı, sabit diski RAM’in bir uzantısı olarak kullanarak bir işlem için kullanılabilir adres alanını arttırmaktır. Çoğu zaman kişisel bilgisayarlar bellekleri işletim sisteminin kendisine ek olarak bir kelime işlemci uygulaması, bir e-posta programı ve bir grafik programı gibi birden çok uygulamayı aynı anda tutmak için yeterli olmazlar. Sanal bellek kullanılarak, bilgisayarın gerçekte sahip olduğundan daha fazla ana belleğe sahip olunabilir ve bu ek depolama alanını tutmak için sabit sürücüyü kullanılır. Sabit sürücüdeki bu alan, ana bellek parçalarını tuttuğu için sayfa dosyası (page file) olarak adlandırılır. Sanal bellek, tüm adresleme işlerinin işletim sistemi tarafından ele alındığı hayali bir bellek olarak düşünülebilir.

Sanal bellek oluşturmanın en yaygın yolu, ana belleğin sabit boyutlu bloklara bölündüğü ve programların da aynı boyutta bloklara bölündüğü bir yöntem olan sayfalama kullanmaktır. Tipik olarak, programın parçaları gerektiği gibi belleğe alınır. Bitişik program parçalarının ana belleğin bitişik bloklarında depolanması zorunlu değildir. Program parçaları sıralanmadan saklanabildiğinden, program adresleri CPU tarafından oluşturulduğunda ana bellek adreslerine dönüştürülmelidir. Önbelleğe alırken de, bir ana bellek adresinin önbellek konumuna dönüştürülmesi gerektiğini hatırlayın. Aynı durum sanal bellek kullanılırken de geçerlidir; her sanal adres fiziksel bir adrese çevrilmelidir. Sanal belleğin açıklamasına daha fazla girmeden önce, sayfalama yoluyla uygulanan sanal bellek için sık kullanılan bazı terimleri tanımlayalım:

•  Sanal adres: İşlemin kullandığı mantıksal veya program adresi.

•  Fiziksel adres: Fiziksel bellekteki gerçek adres.

•  Eşleme: Sanal adreslerin fiziksel adreslere çevrildiği mekanizma (önbellek eşlemesine benzer)

•  Sayfa çerçeveleri: Ana belleğin (fiziksel bellek) bölündüğü eşit boyutlu parçalar veya bloklar.

• Sayfalar: Sanal belleğin (mantıksal adres alanı) bölündüğü, her biri bir sayfa çerçevesine eşit boyutta parçalar veya bloklar. Sanal sayfalar, ihtiyaç duyulana kadar diskte saklanır.

• Sayfalama: Sanal bir sayfanın diskten ana bellekteki bir sayfa çerçevesine kopyalanması işlemidir.

• Parçalanma (Fragmentation) : Belleğin kullanılamaz hale gelmesi.

•  Sayfa hatası: İstenen bir sayfa ana bellekte olmadığında ortaya çıkan ve diskten belleğe kopyalanması gerektiğinde oluşan durum.

Ana bellek ve sanal bellek eşit boyutlu sayfalara bölündüğünden, işlem adres alanının parçaları ana belleğe taşınabilir, ancak bitişik olarak depolanmaları gerekmez. Daha önce de belirtildiği gibi, tüm işlemin aynı anda ana bellekte bulundurulması gerekmez; sanal bellek, bir programın bellekte yalnızca belirli parçalar varken çalışmasına izin verir. Kullanılmayan parçalar diskteki sayfa dosyasında saklanır.

Sanal bellek, sayfalama, bölümleme veya her ikisinin kombinasyonu gibi farklı tekniklerle oluşturulabilir, ancak sayfalama en popüler olanıdır. Sayfalamanın başarısı, önbellekte olduğu gibi yerellik ilkesine bağlıdır. Ana bellekte bulunmayan verilere ihtiyaç duyulduğunda, aynı sayfadaki diğer verilerin program çalışmaya devam ederken faydalı olma ihtimaline karşılık, içinde bulunduğu tüm blok diskten ana belleğe kopyalanır.

8.4.1. Sayfalama

Sayfalandırmanın arkasındaki temel fikir oldukça basittir: Fiziksel bellek sabit boyutlu parçalar halinde (sayfa çerçeveleri) işlemlere ayrılıp ve bilgileri bir sayfa tablosuna kaydederek işlemin çeşitli sayfalarının nerede olduğu takip edilir. Her işlemin, tipik olarak ana bellekte bulunan kendi sayfa tablosu vardır ve sayfa tablosu, işlemin her sanal sayfasının fiziksel konumunu depolar. Sayfa tablosunda N satır vardır, burada N, işlemdeki sanal sayfaların sayısıdır. İşlemin o anda ana bellekte olmayan sayfaları varsa, sayfa tablosu bunu ilgili bir biti 0’a ayarlayarak gösterir; sayfa ana bellekte ise, ilgili bit 1 olarak ayarlanır. Bu nedenle, sayfa tablosunun her girişinin ilgili bir bit ve bir çerçeve numarası olarak iki alanı vardır.

Daha fazla bilgi aktarmak için ek alanlar eklenebilir. Örneğin, sayfanın değiştirilip değiştirilmediğini belirtmek için bir değiştirme biti eklenebilir. Bu bit ihtiyaç halinde sayfanın diske geri döndürülmesini daha verimli hale getirir, çünkü değiştirilmemiş sayfanın diske yeniden yazılması gerekmez. Sayfa kullanımını belirtmek için başka bir bit (kullanım biti) eklenebilir. Bu bit, sayfaya her erişildiğinde 1’e ayarlanır. Belirli bir süre sonra, kullanım biti 0’a ayarlanır. Sayfaya tekrar başvurulursa, kullanım biti 1’e ayarlanır. Ancak, bit 0 kalırsa, bu, sayfanın bir süre kullanılmadığını gösterir ve böylece sistem bu sayfayı diske geri gönderebilir. Bunu yaparak, sistem bu sayfanın konumunu, sürecin sonunda ihtiyaç duyduğu başka bir sayfa için kullanabilir.

Sanal bellek sayfaları, fiziksel bellek sayfa çerçeveleriyle aynı boyuttadır. İşlem belleği bu sabit boyutlu sayfalara bölünür ve son sayfa belleğe kopyalandığında dâhili parçalanmaya neden olabilir. İşlem aslında tüm sayfa çerçevesine ihtiyaç duymayabilir, ancak yine de başka hiçbir işlem onu kullanamaz. Bu nedenle, bu son çerçevede kullanılmayan bellek boşa harcanır. İşlemin kendisi birden az sayfa gerektirebilir, ancak belleğe kopyalandığında tüm sayfa çerçevesini kaplaması gerekir. Dahili parçalanma, belleğin belirli bir bölümü (bu durumda, bir sayfa) içindeki kullanılamaz alandır.

8.4.2. Bölümleme

Ön bellek oluşturmak için bir diğer yöntem, bölümlemedir. Sanal adres alanını eşit, sabit boyutlu sayfalara ve fiziksel adres alanını eşit boyutlu sayfa çerçevelerine bölmek yerine, sanal adres alanı mantıksal, değişken uzunluklu birimlere veya bölümlere ayrılır. Fiziksel bellek ise bölümlere ayrılmaz. Bir bölümün fiziksel belleğe kopyalanması gerektiğinde, işletim sistemi tüm bölümü depolamaya yetecek büyüklükte bir boş bellek yığını arar. Her bölümün bellekte yer alıp almadığını belirten bir baz adresi ve boyutunu belirten bir sınırı vardır. Birden çok bölümden oluşan her program, bir sayfa tablosu yerine bir bölüm tablosuna sahiptir. Bu bölüm tablosu, her bölüm için baz / sınır çiftlerini içerir.

Sayfalandırmada olduğu gibi, bölümleme de parçalanma sorunları vardır. Bir çerçeve, çerçevenin tamamına ihtiyaç duymayan bir işleme tahsis edilebileceğinden, sayfalama dâhili parçalama oluşturur. Bölümleme de ise harici parçalanma oluşur. Bölümler ayrıldıkça ve serbest bırakıldıkça, bellekte bulunan boş yığınlar parçalanır. Sonuç olarak, birçok küçük parça vardır, ancak hiçbiri tüm bölümü depolayacak kadar büyük değildir. Harici parçalanmanın önüne geçebilmek için, sistemler bir çeşit çöp toplama kullanır. Bu işlem, daha küçük, parçalanmış yığınları daha büyük, kullanılabilir parçalar halinde birleştirmek için işgal edilmiş bellek parçalarını karıştırır. Örneğin Windows işletim sisteminde bir disk sürücüsünü daha önce birleştirdiyseniz (defragment) , diskte ki dağınık birçok küçük boş alanı, daha az dağınık daha büyük alanlar olacak şekilde birleştiren benzer bir sürece tanık olmuşsunuzdur.

8.4.3. Birleştirilmiş Sayfalama ve Bölümleme

Sayfalama, bölümlemeden oldukça farklıdır. Sayfalama tamamen fiziksel bir değere dayanır: Program ve ana bellek aynı fiziksel boyutta parçalara bölünür. Bölümleme ise programın mantıksal bölümlerinin değişken boyutlu bölümlere ayrılması ile yapılır. Kullanıcı bölümlemede bölüm boyutları ve sınırlarının farkındadır. Sayfalandırmada ise kullanıcı bölümleme bilgisine sahip değildir. Sayfalamanın yönetimi daha kolaydır. Her şey aynı boyutta olduğundan ayırma, serbest bırakma, değiştirme ve yeniden yerleştirme kolaydır. Bununla birlikte, sayfalar genellikle bölümlerden daha küçüktür, bu da daha fazla ek yük anlamına gelir. Sayfalama harici parçalanmayı ortadan kaldırırken, bölümleme dâhili parçalanmayı ortadan kaldırır.

Sayfalama ve bölümlemenin her ikisinin de avantajları vardır ve bir sistem ikisinide aynı anda kullanabilir. Kombine bir yaklaşımda, sanal adres alanı, değişken uzunluktaki bölümlere ayrılır ve bölümler sabit boyutlu sayfalara bölünür. Ana bellek ise aynı boyuttaki çerçevelere bölünür.

Birleştirilmiş bölümleme ve sayfalama kullanıcı açısından bölümlemeye ve sistem açısından sayfalamaya izin verdiğinden oldukça avantajlıdır.

Bölüm Özeti

Bellek bir hiyerarşi olarak düzenlenmiştir, daha büyük bellekler daha ucuzdur ancak daha yavaştır ve daha küçük bellekler daha hızlı ancak daha pahalıdır. Tipik bir bellek hiyerarşisinde, bir önbellek, ana bellek ve ikincil bellek (genellikle bir disk sürücüsü) bulunur. Yerellik ilkesi, bu hiyerarşinin ardışık katmanları arasındaki boşluğu kapatmaya yardımcı olur.

Önbellek, ana belleğin en sık kullanılan bloklarını tutmak için bir ara bellek görevi görür ve CPU’ya en yakın konumdadır. Bellek hiyerarşisinin bir amacı, ön bellek kullanarak işlemcinin hızına yakın bir erişim süresi elde etmektir. Bu amaca ulaşmak, çalıştırılan programların davranış özelliklerine, önbelleğin boyutuna ve organizasyonuna ve önbellek değiştirme politikasına bağlıdır.

Önbellek doğrudan eşlenmiş, ilişkisel veya küme ilişkisel gibi farklı şekillerde organize edilebilir. Doğrudan eşlenen önbellek değiştirme algoritmasına ihtiyaç duymaz; ancak, ilişkisel ve küme ilişkisel, önbellek doluysa yeni bir bloğa yer açmak için önbellekten kaldırılacak bloğu belirlemek için FIFO, LRU veya başka bir yerleştirme ilkesini kullanmalıdır. LRU çok iyi performans verir ancak uygulaması oldukça zordur.

Bellek hiyerarşisinin bir diğer amacı, sanal bellek olarak da adlandırılan sabit diskin kendisini kullanarak ana belleği genişletmektir. Sanal bellek, sanal adres alanı fiziksel bellekten daha büyük olan programları çalıştırmamıza izin verir. Aynı zamanda daha fazla işlemin aynı anda çalışmasına izin verir.

Kaynakça

Davis, W. Operating Systems, A Systematic View, 4th ed., Redwood City, CA: Benjamin/Cummings, 1992.

Flynn, I. M., & McHoes, A. M. Understanding Operating Systems. Pacific Grove, CA: Brooks/Cole, 1991.

Hamacher, V. C., Vranesic, Z. G., & Zaky, S. G. Computer Organization, 5th ed., New York: McGraw-Hill, 2002.

Hennessy, J. L., & Patterson, D. A. Computer Architecture: A Quantitative Approach, 2nd ed., San Francisco: Morgan Kaufmann, 1996.

Mano, Morris. Digital Design, 2nd ed., Upper Saddle River, NJ: Prentice Hall, 1991.

Silberschatz, A., Galvin, P., & Gagne, G. Operating System Concepts, 6th ed., Reading, MA: Addison-Wesley, 2001.

Stallings, W. Computer Organization and Architecture, 5th ed., New York: Macmillan Publishing Company, 2000.

Stallings, W. Operating Systems, 4th ed., New York: Macmillan Publishing Company, 2001. Tanenbaum, A. Structured Computer Organization, 4th ed., Englewood Cliffs, NJ: Prentice Hall, 1999.

Tanenbaum, A., & Woodhull, S. Operating Systems, Design and Implementation, 2nd ed., Englewood Cliffs, NJ: Prentice Hall, 1997.

Comments