Hafıza yönetimi - Memory management

Bellek yönetimi , bilgisayar belleğine uygulanan bir kaynak yönetimi biçimidir . Bellek yönetiminin temel gereksinimi, istekleri üzerine programlara bellek bölümlerini dinamik olarak tahsis etmenin ve artık gerekmediğinde yeniden kullanım için serbest bırakmanın yollarını sağlamaktır. Bu, herhangi bir zamanda birden fazla işlemin yapılabileceği herhangi bir gelişmiş bilgisayar sistemi için kritik öneme sahiptir .

Bellek yönetiminin etkinliğini artıran çeşitli yöntemler geliştirilmiştir. Sanal bellek sistemleri , bir işlem tarafından kullanılan bellek adreslerini gerçek fiziksel adreslerden ayırarak, işlemlerin ayrılmasına ve sanal adres alanının boyutunun, disk belleği veya ikincil depolamaya takas yoluyla mevcut RAM miktarının ötesine yükseltilmesine olanak tanır . Sanal bellek yöneticisinin kalitesi, genel sistem performansı üzerinde kapsamlı bir etkiye sahip olabilir .

Bazı işletim sistemleri , örneğin OS / 360 ve ardılları , hafıza işletim sistemi tarafından yönetilir. Diğer işletim sistemlerinde, örneğin Unix benzeri işletim sistemlerinde, bellek uygulama düzeyinde yönetilir.

Bir adres alanı içindeki bellek yönetimi, genellikle ya manuel bellek yönetimi ya da otomatik bellek yönetimi olarak sınıflandırılır .

Manuel bellek yönetimi

Dış parçalanma örneği

Bir tahsis talebini yerine getirme görevi, yeterli büyüklükte kullanılmayan bir bellek bloğunun yerini tespit etmekten ibarettir. Bellek istekleri, yığın veya boş depo adı verilen büyük bir bellek havuzundan bölümler ayrılarak karşılanır . Herhangi bir zamanda, yığının bazı bölümleri kullanımdayken, bazıları "ücretsizdir" (kullanılmayan) ve bu nedenle gelecekteki tahsisler için kullanılabilir.

Tahsis edilen bellek blokları arasında bir tahsis talebi için kullanımlarını geçersiz kılan çok sayıda küçük boşluk olduğunda ortaya çıkan harici parçalanma gibi çeşitli sorunlar uygulamayı karmaşıklaştırır . Ayırıcının meta verileri (tek tek) küçük ayırmaların boyutunu da şişirebilir. Bu genellikle parçalama ile yönetilir . Bellek yönetim sistemi, çakışmadıklarından ve hiçbir belleğin "kaybolmadığından" (yani " bellek sızıntısı " olmadığından ) emin olmak için bekleyen ayırmaları izlemelidir .

Yeterlik

Uygulanan özel dinamik bellek ayırma algoritması, performansı önemli ölçüde etkileyebilir. 1994'te Digital Equipment Corporation tarafından yürütülen bir araştırma , çeşitli paylaştırıcılar için dahil olan genel giderleri göstermektedir . Tek bir bellek yuvası tahsis etmek için gereken en düşük ortalama talimat yolu uzunluğu 52 idi ( çeşitli yazılımlarda bir talimat seviyesi profil oluşturucu ile ölçüldüğü gibi ).

Uygulamalar

Tahsisin kesin konumu önceden bilinmediğinden, belleğe dolaylı olarak, genellikle bir işaretçi referansı aracılığıyla erişilir . Bellek alanını düzenlemek ve parçaları tahsis etmek ve serbest bırakmak için kullanılan özel algoritma, çekirdek ile bağlantılıdır ve aşağıdaki yöntemlerden herhangi birini kullanabilir:

Sabit boyutlu blok tahsisi

Bellek havuzu ayırma olarak da adlandırılan sabit boyutlu blok ayırma, sabit boyutlu bellek bloklarının (genellikle tümü aynı boyutta) ücretsiz bir listesini kullanır . Bu, büyük nesnelerin tahsis edilmesinin gerekmediği, ancak özellikle uzun bellek adreslerinde parçalanmadan muzdarip olduğu basit gömülü sistemler için iyi çalışır . Bununla birlikte, önemli ölçüde azaltılmış ek yük nedeniyle, bu yöntem, sık tahsis / ayırma gerektiren nesneler için performansı önemli ölçüde artırabilir ve genellikle video oyunlarında kullanılır .

Arkadaş blokları

