Sanal bellek - Virtual memory

Sanal bellek, çok çeşitli bitişik adresler oluşturmak için etkin RAM ve etkin olmayan belleği DASD'de birleştirir .

Bilgi işlemde , sanal bellek veya sanal depolama , "belirli bir makinede gerçekten mevcut olan depolama kaynaklarının idealleştirilmiş bir soyutlamasını" sağlayan ve "kullanıcılara çok büyük (ana) bir belleğin yanılsamasını yaratan" bir bellek yönetimi tekniğidir.

Bilgisayarın işletim sistemi , donanım ve yazılım bir arada kullanarak, haritalar bellek adreslerini denilen bir program tarafından kullanılan sanal adresler içine, fiziksel adresleri de bilgisayar belleği . Bir işlem veya görev tarafından görüldüğü gibi ana depolama , bitişik bir adres alanı veya bitişik segmentler topluluğu olarak görünür . İşletim sistemi, sanal adres alanlarını ve gerçek belleğin sanal belleğe atanmasını yönetir . Genellikle bellek yönetim birimi (MMU) olarak adlandırılan CPU'daki adres çeviri donanımı, sanal adresleri otomatik olarak fiziksel adreslere çevirir. İşletim sistemi içindeki yazılım , gerçek belleğin kapasitesini aşabilecek ve böylece bilgisayarda fiziksel olarak mevcut olandan daha fazla belleğe referans verebilecek bir sanal adres alanı sağlamak için , örneğin disk depolama kullanarak bu yetenekleri genişletebilir .

Sanal belleğin başlıca faydaları, uygulamaları paylaşılan bir bellek alanını yönetme zorunluluğundan kurtarma, kütüphaneler tarafından kullanılan belleği işlemler arasında paylaşma yeteneği , bellek yalıtımı nedeniyle artan güvenlik ve kavramsal olarak fiziksel olarak mevcut olabilecekten daha fazla bellek kullanabilmeyi içerir. sayfalama veya segmentasyon tekniği .

Özellikler

Sanal bellek , fiziksel belleğin parçalanmasını gizleyerek uygulama programlamasını kolaylaştırır ; bellek hiyerarşisini yönetme yükünü çekirdeğe devrederek (programın bindirmeleri açıkça işleme ihtiyacını ortadan kaldırarak ); ve her işlem kendi tahsis edilmiş adres alanında çalıştırıldığında, program kodunun yerini değiştirme veya göreceli adresleme ile belleğe erişme ihtiyacını ortadan kaldırarak .

Bellek sanallaştırma , sanal bellek kavramının bir genellemesi olarak düşünülebilir.

kullanım

Sanal bellek, modern bilgisayar mimarisinin ayrılmaz bir parçasıdır ; uygulamalar genellikle, tipik olarak CPU'da yerleşik bir bellek yönetim birimi biçiminde donanım desteği gerektirir . Gerekli olmasa da öykünücüler ve sanal makineler , sanal bellek uygulamalarının performansını artırmak için donanım desteği kullanabilir. 1960'ların anabilgisayarları ve 1980'lerin başlarından ortalarına kadar olan kişisel bilgisayarlar için olanlar (örneğin, DOS ) gibi daha eski işletim sistemleri, 1960'ların anabilgisayarları için dikkate değer istisnalar olsa da, genellikle sanal bellek işlevine sahip değildir:

1960'larda ve 70'lerin başında, bilgisayar belleği çok pahalıydı. Sanal belleğin tanıtılması, büyük bellek talepleri olan yazılım sistemlerinin daha az gerçek belleğe sahip bilgisayarlarda çalışması için bir yetenek sağladı. Bundan elde edilen tasarruflar, tüm sistemler için sanal belleğe geçmek için güçlü bir teşvik sağladı. Ek sanal adres alanları sağlama yeteneği, başka bir güvenlik ve güvenilirlik düzeyi ekledi ve böylece sanal belleği pazar için daha da çekici hale getirdi.

