Sanal bellek: Revizyonlar arasındaki fark

[kontrol edilmiş revizyon][kontrol edilmiş revizyon]
İçerik silindi İçerik eklendi
Nanahuatl (mesaj | katkılar)
kDeğişiklik özeti yok
Bilgi Bot (mesaj | katkılar)
k Yazım hataları ve genel düzenlemeler, değiştirildi: rasgele → rastgele
1. satır:
{{Diğer anlamı|Bellek (anlam ayrımı)}}
'''Sanal bellek,''' fiziksel belleğin görünürdeki miktarını arttırarak uygulama programına (izlence) fiziksel belleğin boyutundan bağımsız ve sürekli bellek alanı sağlayan bilgisayar tekniğidir. Ana belleğin, ''tekerin (ikincil saklama)'' ''önbelleği (cache)'' gibi davranmasıyla; yani teker yüzeyini belleğin bir uzantısıymış gibi kullanmasıyla gerçekleştirilir. Ancak gerçekte, yalnızca o anda ihtiyaç duyulan veri tekerden ana belleğe aktarılıyor olabilir. Günümüzde genel amaçlı bilgisayarların işletim sistemleri çoklu ortam uygulamaları, sözcük işlemcileri, tablolama izlenceleri gibi sıradan uygulamalar için sanal bellek yöntemi kullanılmaktadır.
 
== Sanal bellek kullanımı ==
17. satır:
=== Sayfalama ===
{{ana|Sayfalama}}
Sayfalama durgun sanal bellek sayfalarının ikincil bellekte(teker) saklanarak daha sonra ihtiyaç duyulduğunda ana belleğe yüklenmesi işlemini içerir.
 
==== Sayfa ve Sayfa Düzeni ====
24. satır:
 
=== Sanal Adres Numarasının Gerçek Adres Numarasına Dönüştürülmesi ===
[[Dosya:Sanal_adreslerin_fiziksel_adrese_dönüştürülmesi1Sanal adreslerin fiziksel adrese dönüştürülmesi1.jpg|thumb|250px|''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.
'']]
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:
50. satır:
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.
 
[[Dosya:Sayfa_tablosu22Sayfa tablosu22.jpg|thumb|250px|''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.'']]
 
==== Tablonun boyutunu ve kullanılan ana bellek miktarını azaltmak için yöntemler ====
68. satır:
 
==== 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ılmayan''la 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.
79. satır:
 
=== Kalıcı ve Yerleşik Sayfalar ===
Tüm sanal bellek sistemleri hareketsiz kılınmış; yani burada bulunan sayfaların sayfa değişimi için seçilip ikincil belleğe gönderilemeyeceği alanlara sahiptir.
 
* Kesme düzenekleri genellikle çeşitli kesmeleri(örneğin giriş/çıkış tamamlanmaları, zamanlayıcı, izlence (program) hataları, sayfa hataları vb.) işleyen bir dizi göstergelere (pointer) dayanırlar. Kesmelerin sayfa değişimi olmadan işlenmesi kullanışlıdır.
87. satır:
 
=== Yazmalar ===
Bir sanal bellek sisteminde, bir sonraki sıradüzene '''tümüne yazmanın(write-through)''' yaratacağı gecikme çok büyük olduğundan bunu karşılamak bir ara bellekle sağlanamaz. Bunun yerine, '''geri yazma (write-back)''' yöntemi kullanılır. Bellekte sadece bir sayfa yenisiyle değiştirildiğinde sadece o sayfa kopyalanır. Burada kullanılan teknik bir alt seviyedeki sıradüzene yazma tekniğine geri kopyalama(copy back) benzerdir.
 
İkincil bellekten (teker) aktarma zamanı, ikincil belleğe ulaşım zamanına göre çok daha kısa olduğundan kopyalamanın tek bir öbek yerine tüm bir sayfa için yapılması daha etkin bir çözüm oluşturmaktadır. Geri yazma yöntemi bu konu göz önünde bulundurularak tasarlanmalıdır. Değiştirmek üzere seçilen sayfanın geri kopyalanması gerekip gerekmediği denetlenerek yazmanın bu bilgiye göre yapılması verimliliği daha da arttıracaktır. Bir sayfanın bellekte okunduktan sonra değiştirilip değiştirilmediğinin izi sayfa tablosuna eklenen bir bit sayesinde sürülebilir. Bu bite '''kirli bit (dirty bit)''' adı verilir. Sayfa ilk yazıldığında bu bit kurulur. İşletim sistemi sayfayı değiştirmek üzere seçtiğinde kirli bit sayfanın yerine yenisi getirilmeden önce yazılması gerekip gerekmediğini gösterir.
112. satır:
 