Bu sistemde, bellek, yalnızca bir tane yerine birkaç bellek havuzuna tahsis edilir; burada her havuz , iki boyutta belirli bir güçteki bellek bloklarını veya başka bir uygun boyutta ilerleme bloklarını temsil eder . Belirli bir boyuttaki tüm bloklar, sıralanmış bir bağlantılı liste veya ağaçta tutulur ve tahsis sırasında oluşan tüm yeni bloklar, daha sonra kullanılmak üzere ilgili bellek havuzlarına eklenir. Mevcut olandan daha küçük bir boyut istenirse, mevcut en küçük boyut seçilir ve bölünür. Ortaya çıkan parçalardan biri seçilir ve istek tamamlanana kadar süreç tekrarlanır. Bir blok tahsis edildiğinde, tahsisatçı, blokları gereksiz yere kırmamak için yeterince büyük olan en küçük blokla başlayacaktır. Bir blok serbest bırakıldığında, arkadaşıyla karşılaştırılır. Her ikisi de ücretsizse, birleştirilir ve buna uygun olarak daha büyük boyutlu arkadaş blok listesine yerleştirilir.

döşeme tahsisi

Bu bellek ayırma mekanizması, belirli bir tür veya boyuttaki nesnelere uymaya uygun bellek parçalarını önceden tahsis eder. Bu parçalara önbellek adı verilir ve ayırıcının yalnızca boş önbellek yuvalarının bir listesini tutması gerekir. Bir nesne oluşturmak, boş önbellek yuvalarından herhangi birini kullanacak ve bir nesneyi yok etmek, boş önbellek yuvası listesine bir yuva ekleyecektir. Bu teknik, bellek parçalanmasını hafifletir ve herhangi bir açık yuva yeterli olacağından, belleğin uygun bir bölümünü aramaya gerek olmadığından verimlidir.

Yığın tahsisi

Birçok Unix benzeri sistemlerinin yanı sıra Microsoft Windows adlı bir işlevi uygulamak allocadinamik yığın tabanlı benzer bir şekilde yığın bellek ayırma için malloc. Bir derleyici tipik olarak bunu yığın işaretçisini manipüle eden satır içi talimatlara çevirir. Bu şekilde ayrılan hafızanın manuel olarak boşaltılmasına gerek olmamasına rağmen, çağrılan fonksiyon allocadöndüğünde otomatik olarak boşaldığı için taşma riski vardır. Ve alloca, birçok sistemde görülen ama asla POSIX veya C standardında olmayan geçici bir genişleme olduğundan, yığın taşması durumunda davranışı tanımsızdır.

_mallocaMicrosoft Windows'ta alloca adlı ve hataları bildiren daha güvenli bir sürümü bulunmaktadır. Kullanılmasını gerektirir _freea. gnulib , taşma üzerine bir SEH istisnası atmak yerine, aşırı büyük bir boyut algılandığında malloc'a delege etse de eşdeğer bir arayüz sağlar. Benzer bir özellik, glibc'nin kullanımlarında olduğu gibi, manuel hesaplama ve boyut denetimi kullanılarak öykünebilir alloca_account.

Otomatik bellek yönetimi

Birçok programlama dili uygulamasında, programın çalışma zamanı ortamı , bir altyordamın statik olmayan yerel değişkenleri için, altyordam çağrıldığında otomatik olarak çağrı yığınında bellek ayırır ve altyordam çağrıldığında bu belleği otomatik olarak serbest bırakır. Özel bildirimler, yerel değişkenlerin prosedürün çağrıları arasında değerleri tutmasına izin verebilir veya yerel değişkenlere diğer alt rutinler tarafından erişilmesine izin verebilir. Yerel değişkenlerin otomatik tahsisi, mevcut bellekle sınırlı bir derinliğe kadar özyinelemeyi mümkün kılar .

Çöp toplama

Çöp toplama, bir programda artık kullanılamayan nesnelere ayrılan belleği otomatik olarak algılamak ve bu ayrılan belleği boş bellek konumları havuzuna döndürmek için bir stratejidir. Bu yöntem, bir programcının programdaki bellek isteklerini ve bellek sürümlerini açıkça kodladığı "manuel" bellek yönetiminin aksinedir. Otomatik çöp toplama, programcının iş yükünü azaltma ve belirli türdeki bellek ayırma hatalarını önleme gibi avantajlara sahip olsa da, çöp toplama, kendi bellek kaynaklarını gerektirir ve işlemci süresi için uygulama programıyla rekabet edebilir.

Sanal belleğe sahip sistemler

Sanal bellek , bellek organizasyonunu fiziksel donanımdan ayırma yöntemidir. Uygulamalar sanal adresler aracılığıyla bellekte çalışır . Uygulamanın belirli bir sanal bellek adresine erişmeye yönelik her girişimi, sanal bellek adresinin gerçek bir fiziksel adrese çevrilmesiyle sonuçlanır . Bu şekilde sanal belleğin eklenmesi, bellek sistemleri ve erişim yöntemleri üzerinde ayrıntılı kontrol sağlar.