Sanal belleği destekleyen çoğu modern işletim sistemi, her işlemi kendi ayrılmış adres alanında da çalıştırır . Böylece her programın sanal belleğe tek erişimi varmış gibi görünür. Ancak, bazı eski işletim sistemleri ( OS/VS1 ve OS/VS2 SVS gibi ) ve hatta modern olanlar ( IBM i gibi ), tüm işlemleri sanallaştırılmış bellekten oluşan tek bir adres alanında çalıştıran tek adres alanlı işletim sistemleridir .

Çok hızlı ve/veya çok tutarlı yanıt süreleri gerektiren gömülü sistemler ve diğer özel amaçlı bilgisayar sistemleri, azaltılmış determinizm nedeniyle sanal bellek kullanmamayı tercih edebilir ; sanal bellek sistemleri , özellikle tuzak verilerin ikincil bellekten ana belleğe okunmasını gerektiriyorsa, girişe yanıt olarak istenmeyen ve öngörülemeyen gecikmeler üretebilecek öngörülemeyen tuzakları tetikler . Sanal adresleri fiziksel adreslere çevirecek donanım tipik olarak uygulanması için önemli bir yonga alanı gerektirir ve gömülü sistemlerde kullanılan tüm yongalar bu donanımı içermez, bu da bu sistemlerin bazılarının sanal bellek kullanmamasının bir başka nedenidir.

Tarih

1940'larda ve 1950'lerde, tüm büyük programların, bindirme gibi birincil ve ikincil depolamayı yönetmek için mantık içermesi gerekiyordu . Bu nedenle sanal bellek, yalnızca birincil belleği genişletmek için değil, aynı zamanda bu tür bir genişletmeyi programcıların kullanması için mümkün olduğunca kolay hale getirmek için tanıtıldı. Çoklu programlamaya ve çoklu göreve izin vermek için , birçok erken sistem, belleği, PDP-10'un ilk modelleri gibi, yazmaçlar aracılığıyla sanal bellek olmadan birden çok program arasında böldü .

Sanal bellek kavramının ilk kez Alman fizikçi Fritz-Rudolf Güntsch tarafından Berlin Technische Universität'te 1956 yılında, Çoklu Asenkron Dönen Tamburlu ve Otomatik Yüksek Hızlı Bellek İşlemli Dijital Bilgisayarın Mantıksal Tasarımı adlı doktora tezinde geliştirildiği iddiası geçerli değildir. dikkatli incelemeye kadar. (Ama asla inşa) Guntsch önerdiği bilgisayar 10, bir adres alanı vardı 5 ila 10 tam olarak eşlenen kelimelerin 5 davul deyişle, yani adresleri gerçek adresleri ve dolaylı haritalama yok şeklinde, temel bir özelliğidir oldu sanal bellek. Güntsch'ün icat ettiği şey, bir önbellek biçimiydi , çünkü onun yüksek hızlı belleği, davullardan alınan bazı kod bloklarının veya verilerin bir kopyasını içermeyi amaçlamıştı. Gerçekten de (çeviride alıntılandığı gibi) şöyle yazmıştır: "Programcının birincil belleğin varlığına saygı duymasına gerek yoktur (var olduğunu bilmesine bile gerek yoktur), çünkü kişinin programlayabileceği yalnızca bir tür adres ( sic ) vardır. sanki tek bir depo varmış gibi.” İlk ticari örneklerinden biri IBM System/360 Model 85 olan önbelleğe sahip bilgisayarlarda durum tam olarak budur. Model 85'te tüm adresler ana çekirdek depoya atıfta bulunan gerçek adreslerdi. Kullanıcı tarafından görülemeyen bir yarı iletken önbellek deposu, o anda yürütülen program tarafından kullanılan ana deponun bölümlerinin içeriğini tuttu. Bu, Güntsch'in çoklu programlamayla ilgili sorunları çözmekten ziyade performansı artırmak için tasarlanmış sistemine tamamen benzer.

