Sanal bellek: Revizyonlar arasındaki fark

[kontrol edilmemiş revizyon][kontrol edilmemiş revizyon]
İçerik silindi İçerik eklendi
Vizör (mesaj | katkılar)
TXiKiBoT adlı kullanıcıya ait olan 7465916 sayılı sürüm geri getirildi. (Twinkle)
Khutuck Bot (mesaj | katkılar)
k Bot: Kozmetik değişiklikler
2. satır:
'''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ı ==
1980lerin [[DOS]]’u veya 1960ların anabilgisayar işletim sistemleri gibi daha eski işletim sistemlerinde bu işlev bulunmamaktadır. Gömülü sistemlerde ve bazı özel amaçlı bilgisayar sistemlerinde hızlı ve uyumlu tepki zamanı gerektiğinden genellikle sanal bellek kullanılmaz.
 
9. satır:
* Sınırlı boyuta sahip ana belleğin programlama ve kullanım açısından yaratacağı güçlükleri aşmak.
 
== Sanal Belleğin Gerçekleştirilmesi ==
Sanal bellek tekniğiyle, ''Merkezi İşlem Birimi (Central Processing Unit)'' bir '''“sanal adres (mantıksal adres)”''' üretir. Sanal adreslerin oluşturduğu kümeye '''“adres uzayı”''' denir. Yazılım ve donanımın birlikte çalışmasıyla bu sanal adres, ana belleğe ulaşmak için kullanılacak bir '''gerçek (fiziksel) adrese''' dönüştürülür. Bu işleme “'''adres dönüştürme” (memory mapping / address translation)''' denir. Gerçek adreslerin oluşturduğu kümeye ise '''“bellek uzayı”''' denir.
 
=== Yerleştirme ===
Sanal bellek, programların çalıştırılmak üzere yüklenmesinde “'''yerleştirme (relocation)'''” tekniğini kullanarak kolaylık sağlar. Yerleştirmede programın kullandığı sanal adresler, ana belleğe erişimden önce farklı gerçek adreslere yönlendirilirler. Bu işlem, programı yüklerken ana belleğin herhangi bir yerini kullanabilmemizi sağlar.
 
=== 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 ====
[[Dosya:sayfadüzeni1.jpg|thumb|250px|sayfa ve sayfa düzeni]]
Günümüzde kullanılan sanal bellek sistemleri ''alanda yerellik''ten 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 ===
[[Dosya:Sanal_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.
'']]
44. satır:
* Giriş /çıkışların yönetiminde genelgeçer yöntemler uygulamayıp kendi arabelleklerine sahip olan ve çevre birimleri ile doğrudan iletişim kuran izlenceler (program)
 
=== Sayfa Tablosu ===
[[Dosya:Sayfa tablosu11.jpg|thumb|250px|''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.
'']]
52. satır:
[[Dosya:Sayfa_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 ====
# Sayfa tablosunun boyutlarını sınırlayan bir sınır kaydı tutmak. Eğer sanal sayfa numarası sınır kaydının sınırını aşarsa kayıtlar sayfa tablosuna eklenmelidir. Bu teknik, bir işlem daha fazla alana ihtiyaç duyduğunda sayfa tablosuna büyüme yeteneği kazandırır. Sonuç olarak sanal adres uzayı yalnızca ihtiyaç duyulduğunda büyük tutulacaktır.
# '''Bölmelere ayırmak:''' Çoğu dil iki boyutları büyüyebilen iki ayrı alan gerektirdiği için tek boyutta büyümenin yetersiz olduğu durumlarda sayfa tablosu ikiye bölünür. İki ayrı sayfanın farklı sınırlara sahip olması desteklenir. İki sayfa tablosu kullanımı adres uzayını da ikiye parçaya (segment) böler. Sınır kaydı her iki parça için de tutulur. MIPS mimarisi de bu tekniği desteklemektedir.
# Sanal adrese bir ''hesaba dayalı adresleme (hashing)'' işlevi eklenerek sayfa tablosu veri yapısının sadece gerçek sayfa sayısı kadar boyutta olması sağlanabilir. Bu yapıya '''ters çevrilmiş sayfa tablosu''' adı verilir.
# '''Birden fazla seviyeli sayfa tablosu''' kullanılabilir.
# Sayfa tabloları kullanımı için gerekli ana bellek miktarının azaltılması sayfa tablolarının tekrar sayfalanması ile sağlanabilir.
 
=== Sayfa Hatası ===
Eğer başvurulan veri o anda ana bellekte bulunamıyorsa sayfa ana bellekte mevcut değil demektir ve '''“sayfa hatası (page fault)”''' oluşur. Sayfa hatası çok yüksek bulamama gecikmesine neden olur. Sanal bellek sistemleri tasarlanırken bu durumun yaratacağı yükü engellemek için bazı önlemler alınabilir.
 
67. satır:
* '''Tümüne yazma (write-through)''' yöntemi çok masraflı olduğu için '''geri yazma(write-back)''' metodu kullanılı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.
 
===== Değiştirme (Takas) İçin Kullanılabilecek Diğer Algoritmalar =====
* '''İlk Giren İlk Çıkar:''' 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:''' Değiştirilmek üzere seçilen sayfa bellekte en kısa zamandır tutulan; belleğe en yakın zamanda yüklenen sayfadır.
78. satır:
* '''En Uygun:''' Değiştirilmek üzere seçilen sayfa uzun bir süre 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.
 
