Sanal bellek

Bilgisayar biliminde sanal bellek mekanizması 1960'larda geliştirildi . Yazılım tarafından görülen (sanal) adreslerin RAM'deki fiziksel adreslere anında çevrilmesinin kullanımına dayanır . Sanal bellek şunları sağlar:

Tarihi

James Kilburn'un dönüm 1962 makale kullanan bir disk belleği sanal bellek yönetim sistemi ile ilk bilgisayarı açıklar davul bir uzantısı olarak bir ferrit çekirdek belleğinde  : Atlas .

Günümüzde bazı süper bilgisayarlar veya gerçek zamanlı yerleşik sistemler dışında tüm bilgisayarlarda sanal bellek yönetim mekanizması vardır .

Sayfalanmış sanal bellek

Prensip aşağıdaki gibidir:

Sayfa tablosu, sayfa numarasına göre dizine eklenir. Her satır, " sayfa tablosundaki giriş " ( sayfa tablosu girişi , kısaltılmış PTE) olarak adlandırılır ve çerçeve numarasını içerir. Sayfa tablosu hafızada herhangi bir yere yerleştirilebildiğinden, özel bir kayıt ( Sayfa Tablosu Baz Kaydı için PTBR ) adresini saklar.

Pratikte, çeviri mekanizması, hızlı kayıtlardan oluşan bir ilişkilendirilebilir bellekte depolanan sayfa tablosunun bir bölümünü de içeren MMU ( bellek yönetim birimi ) olarak adlandırılan bir elektronik devrenin parçasıdır . Bu, her bellek erişimi için sayfa tablosuna (bellekte) başvurma zorunluluğunu ortadan kaldırır.

İşte işlemcisi sanal 32 bit adresler üreten ve böylece 4 GiB belleğe erişebilen bir makinenin gerçek bir örneği  . Sayfa boyutu  4KiB'dir . Buradan, yer değiştirme alanının en az önemli 12 biti ve sayfa numarası alanının en önemli 20 biti işgal ettiği çıkarılır  .

Her PTE'ye ait özel bir alanın varlığına dikkat edin. Basitleştirmek için, bu alanın genişliğini bir bit'e düşürdük: geçerlilik biti . Bu 0 ise, çerçeve numarasının geçersiz olduğu anlamına gelir. Bu nedenle, PTE'yi geçerli kılmak için güncellemeyi mümkün kılan bir tekniğin edinilmesi gereklidir.

Üç durum meydana gelebilir:

  1. Giriş geçerlidir: fiziksel adresi oluşturmak için sayfa numarasını değiştirir.
  2. Sayfa tablosundaki giriş geçersiz. Bu durumda, RAM'de boş bir çerçeve bulmanız ve numarasını sayfa tablosundaki bu girişe koymanız gerekir.
  3. Sayfa tablosundaki giriş geçerlidir ancak çerçeve içeriğinin bulunduğu yığın hafızasındaki bir adrese karşılık gelir. Bir mekanizmanın bu verileri RAM'e yerleştirmek için geri getirmesi gerekecektir.

Talep üzerine tahsis

Son iki durumda, malzeme tarafından varsayılan sayfa olarak adlandırılan bir kesinti (veya bazen sayfa hatası , İngilizce sayfa hatasından çeviri ) oluşturulur ve eli işletim sistemine verir. Bu, ana bellekte mevcut bir çerçeveyi bu sayfa hatasından sorumlu işleme tahsis etmek için bulmaktan ve muhtemelen bu çerçevenin içeriğini yığın belleğe kaydedilen içerikle (şu anda bir diskteki sabit disk) yeniden yüklemekten sorumludur. takas alanı veya takas adı verilen alan ).

Ana bellekte daha fazla boş çerçeve olmayabilir: bu daha sonra% 100 doludur. Bu durumda, bir "kurban" sayfasını seçmekten bir sayfalama algoritması sorumludur. Bu sayfa ya talep sürecine hemen yeniden atanacak ya da ilk olarak sabit diske kaydedilecek ve buna atıfta bulunan sayfa tablosundaki giriş güncellenecektir. Kurban sayfası, boşluktan yoksun olan sürece ait olabilir.