İlk gerçek sanal bellek sistemi, Atlas Computer'ın bir parçası olarak tek seviyeli bir depolama sistemi oluşturmak için Manchester Üniversitesi'nde uygulanandı . Programcının kullanabileceği sanal adresleri, 16.384 sözcük birincil çekirdek bellekten ve ek 98.304 sözcük ikincil tambur belleğinden oluşan gerçek bellekle eşleştirmek için bir çağrı mekanizması kullandı . İlk Atlas 1962'de hizmete girdi, ancak sayfalamanın çalışan prototipleri 1959'da geliştirildi. 1961'de Burroughs Corporation , disk belleği yerine segmentasyonlu sanal belleğe sahip ilk ticari bilgisayar olan B5000'i bağımsız olarak piyasaya sürdü .

Sanal belleğin ana akım işletim sistemlerinde uygulanabilmesi için birçok sorunun ele alınması gerekiyordu. Dinamik adres çevirisi, pahalı ve oluşturulması zor özel donanım gerektiriyordu; ilk uygulamalar belleğe erişimi biraz yavaşlattı. İkincil depolamayı kullanan sistem çapında yeni algoritmaların, daha önce kullanılan uygulamaya özel algoritmalardan daha az etkili olacağına dair endişeler vardı. 1969'a gelindiğinde, ticari bilgisayarlar için sanal bellek üzerindeki tartışmalar sona ermişti; David Sayre liderliğindeki bir IBM araştırma ekibi , sanal bellek bindirme sistemlerinin sürekli olarak en iyi manuel olarak kontrol edilen sistemlerden daha iyi çalıştığını gösterdi. 1970'ler boyunca, kendi sanal depolama tabanlı işletim sistemlerini çalıştıran IBM 370 serisi, iş kullanıcılarının birden çok eski sistemi daha az, daha güçlü, iyileştirilmiş fiyat/performans sağlayan ana bilgisayarlara geçirmeleri için bir araç sağladı. Sanal belleği tanıtan ilk mini bilgisayar Norveçli NORD-1'di ; 1970'lerde, diğer mini bilgisayarlar, özellikle VMS çalıştıran VAX modelleri olmak üzere sanal bellek uyguladılar .

Sanal bellek tanıtıldı x86 mimariye korumalı mod arasında Intel 80286 işlemci, ancak kademeli takas tekniği daha büyük segmenti boyutlarına kötü ölçekli. Intel 80386 mevcut altına çağrı desteği tanıttı segmentasyon olmadan başka istisnalar dışında zincire sayfa hatası istisna sağlayan tabakasının çift hatayla . Bununla birlikte, segment tanımlayıcılarını yüklemek pahalı bir işlemdi ve işletim sistemi tasarımcılarının bir sayfalama ve segmentasyon kombinasyonu yerine kesinlikle sayfalamaya güvenmelerine neden oldu.

Sayfalanmış sanal bellek

Neredeyse sanal belleğin tüm güncel uygulamaları bir bölmek sanal adres alanı içine sayfalarda , bitişik sanal bellek adres bloğu. Çağdaş sistemlerdeki sayfalar genellikle en az 4 kilobayt boyutundadır; büyük sanal adres aralıkları veya gerçek bellek miktarları olan sistemler genellikle daha büyük sayfa boyutları kullanır.

Sayfa tabloları

Sayfa tabloları , uygulama tarafından görülen sanal adresleri , donanım tarafından talimatları işlemek için kullanılan fiziksel adreslere çevirmek için kullanılır; bu özel çeviriyi işleyen bu tür donanımlar genellikle bellek yönetim birimi olarak bilinir . Sayfa tablosundaki her giriş, karşılık gelen sayfanın gerçek bellekte olup olmadığını gösteren bir bayrak taşır. Gerçek bellekteyse, sayfa tablosu girişi, sayfanın depolandığı gerçek bellek adresini içerecektir. Donanım tarafından bir sayfaya başvuru yapıldığında, sayfanın sayfa tablosu girişi o anda gerçek bellekte olmadığını gösteriyorsa, donanım , işletim sisteminin sayfalama süpervizörü bileşenini çağırarak bir sayfa hatası istisnası oluşturur .