=== 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.
 
86. satır:
* İşlemleri zamanlamaya bağımlı ve sayfalamanın yol açacağı tepki süresi değişimine izin veremeyecek kadar katı olan çekirdek (kernel) veya uygulama alanları hareketsiz kılınmıştı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.
 
=== Adres Dönüştürme İşleminin Hızlandırılması ===
 
==== Adres Dönüştürme Önbelleği (ADÖ) (Translation Lookaside Buffer (TLB)) ====
{{ana|Adres dönüştürme önbelleği}}
 
103. satır:
[[Dosya:Adöadresdönüsüm111.jpg|thumb|''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 sadece sayfa tablosu eşleştirmelerini tutan bir önbellektir. '''Sayfa bulma olayı ((vuruş) (hit))''' gerçekleştiğinde gerçek adres numarası adresin yapılandırılması için kullanılır ve karşılık gelen bit mantıksal bire işaret eder. Eğer ADÖ’ de bir '''sayfa bulamama olayı ((ıska)(miss))''' gerçekleşirse bunun nedeninin bir sayfa hatası mı yoksa sadece ADÖ’ den kaynaklanan bir sayfa bulamama (miss) mı olduğuna karar verilmelidir. Eğer sayfa bellekte mevcut ise sorunun ADÖ’ de bir dönüştürme hatasından ve eksikliğinden kaynaklandığı anlaşılır. Bu durumda işlemci sayfa tablosundaki adres dönüşümlerini Adres Dönüştürme Önbelleğine baştan yükleyerek, ''başvuruyu (reference)'' tekrar eder. ADÖ sayfa bulamama durumu donanımla veya yazılım kullanılarak halledilebilir. Eğer sayfa bellekte mevcut değil ise gerçek bir '''sayfa hatası (page fault)''' söz konusudur. Bu durumda işlemci, işletim sistemini ''kural dışı durum (exception)'' ile uyarır.
 
[[Dosya:Adö111.jpg|thumb|''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ı ADÖ ve Önbellek Erişimi ====
 
Adres Dönüştürme Önbelleği (ADÖ), diğer sıradan önbellekler gibi'' tam ilişkili, kümeli ilişkili'' ya da ''doğrudan eşlemeli'' olarak tasarlanabilir.
121. satır:
Eş zamanlı erişim ancak önbelleğe dizin olarak gönderilen bitler sanal adres dönüştürmesi sırasında değişmezse işe yarar. Bu durum küçük önbellekler, büyük sayfa boyutları ya da yüksek n yollu kümeli ilişkili önbellekler kullanma gereksinimini doğurur.
 
==== 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ı'']]
137. satır:
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.
 
== Çağdaş İşlemcilerde Karmaşık Bellek Sistemleri ==
 
[[Dosya:Çağdaş işlemciler111.jpg]]
 
== Sanal Bellek Tasarımında Temel Sorunlar ==
 
Sanal bellek tasarımında göz önünde bulundurulması gereken temel noktalar:
153. satır:
* İstek üzerine yükleme yöntemi
 
== 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.
159. satır:
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.
 
 
165. satır:
 
 
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ı.
175. satır:
Sanal belleği tanıtan ilk ''minibilgisayar(minicomputer)'' Norveç üretimi NORD-1 oldu.1970ler boyunca, VAX modelleri başta olmak üzere başka minibilgisayarlar da sanal belleği uygulamaya koydu.
 
Sanal bellek ''[[X86]] mimarisi''ne 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.
 
== Kaynaklar ==
 
 
* http://oergin.etu.edu.tr/bil361/sanalbellek.pdf Oğuz ERGİN ''BİL 361 – Bilgisayar Mimarisi ve Organizasyonu, Sanal Bellek''
 
* 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''
 
== Dış Bağlantılar ==
* [http://en.wikipedia.org/wiki/Virtual_memory wikipedia: virtual memory ]
* [http://computer.howstuffworks.com/virtual-memory.htm/ howstuffworks: virtual memory]
* [http://www.cs.gmu.edu/cne/modules/vm/green/defn.html/ www.cs.gmu.edu/cne :virual memory]
* [http://courses.cs.vt.edu/csonline/OS/Lessons/VirtualMemory/index.html/ courses.cs.vt.edu : virtual memory tutorial]
* [http://www.belgeler.org/sag/sag_memory-management-vm.html belgeler.org: sanal bellek]
 
[[Kategori:Sanal bellek|*]]
"https://tr.wikipedia.org/wiki/Sanal_bellek" sayfasından alınmıştır