Sanal bellek sistemlerinde işletim sistemi, bir işlemin belleğe nasıl erişebileceğini sınırlar . Bellek koruması adı verilen bu özellik, bir işlemin kendisine tahsis edilmemiş belleğe okuma veya yazma işlemine izin vermemek için kullanılabilir ve bir programdaki kötü amaçlı veya hatalı çalışan kodun diğerinin çalışmasına müdahale etmesini önler.

Belirli işlemler için ayrılan bellek normalde yalıtılmış olsa da, işlemlerin bazen bilgi paylaşabilmesi gerekir. Paylaşılan bellek , süreçler arası iletişim için en hızlı tekniklerden biridir .

Bellek genellikle erişim hızına göre birincil depolama ve ikincil depolama olarak sınıflandırılır . Bellek yönetim sistemleri, diğer işlemlerin yanı sıra, bu iki bellek düzeyi arasında bilgi hareketini de gerçekleştirir.

OS/360 ve ardıllarında bellek yönetimi

IBM System/360 , sanal belleği desteklemez. Bellek izolasyon işleri isteğe kullanılarak gerçekleştirilir koruma anahtarları her iş için amir veya 1-15 için farklı bir anahtar, 0 depolama atama. OS/360'ta bellek yönetimi bir denetleyici işlevidir. GETMAINMakro kullanılarak depolama istenir ve makro kullanılarak serbest bırakılır FREEMAIN, bu da işlemi gerçekleştirmek için süpervizöre ( SVC ) çağrı yapılmasına neden olur .

OS/360'ta ayrıntılar sistemin nasıl oluşturulduğuna bağlı olarak değişir , örneğin PCP , MFT , MVT için .

OS/360 MVT'de, bir işin bölgesi veya paylaşılan Sistem Kuyruk Alanı (SQA) içindeki alt ayırma , 2 KB'nin katları olan alt havuzlara (bir koruma anahtarı tarafından korunan bir alanın boyutu ) dayanır . Alt havuzlar 0-255 arasında numaralandırılmıştır. Bir bölge içindeki alt havuzlara, işin depolama koruması veya gözetmenin anahtarı olan 0 anahtarı atanır. 0-127 arası alt havuzlar, işin anahtarını alır. Başlangıçta yalnızca sıfır alt havuzu oluşturulur ve bellek isteğinde başka bir şey belirtilmedikçe, tüm kullanıcı depolama istekleri alt havuz 0'dan karşılanır. 250–255 arası alt havuzlar, süpervizör tarafından iş adına yapılan bellek istekleriyle oluşturulur. Bunların çoğuna 0 anahtarı atanır, ancak birkaçı işin anahtarını alır. Ayrıntılar çok daha basit olmasına rağmen, alt havuz numaraları MFT ile de ilgilidir. MFT , dinamik bölgeler yerine operatör tarafından yeniden tanımlanabilen sabit bölümleri kullanır ve PCP'nin yalnızca tek bir bölümü vardır.

Her alt havuz, alt havuz içindeki tahsis edilmiş ve boş bellek bloklarını tanımlayan bir kontrol blokları listesi ile eşlenir. Bellek, yeterli büyüklükte boş bir alan bularak veya alt havuzda işin bölge boyutuna kadar ek bloklar tahsis ederek tahsis edilir. Ayrılmış bir bellek alanının tamamını veya bir kısmını boşaltmak mümkündür.

OS/VS1 için ayrıntılar, MFT ve MVT için olanlara benzer; OS/VS2 için ayrıntılar , sayfa boyutunun 4 KiB olması dışında MVT için olanlara benzer. Hem OS/VS1 hem de OS/VS2 için paylaşılan Sistem Kuyruk Alanı (SQA) sayfalanamaz.

In MVS adres alanı ek bir sayfalanabilir paylaşılan alanı bulunmaktadır, Ortak Depolama Alanı (CSA) ve ek bir özel alanı, Sistem Çalışma alanı (SWA). Ayrıca, 0-7 saklama anahtarlarının tümü ayrıcalıklı kodla kullanım için ayrılmıştır.

Ayrıca bakınız

Notlar

Referanslar

OS360Sup
OS Sürüm 21 IBM System/360 Operating System Supervisor Services ve Macro Instructions (PDF) . Sistem Referans Kitaplığı (Sekizinci baskı). IBM. Eylül 1974. GC28-6646-7.
OSVS1Dig
OS/VS1 Programcı Referans Özeti Sürüm 6 (PDF) . Sistemler (Altıncı baskı). IBM. Kasım 1975. GC24-5091-5.

daha fazla okuma

Dış bağlantılar