Sistemler, tüm sistem için bir sayfa tablosuna, her uygulama ve bölüm için ayrı sayfa tablolarına, büyük bölümler için bir sayfa tabloları ağacına veya bunların bazı kombinasyonlarına sahip olabilir. Yalnızca bir sayfa tablosu varsa, aynı anda çalışan farklı uygulamalar tek bir sanal adres aralığının farklı bölümlerini kullanır. Birden fazla sayfa veya segment tablosu varsa, birden çok sanal adres alanı vardır ve ayrı sayfa tablolarına sahip eşzamanlı uygulamalar farklı gerçek adreslere yönlendirme yapar.

Gibi daha küçük gerçek bellek boyutları ile Bazı eski sistemler SDS 940 kullanılır, sayfa kayıtlarını adres çevirisi için bellekte yerine sayfa tabloları.

Çağrı süpervizörü

İşletim sisteminin bu bölümü sayfa tablolarını oluşturur ve yönetir. Donanım bir sayfa hatası istisnası oluşturursa, sayfalama süpervizörü ikincil depolamaya erişir, sayfa hatasıyla sonuçlanan sanal adrese sahip sayfayı döndürür, sayfa tablolarını sanal adresin fiziksel konumunu yansıtacak şekilde günceller ve çeviri mekanizmasına şunu söyler: isteği yeniden başlatın.

Tüm fiziksel bellek zaten kullanımdayken, sayfalama süpervizörü, değiştirilen sayfayı tutmak için birincil depolamada bir sayfa boşaltmalıdır. Süpervizör, hangi sayfanın serbest bırakılacağını belirlemek için en son kullanılanlar gibi çeşitli sayfa değiştirme algoritmalarından birini kullanır .

Sabitlenmiş sayfalar

İşletim sistemlerinde sabitlenmiş (hiçbir zaman ikincil depolamaya değiştirilmeyen) bellek alanları vardır . Kullanılan diğer terimler, kilitli , sabit veya kablolu sayfalardır. Örneğin, kesme mekanizmaları, G/Ç tamamlama ve sayfa hatası gibi işleyicilerine yönelik bir dizi işaretçiye dayanır . Bu işaretçileri içeren sayfalar veya çağrıldıkları kod sayfalanabilir olsaydı, özellikle sayfa hatası kesintileri söz konusu olduğunda, kesme işleme çok daha karmaşık ve zaman alıcı hale gelirdi. Bu nedenle, sayfa tablosu yapılarının bir kısmı sayfalandırılabilir değildir.

Bazı sayfalar kısa süreliğine sabitlenebilir, diğerleri uzun süre sabitlenebilir ve yine de diğerlerinin kalıcı olarak sabitlenmesi gerekebilir. Örneğin:

  • Sayfaların bulunduğu ikincil depolama aygıtları için sayfalama gözetmen kodu ve sürücüleri kalıcı olarak sabitlenmelidir, aksi takdirde gerekli kod mevcut olmayacağından sayfalama çalışmaz bile.
  • Değişken sayfalama gecikmelerini önlemek için zamanlamaya bağlı bileşenler sabitlenebilir.
  • Doğrudan bellek erişimi veya G/Ç kanalları kullanan çevresel aygıtlar tarafından doğrudan erişilen veri arabellekleri , G/Ç işlemi devam ederken sabitlenmiş sayfalarda bulunmalıdır, çünkü bu tür aygıtlar ve bağlı oldukları veriyolları , konumlanmış veri arabelleklerini bulmayı bekler. fiziksel bellek adreslerinde; veriyolunun G/Ç için bir bellek yönetim birimine sahip olup olmadığına bakılmaksızın, bir sayfa hatası oluşursa aktarımlar durdurulamaz ve ardından sayfa hatası işlendiğinde yeniden başlatılamaz.