Aşağıda bazı algoritma örnekleri listelenmiştir. İlk satır , referans zincirine , yani işlemin sayfalara erişme sırasına karşılık gelir . Ana hafızanın üç çerçeveden oluştuğu varsayılmaktadır . Kurban çerçeve olacaktır altı çizili görünür. İlk sayfa hataları sayılmaz (seçilen algoritmadan bağımsız olarak sayı olarak aynıdır).

7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
7 7 7 2 2 2 2 2 7
0 0 0 0 4 0 0 0
1 1 3 3 3 1 1
7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
7 7 7 2 2 2 4 4 4 0 0 0 7 7 7
0 0 0 3 3 3 2 2 2 1 1 1 0 0
1 1 1 0 0 0 3 3 3 2 2 2 1
7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
7 7 7 2 2 4 4 4 0 1 1 1
0 0 0 0 0 0 3 3 3 0 0
1 1 3 3 2 2 2 2 2 7

Bir algoritmayı kullanılamaz hale getiren patolojik vakaları bulmak nispeten kolay olabilir. Örneğin, LRU algoritması için bu, yalnızca 4 karesi olan bir makinede bir döngüde 5 sayfa kullanan bir program olacaktır. Önce ilk 4 kareyi sırayla kullanacak (1, 2, 3, 4) sonra bir sayfa hatası oluşacak ve en eski yüklenen sayfa 1 olacak ve kurban olacak. Şimdi kullanılan sayfalar (5, 2, 3, 4). Program döngüye girdiğinden, 1. sayfaya ihtiyacı var (5. sayfadan devam). Bu kez, kurban sayfası 2. sayfadır, 1: (5, 1, 3, 4), ardından (5, 1, 2, 4), (5, 1, 2, 3) vb. İle değiştirilir. Her yinelemede bir sayfa hatası üretilir ...

Belady anomalisi

Sezgisel olarak, sayfa çerçevelerinin sayısını artırmak (yani, ana belleği artırmak), sayfa hatalarının sayısını azaltmalıdır.

Belady 's anomalisi (1970), bu kesinlikle doğru olmadığını gösterir, bir karşı-bir FIFO algoritması gerçekten okuyucu kendisi için kontrol edebilecektir, bu referanslarda (3, 2, 1, 0, 3, 2 sırası , 4, 3, 2, 1, 0, 4) yol açar

Not  : Bu merakın kapsamı abartılmamalıdır. FIFO algoritması değil o kesinlikle gösterileri genelde var herkesin beklediği bir özellik (ekleyerek bellek sayfası hataları azaltır) ama buna da sahip olmadığını göstermez ortalama . Ve yine de FIFO algoritması asla sayfa değiştirme için kullanılmaz.

Ayrıca, belirli sayfa değiştirme algoritmalarının ( örneğin LRU ) bu tip anormalliğe tabi olmadığı gösterilebilir.

Çok programlı bir sistemde tahsis yöntemi

Yukarıda bahsedilen kurban sayfasını seçme yöntemleri, bir sürece ait sayfalara (daha sonra "yerel tahsis" den bahsediyoruz) veya tüm sayfalara ve dolayısıyla tüm hafızaya uygulanabilir (bu durumda, ayırma tekniği "küresel" olduğu söyleniyor).

Global bir ayırma sisteminde, bir işlemin yürütme süresi örnekten duruma büyük ölçüde değişebilir çünkü sayfa hatalarının sayısı sürecin kendisine bağlı değildir. Öte yandan bu sistem, bir sürece atanan yönetici sayısının gelişmesine izin verir.

Disk belleğine alınmış bir sistemde bellek paylaşımı

Aşağıdaki şema, üç çalışan işlemi gösterir, örneğin Ed adlı bir metin düzenleyici. Üç örnek, aynı sanal adreslerde (1, 2, 3, 4, 5) bulunur. Bu program iki farklı bellek alanı kullanır: kodu içeren sayfalar, yani programı açıklayan talimatlar ve veri alanı, düzenlenen dosya. Üç örneğin kod alanını paylaşması için sayfa tablosunda aynı girişleri tutmak yeterlidir. Öte yandan, veri sayfalarına karşılık gelen girişler farklıdır.

Koruma