Adres Dönüştürme Önbellekleri çoğunlukla küçüktür, satır sayısı çok hızlı bilgisayarlarda bile 128-256’yı geçmediğinden bu önbelleklerde karmaşık olan '''tam ilişkili arama'''nın masrafı fazla değildir. Çoğu orta düzey işlemcide küçük n yollu kümeli ilişkili düzen kullanılır. ADÖ kullanan bilgisayarlar önbellek erişimi için gereken çevrim sayısını azaltmak için önbellek erişimini ADÖ erişimi ile koşut olarak (aynı anda, eşzamanlı) yapar. Bu yöntem ile sanal adreslerin sayfa numaraları ADÖ’ de arama işlemi için kullanılırken sayfa eklemesi kısmı önbellek erişiminde dizin olarak görev yapar.
 
 
[[Dosya:Eszamanlıönbellekveadöerisimi111.jpg|thumb| ''Eşzamanlı Önbellek ve ADÖ Erişimi'']]
 
 
===== Eşzamanlı ADÖ ve Önbellek Erişiminin Sorunları =====
Satır 123 ⟶ 121:
==== Sanal Bellek, Adres Dönüştürme Önbelleği (ADÖ) ve Önbellek ====
 
En iyi koşullarda bir sanal adres ADÖ tarafından dönüştürülerek önbelleğe yollanır ve ilgili veri bulunur, getirilir ve daha sonra işlemciye geri gönderilir. En kötü durumda ise ''başvuru (reference)'' sıradüzendeki bu üç yapıda da; yani ADÖ, sayfa tablosu ve önbellekte bulunamaz.
 
==== MIPS R2000 Adres Dönüştürme ÖnBelleği (ADÖ) ====
 
[[Dosya:Decstation mips adö111.jpg|thumb|''DECStation3100 Adres Dönüştürme Önbelleği (ADÖ) ve önbelleğinde (cache) gerçekleştirilen okuma/yazma işleminin adımları'']]
 
 
DECStation 3100’de kullanılan MIPS R2000 her ne kadar basit bir uygulamaya sahip olsa da özyapısı günümüz adres dönüştürme belleklerininkine çok benzerdir. Bellek sistemi
4-KB sayfalar ve 32-bitlik adres uzayına sahiptir. Dolayısıyla, sanal sayfa numaraları 20 bit uzunluktadır. Sanal adres ile gerçek adres aynı boyutlara sahiptir. Adres dönüştürme önbelleği (ADÖ) 64 kayıt tutabilir ve tam eşlemelidir. ADÖ buyruk ve veri başvuruları tarafından paylaşılır. Her kayıt 64 bit genişliğindedir ve 20 bitlik etikete sahiptir ki bu etiket kaydın ADÖ’ de tutulan sanal sayfa numarasıdır. Sanal sayfa numarasına karşılık gelen gerçek sayfa numarası da 20 bit uzunluğundadır ve geçerli bit, kirli bit gibi sayman bitlerine yer verir.
 
Bir ADÖ sayma bulamama durumu meydana geldiğinde, MIPS donanımı başvurunun sayfa numarasını özel bir yazmaca kaydeder ve'' kural dışı durum (exception)'' üretir. Kural dışı durum işletim sistemini uyararak sorunun yazılım katmanında halledilmesini sağlar. Bulunamayan sayfanın gerçek adresini bulmak için ADÖ sayfa tablosunu sanal adres numarası ve yürürlükte olan sayfa tablosunun başlangıç adresini tutan yazmaç yardımıyla dizinler. Bir takım buyruk kümesi ile adres dönüştürme önbelleği güncellenir. İşletim sistemi sayfa tablosundaki eşlenen gerçek adresleri adres dönüştürme önbelleğine yerleştirir. Eğer geçersiz bir gerçek adresle karşılaşılmışsa hata oluşur. Bir ADÖ’ de sayfa bulamama durumu en az 10, ortalama olarak da 16 çevrimlik bir gecikmeye neden olur. Donanım değiştirilmek sayfa için bir önerme dizini tutar ve bu dizinden rasgelerastgele bir kayıt seçilir.
 
ADÖ’ de ''koruma (protection)'' sağlanması için yazma erişiminin denetimini sağlayan bir bit mevcuttur. Bu özellik, salt okunur sayfaların üzerine yazmayı engeller böyle bir istekle karşılaşıldığında da bir hata üretir.
Satır 157 ⟶ 154:
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.
 
[[Dosya:Fritz-Rudolf Güntsch.jpg|right|thumb|Fritz Rudolf Güntsch (1992)]]
 
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.
Satır 176 ⟶ 173:
 
== Kaynaklar ==
 
 
 
* John L. Hennessy, David A. Patterson, ''Computer Architecture, A Quantitative Approach'' (ISBN 1-55860-724-2)
 
* http://computer-refuge.org/bitsavers/pdf/burroughs/B5000_5500_5700/5000-21005_B5000_operChar.pdf ''Operational Characteristics for the Processors for Burroughs''
 
* http://www.multicians.org/multics-vm.html ''The Multics Virtual Memory: Concepts and Design''
 
"https://tr.wikipedia.org/wiki/Sanal_bellek" sayfasından alınmıştır