IBM'in System/370 ve sonraki sistemlere yönelik işletim sistemlerinde , terim "sabit"tir ve bu tür sayfalar uzun vadeli sabit olabilir veya kısa vadeli sabit olabilir veya sabitlenmemiş (yani sayfalanabilir) olabilir. Sistem kontrol yapıları genellikle uzun vadeli sabittir (duvar saati süresiyle ölçülür, yani bir saniyenin kesirleriyle ölçülen zamandan ziyade saniye cinsinden ölçülür), oysa G/Ç tamponları genellikle kısa vadeli sabittir (genellikle önemli ölçüde ölçülür duvar saatinden daha az, muhtemelen onlarca milisaniye). Aslında, işletim sisteminin bu kısa vadeli sabit veri arabelleklerini "hızlı sabitleme" için özel bir olanağı vardır (sabitleme, zaman alan bir Süpervizör Çağrısı talimatına başvurmadan gerçekleştirilir ).

Multics "kablolu" terimini kullandı. OpenVMS ve Windows , geçici olarak sayfalanamayan sayfalara (G/Ç arabelleklerinde olduğu gibi) "kilitli" ve hiçbir zaman sayfalandırılamayanlar için basitçe "sayfalandırılamaz" olarak atıfta bulunur. Tek UNIX Şartname ayrıca terimi için şartnamede "kilitli" kullanır yapın man sayfalarını birçok üzerinde Unix benzeri sistemler. mlock()mlock()

Sanal-gerçek operasyon

In OS / VS1 ve benzeri işletim sistemleri, sistem belleğinin bazı bölümleri "V = R" olarak adlandırılan "sanal-gerçek" modunda yönetilir. Bu modda her sanal adres aynı gerçek adrese karşılık gelir. Bu mod, kesme mekanizmaları, eski sistemlerdeki sayfalama süpervizörü ve sayfa tabloları ve standart olmayan G/Ç yönetimi kullanan uygulama programları için kullanılır. Örneğin, IBM'in z/OS ürününün 3 modu vardır (sanal-sanal, sanal-gerçek ve sanal-sabit).

hırpalama

Ne zaman sayfalama ve sayfa çalmak kullanılır "adlı bir sorun dayak bilgisayar zaman ve bir destek deposundan sayfaları aktarma, uygun olmayan büyük miktarda harcıyor hangi oluşabilir", dolayısıyla yararlı işler yavaşlıyor. Bir görevin çalışma kümesi , yararlı ilerleme kaydedebilmesi için bellekte olması gereken minimum sayfa kümesidir. Thrashing, tüm aktif programların çalışma setlerini depolamak için yeterli bellek olmadığında meydana gelir. Gerçek bellek eklemek en basit yanıttır, ancak uygulama tasarımının, zamanlamanın ve bellek kullanımının iyileştirilmesi yardımcı olabilir. Diğer bir çözüm ise sistemdeki aktif görev sayısını azaltmaktır. Bu, bir veya daha fazla işlemin tüm çalışma setini değiştirerek gerçek belleğe olan talebi azaltır.

Bölümlere ayrılmış sanal bellek

Burroughs B5500 gibi bazı sistemler, sanal adres alanlarını değişken uzunluklu segmentlere bölerek sayfalama yerine segmentasyon kullanır. Buradaki sanal adres, bir segment numarasından ve segment içindeki bir ofsetten oluşur. Intel 80286 opsiyonel olarak benzer bir segmentasyon şeması destekler, ancak nadiren kullanılır. Segmentasyon ve sayfalama, her segmenti sayfalara bölerek birlikte kullanılabilir; Multics ve IBM System/38 gibi bu bellek yapısına sahip sistemler genellikle sayfalama ağırlıklıdır ve bellek koruması sağlayan bölümlemedir.

Olarak Intel 80386 ve daha sonra IA-32 işlemci, belirtilen bölümler, bir ikamet 32 bit , doğrusal belleğine adres alanı. Segmentler bu alanın içine ve dışına taşınabilir; oradaki sayfalar, iki sanal bellek düzeyi sağlayarak ana belleğe girip çıkabilir; Herhangi bir işletim sistemi bunu yapıyorsa, yalnızca sayfalama kullanmak yerine çok az. Erken donanım destekli olmayan x86 sanallaştırma çözümleri, disk belleği ve segmentasyonu birleştirdi çünkü x86 disk belleği yalnızca iki koruma alanı sunarken bir VMM, konuk işletim sistemi veya konuk uygulama yığını üçe ihtiyaç duyar. Sayfalama ve bölümleme sistemleri arasındaki fark, yalnızca bellek bölümüyle ilgili değildir; segmentasyon, bellek modeli semantiğinin bir parçası olarak kullanıcı işlemleri tarafından görülebilir. Bu nedenle, tek bir büyük alan gibi görünen bellek yerine, çoklu boşluklar halinde yapılandırılmıştır.