Sayfa tablosundaki her girişe bazı bit korumaları eklenir. Böylece çekirdeğe ayrılan, salt okunur vb. Sayfaları kolayca ayırt edebiliriz. Aşağıdaki örneğe bakın.

Verimlilik

Üç büyük sorun var:

  1. Sayfa tablosunun boyutu: sayfa numarası için 20 bitin ayrıldığı bir mimari için, tablo minimum 4 Mio bellek kaplayacaktır  (2 20 = 1 Mio PTE, her PTE 4 bayt uzunluğa sahiptir). Bu sorun, birkaç sayfa tablosu kullanılarak çözülür: sayfa numarası alanı, her biri en düşük seviyeli tabloya geçişi gösteren birkaç bölüme ayrılacaktır. VAX ve Pentium'lardan iki seviye destek SPARC üç, dört ... Motorola 680x0 Ayrıca segment sayfa tablosu.
  2. Erişim süresi: sayfa tablosu bellekte yer aldığından, işlemciden istek başına iki bellek erişimi gerekecektir. Bu sorunun üstesinden gelmek için, en sık kullanılan girdiler, Translation Lookaside Buffer için TLB adı verilen bir ilişkilendirilebilir bellekte ( önbellek ) tutulur . İşlemciden gelen her sanal adres TLB'de aranır; bir eşleşme varsa, TLB girişi kullanılır, aksi takdirde bir kesme tetiklenir ve TLB, sorun teşkil eden talimat yeniden başlatılmadan önce bellekte saklanan sayfa tablosu girişi tarafından güncellenmelidir. Mevcut tüm mikroişlemcilerin bir TLB'si vardır.
  3. Yıkıcı fenomen : çoklu programlama hızı ne kadar artarsa, her işlem o kadar az sayfa tahsis eder. Bir süre sonra, çok fazla sayfa hatası üretildiği için sistem aşırı yüklenir. Çöp atma olgusu, hiyerarşik bir depolama sisteminde, düzeylerden biri aşırı yüklendiğinde ortaya çıkar. Örneğin önbellek çok küçükse bu durum söz konusudur. Bu noktada, verilerin hiyerarşide yukarı ve aşağı aralıksız ileri geri hareketi, bilgisayarın performansını büyük ölçüde azaltacaktır. Donanım kaynakları ekleyerek (bellek ekleyerek), çoklu programlama oranını düşürerek veya işlemlerin önceliğini değiştirerek bu davranışın etkilerini azaltmak mümkündür.

Yerellik ilkesi

Programların davranışı kaotik değildir: program başlar, sırayla başkalarını çağıran işlevleri (veya kod parçalarını) çağırır, vb. Bu çağrıların her biri bir bölgeyi tanımlar. Programın birkaç bölgede çok fazla zaman harcaması muhtemeldir: bu yerellik ilkesidir. Aynı ilke, veri içeren sayfalara da uygulanabilir.

Başka bir deyişle, bir program sık sık küçük bir sayfa kümesine erişir ve bu sayfa kümesi zamanla yavaşça değişir.

Bu sık erişilen alanları hafızada tutabilirsek, bir programın çöpe gitmeye başladığını görme şansını , yani yeni kaldırılmış sayfaları talep etme şansını azaltırız .

Çalışma grubu  : Çalışma alanı

İşlem tarafından belirli bir süre boyunca erişilen sayfalara referans sayısı olan Δ parametresini tanımlayabiliriz. Aşağıdaki şekil, çalışma alanının iki farklı zamandaki değerini göstermektedir:

Δ değeri dikkatle seçilmelidir: çok küçük , sürecin nominal çalışma alanını kapsamaz ; çok büyük, gereksiz sayfalar içeriyor. Δ sonsuza eşitse, elbette tüm programı kapsar.

Tek bir işlem için, belleğin kendisine nasıl tahsis edildiğini grafiksel olarak temsil edebilir ve çalışma alanlarını görselleştirebiliriz:

"Tepsiler", sayfa hatasının olmadığı alanlardır: Ayrılan alan, işlemin nispeten uzun bir süre için ihtiyaç duyduğu tüm çerçeveleri içerecek kadar büyüktür . Sayfa hataları, geçişin artan kısmında meydana gelirken bellek, eğri bir sonraki çalışma alanına geri döndüğünde serbest bırakılır : denge bölgesi.