Bu farkın önemli sonuçları vardır; segment, değişken uzunlukta bir sayfa veya adres alanını uzatmanın basit bir yolu değildir. İşlem belleği ve dosya sistemi arasında hiçbir ayrım olmayan tek düzeyli bir bellek modeli sağlayabilen bölümleme, yalnızca işlemin potansiyel adres alanıyla eşlenen bölümler (dosyalar) listesinden oluşur.

Bu gibi aramaların sağladığı mekanizmalar aynı değildir mmap'in ve Win32 arası dosya işaretçileri yarı keyfi yerlere ne zaman eşleme dosyaları çalışmaz, çünkü 'ın MapViewOfFile. Multics'te, bir dosya (veya çok-segmentli bir dosyadan bir segment) adres alanındaki bir segmente eşlenir, bu nedenle dosyalar her zaman bir segment sınırında eşlenir. Bir dosyanın bağlantı bölümü, işaretçiyi bir kayıt defterine yükleme veya bunun üzerinden dolaylı bir başvuru yapma girişiminin bir tuzağa neden olduğu işaretçiler içerebilir. Çözümlenmemiş işaretçi, işaretçinin başvurduğu segmentin adının bir göstergesini ve segment içinde bir ofset içerir; tuzak işleyicisi segmenti adres alanına eşler, segment numarasını işaretçiye koyar, işaretçideki etiket alanını artık bir tuzağa neden olmayacak şekilde değiştirir ve tuzağın oluştuğu koda dönerek yeniden yürütülür tuzağa neden olan talimat. Bu, bir bağlayıcıya olan ihtiyacı tamamen ortadan kaldırır ve farklı işlemler aynı dosyayı kendi özel adres alanlarında farklı yerlere eşlediğinde çalışır.

Adres alanı değiş tokuşu

Bazı işletim sistemleri , sayfalama ve segmentasyon için sahip oldukları olanaklara ek olarak, tüm adres alanlarının değiştirilmesini sağlar . Bu gerçekleştiğinde, işletim sistemi, dosyaları takas etmek için şu anda gerçek belleğe bu sayfaları ve bölümleri yazar. Takas işleminde, işletim sistemi takas dosyalarından verileri geri okur, ancak takas işlemi sırasında disk belleği çıkarılmış olan sayfaları otomatik olarak okumaz.

IBM'in MVS gelen, OS / VS2 Yayın 2 aracılığıyla z / OS , unswappable gibi bir adres alanı işaretleme içerir; bunu yapmak, adres alanına hiçbir sayfayı sabitlemez. Bu, Program Özellikleri Tablosuna değiştirilemez bir bayrakla uygun bir ana programın adını girerek bir işin süresi boyunca yapılabilir. Ayrıca, ayrıcalıklı kod, bir SYSEVENT Supervisor Call talimatı (SVC) kullanarak bir adres alanını geçici olarak değiştirilemez hale getirebilir ; adres alanı özelliklerindeki belirli değişiklikler, işletim sisteminin onu değiştirmesini ve ardından SYSEVENT TRANSWAP kullanarak tekrar değiştirmesini gerektirir.

Örneğin, aynı depolama alanı içinde ve dışında birden çok iş değiştiriliyorsa, takas işlemi mutlaka bellek yönetimi donanımı gerektirmez.

Ayrıca bakınız

Notlar

Referanslar

daha fazla okuma

  • Hennessy, John L.; ve Patterson, David A.; Bilgisayar Mimarisi, Sayısal Bir Yaklaşım ( ISBN  1-55860-724-2 )

Dış bağlantılar