Algoritmaları uygulamak işletim sistemine bağlıdır, böylece Δ ​​değeri optimumdur, böylece çoklu programlama hızı ve merkezi birimin kullanımı maksimize edilir. Başka bir deyişle: çöp atmaktan kaçının . Her bir sürecin çalışma alanlarının toplamı mevcut çerçeve sayısından büyükse , mutlaka daraltma olacaktır.

Ön sayfalandırma

Sanal belleğin avantajlarından biri, ilk kod sayfası belleğe yüklenir yüklenmez bir programın yürütülmesini başlatabilmesidir. Ön sayfalama yalnızca ilk sayfayı değil, aynı zamanda erişim olasılığı çok yüksek olan sonraki birkaç sayfayı da yükleyecektir.

Bazı bilgisayarlar için sayfa boyutu

Burada bitler, toplam adreslenebilir alan, alanların genişliği, sayfa numarası ve yer değiştirme ile gösterilir.
Makine Adreslenebilir alan Sayfa numarası alanları "Yer değiştirme" alanları
Atlas 11 9
PDP-10 9 9
IBM-370 13 veya 12 11 veya 12
Pentium Pro 12 veya 20 20 veya 12
Alfa 21064 13 30

Misal

Adresler 32 bitte kodlanmıştır  (4  GiB toplam alan) Sayfa boyutu 1  KiB'dir (10 bit kodlu  ). Sayfa tablosundaki girişler şu formattadır: 3 3 2 2 2 2 2 1 0 7 3 2 1 0 0 +---+------+-----+---+---+---+------------------------------------------------+ | V | PROT | | N | M | U | NDP | +---+------+-----+---+---+---+------------------------------------------------+

M, U, N ve NDP alanları yalnızca V biti 1 ise geçerlidir. V 0 olduğunda, NDP alanı sayfanın bulunduğu sabit diskteki adresi içerir.

PROT alanı aşağıdaki şekilde yorumlanmalıdır (alanın değeri 4 bitte ikili olarak verilmiştir):
Değer Koruma
0000 Erişim yok
1000 Çekirdek için okuma
1100 Çekirdek için okuma / yazma
1010 Kullanıcı ve çekirdek okuma
1110 Kullanıcı oku, çekirdek oku / yaz
1111 Kullanıcı ve çekirdek okuma / yazma

Bit 24, N ( N gizli), sayfanın önbelleğe alınmadığı ve sistemin doğrudan bellekten veya bellekten okuması veya yazması gerektiği anlamına gelir.

M ( M sayfanın içeriği değiştirilirse değişmemiş) bit donanım tarafından değiştirilir.

Bit U ( U tilisée) sayfanın bir işlem tarafından okunup okunmadığını gösterir. Bir sürecin Çalışma Kümesini belirlemek için diğerleriyle birlikte yararlıdır (yukarıya bakın).

Segmentasyon

Segmentasyon, kullanıcınınkiyle daha tutarlı bir bellek görünümü sağlar. Aslında, bu, belleği bir dizi sayfa olarak değil, örneğin belirli bir kullanım için tasarlanmış boşluklar veya bölgeler olarak düşünmez (veya nadiren!): Bir programın kodu, veriler, yığın, bir dizi alt yordamlar, modüller, bir dizi vb. Segmentasyon bu organizasyonu yansıtır.

Her mantıksal nesne bir segment tarafından belirlenecektir. Bir segmentte adresleme bir yer değiştirme kullanılarak yapılacaktır. Tork (bölüm, yer değiştirme), sınır ve taban olmak üzere iki alan içeren bir bölüm tablosu aracılığıyla bir bellek adresine çevrilecektir . Taban, segmentin başlangıç ​​adresidir ve aynı segmentin son adresini sınırlar:

Parçalanma sorunu

Sayfalandırılmış sistemlerin dahili bir parçalanma sorunu vardır : Bir sayfanın sonunda alan boşa harcanır. Segmentli sistemlerin harici bir parçalanma sorunu vardır  : Segmentler arasındaki boşluklar, yeni fragmanları barındırmak için çok küçüktür, bu nedenle alan boşa harcanır.

Belleği sıkıştırarak, yani segmentleri hareket ettirerek - bu değişiklikleri segmentlerin tablolarına yansıtırken - bitişik olacak şekilde kurtarmak mümkündür. Ancak bu işlem pahalıdır.

Segmentleri paylaşma

Aşağıdaki şekilde gösterildiği gibi, iki işlem Ed1 ve Ed2'nin aynı kod bölümünü (programı) paylaştığı ancak farklı boyutlarda ayrık veri bölümlerine sahip olduğu süreçler arasında bölümler paylaşmak mümkündür .

Segmentli bir sistemde koruma

Bu koruma, sayfalı bir sistemle aynı şekilde segment tablosuna eklenen ek bitlerle sağlanacaktır.

Bölümlenmiş bellek mimarisine sahip mikroişlemci örnekleri

En iyi bilinen örnek, Intel 8086 ve dört kaydıdır :

8086'nın halefleri de bölümlere ayrılmıştır:

Karışık sayfalandırılmış / bölümlenmiş sistemler

Önceki iki modu karıştırmak mümkündür:

  1. segmentli sayfalama sayfa tablosu segmentlerine ayrılmış olur. Başka bir deyişle, sanal adres çiftinin (p, d) sayfa numarası p , bir segment (s, p ') olarak yorumlanacaktır. Bu sistem, sayfa tablosu boyutu sorununu çözer.
  2. Disk belleği bölütleme her segment numaralandırılır. Başka bir deyişle, sanal adres çiftinin (s, d) yer değiştirme alanı d , bir sayfa numarası ve bir yer değiştirme (p, d ') olarak yorumlanacaktır.

Takas

Bazen bir işlemin tüm sayfalarını veya bölümlerini ana bellekten silmek gerekir . Bu durumda işlemin takas edildiği söylenecek ve ona ait tüm veriler yığın hafızada saklanacaktır. Bu , işletim sisteminin etkin işlemler için bellek ayırması gerektiğinde uzun süre hareketsiz süreçlerde gerçekleşebilir . Sayfalar veya kod bölümleri (program) hiçbir zaman değiştirilmeyecek , ancak oldukça basit bir şekilde yeniden atanacaktır, çünkü bunlar programa karşılık gelen dosyada ( çalıştırılabilir dosya ) bulunabilirler. Bu nedenle, işletim sistemi kullanımda olan yürütülebilir bir dosyaya yazma erişimini yasaklar; Simetrik olarak, başka bir işlem tarafından yazma erişimi için açık tutulan bir dosyanın yürütülmesini başlatmak mümkün değildir.

Sanal bellek sıkıştırması

Sanal bellek sıkıştırması, bir sanal bellek sisteminin performansını artırabilir. Bu sanal bellek yönetimi tekniği , yardımcı depolamaya giden ve gelen sayfalama isteklerinin boyutunu veya sayısını azaltmak için veri sıkıştırmasını kullanır .

Bir sanal bellek sıkıştırma sisteminde sayfalar sıkıştırılır ve fiziksel bellekte (tipik olarak RAM) depolanır veya sabit sürücü veya SSD gibi yardımcı depolamaya sıkıştırılarak gönderilir . Her iki durumda da, içeriği sıkıştırılmış sanal bellek aralığına erişilemez, bu nedenle sıkıştırılmış sayfalara erişme girişimleri sayfa hatalarını tetikler ve sıkıştırma sürecini tersine çevirir (yardımcı depolamayı geri alma ve sıkıştırmayı açma). Disk belleğine alınmış veri ayak izi, sıkıştırma işlemi tarafından azaltılır ve boşaltılan RAM belleği, kullanılabilir fiziksel bellek havuzuna döndürülür. Sıkıştırılmış sayfaların RAM belleğinde tutulması durumunda, sıkıştırılmış sayfalar açık bir şekilde orijinal sayfalara göre daha az yer kullanır. Sıkıştırılmış sayfaların yardımcı depolamada tutulması durumunda, RAM belleği tamamen serbest bırakılır ve yardımcı bellekteki yazma ve okuma işlemleri, sayfaların sıkıştırılmamış olmasına göre daha hızlıdır.

Referanslar

  1. ABD Patenti 5559978

Ayrıca görün

İlgili Makaleler

Kaynakça