Bellek segmentasyonu - Memory segmentation

Bellek bölümleme bir bir işletim sistemi , bellek yönetim bir bölünmesi teknik bilgisayar s' birincil bellek içine segmentleri veya bölümleri . Bölümleme kullanan bir bilgisayar sisteminde , bir bellek konumuna yapılan bir başvuru, bir bölümü ve bu bölüm içindeki bir ofseti (bellek konumu) tanımlayan bir değeri içerir . Segmentler veya bölümler, bir program görüntüsüne birbirine bağlandıklarında ve görüntü belleğe yüklendiğinde , derlenmiş programların nesne dosyalarında da kullanılır .

Segmentler genellikle bireysel rutinler veya veri tabloları gibi bir programın doğal bölümlerine karşılık gelir, bu nedenle segmentasyon genellikle programcı için tek başına sayfalamaya göre daha görünür olur . Farklı program modülleri veya kod ve veri segmentleri gibi farklı bellek kullanım sınıfları için farklı segmentler oluşturulabilir . Bazı bölümler programlar arasında paylaşılabilir.

Segmentasyon, başlangıçta, sistem yazılımının farklı yazılım işlemlerini ( görevlerini ) ve kullandıkları verileri izole edebileceği bir yöntem olarak icat edildi . Aynı anda birden fazla işlemi çalıştıran sistemlerin güvenilirliğini artırmak amaçlanmıştır. Bir x86-64 mimarisinde eski olarak kabul edilir ve çoğu x86-64 tabanlı modern sistem yazılımı bellek segmentasyonu kullanmaz. Bunun yerine, programları ve verilerini, aynı zamanda bir bellek koruma yolu olarak da hizmet eden bellek sayfalamayı kullanarak işlerler . Ancak çoğu x86-64 uygulaması, geriye dönük uyumluluk nedenleriyle hala onu desteklemektedir.

Donanım uygulaması

Segmentasyon kullanan bir sistemde, bilgisayar bellek adresleri bir segment kimliği ve segment içindeki bir ofsetten oluşur. Bir donanım bellek yönetim birimi (MMU), bölümü ve ofseti fiziksel bir adrese çevirmekten ve çevirinin yapılabildiğinden ve bu bölüme ve ofset referansına izin verildiğinden emin olmak için kontroller yapmaktan sorumludur .

Her segmentin kendisiyle ilişkilendirilmiş bir uzunluğu ve izinleri (örneğin, read , write , execute ) vardır. Bir işlemin bir segmente referans yapmasına yalnızca izinler tarafından referans türüne izin veriliyorsa ve segment içindeki ofset, segmentin uzunluğu tarafından belirtilen aralık içindeyse izin verilir. Aksi takdirde, segmentasyon hatası gibi bir donanım istisnası ortaya çıkar.

Segmentler, sanal belleği uygulamak için de kullanılabilir . Bu durumda her segmentin ana bellekte bulunup bulunmadığını gösteren ilgili bir bayrağı vardır. Ana bellekte olmayan bir kesime erişilirse, bir özel durum ortaya çıkar ve işletim sistemi , bölümü ikincil depolamadan belleğe okuyacaktır.

Segmentasyon, bellek koruması uygulamanın bir yöntemidir . Çağrı başka bir şeydir ve birleştirilebilirler. Bir bellek bölümünün boyutu genellikle sabit değildir ve tek bir bayt kadar küçük olabilir .

Segmentasyon, sayfalamalı veya sayfalamasız, farklı donanımlarda birkaç farklı şekilde uygulanmıştır. Intel x86 bellek segmentasyonu her iki modele de uymuyor ve aşağıda ayrı ayrı ve ayrıca ayrı bir makalede daha ayrıntılı olarak tartışılıyor.

Sayfalama olmadan segmentasyon

Her segmentle ilişkilendirilen, segmentin bellekte nerede bulunduğunu gösteren bilgidir - segment tabanı . Bir program bir bellek konumuna başvurduğunda, fiziksel bir bellek adresi oluşturmak için bölüm tabanına ofset eklenir.

Sayfalama olmadan segmentasyon kullanan bir sistemde sanal belleğin uygulanması, tüm segmentlerin ana bellek ve ikincil depolama arasında değiş tokuş edilmesini gerektirir. Bir segment değiştirildiğinde, işletim sisteminin tüm segmenti tutacak kadar yeterli bitişik boş bellek ayırması gerekir. Toplamda yeterli olmasına rağmen yeterli bitişik bellek yoksa, genellikle bellek parçalanması ortaya çıkar.

Sayfalama ile segmentasyon

Gerçek bir bellek konumu yerine, bölüm bilgisi , bölüm için bir sayfa tablosunun adresini içerir . Bir program bir bellek konumuna başvurduğunda, ofset, sayfa tablosu kullanılarak bir bellek adresine çevrilir. Bir segment, basitçe başka bir bellek sayfası tahsis edilerek ve segmentin sayfa tablosuna eklenerek genişletilebilir.

Sayfalamalı segmentasyon kullanan bir sistemde sanal belleğin uygulanması, disk belleği olan segmentlenmemiş bir sisteme benzer şekilde, genellikle yalnızca tek tek sayfaları ana bellek ve ikincil depolama arasında ileri geri hareket ettirir. Segmentin sayfaları, ana bellekte herhangi bir yere yerleştirilebilir ve bitişik olması gerekmez. Bu genellikle birincil ve ikincil depolama arasında azaltılmış miktarda girdi/çıktı ve azaltılmış bellek parçalanması ile sonuçlanır.

Tarih

Burroughs Şirketi B5000 bilgisayar segmentasyon uygulamak için ilk biriydi ve segmentasyon dayanan "belki ilk ticari bilgisayar sanal bellek sağlamak için". Daha sonraki B6500 bilgisayarı da segmentasyon uyguladı; mimarisinin bir versiyonu bugün hala Unisys ClearPath Libra sunucularında kullanılmaktadır.

GE-645 bilgisayar ilave bölümleme ve çağrı destek GE-635 bir modifikasyonu, desteklemek için 1964 tasarlanmıştır Multics .

Intel iAPX 432 1975 yılında başlamış, bir mikroişlemci bellek koruması ile gerçek segmentli mimariyi kurmak için çalıştı.

Intel i960 işlemcilerinin 960MX sürümü , kaynak veya hedefin bir nesne için bir "erişim tanımlayıcısı" ve erişim tanımlayıcısının 32 bitlik bir kayıtta ve ofset ile nesneye bir ofset olduğu yükleme ve depolama talimatlarını destekledi. sonraki kayıttaki bir taban ofsetinden ve ek bir ofsetten ve isteğe bağlı olarak talimatta belirtilen bir indeks kaydından hesaplanır. Bir erişim tanımlayıcısı, izin bitlerini ve 26 bitlik bir nesne dizini içerir; nesne dizini, nesne türü, nesne uzunluğu ve nesnenin verileri için fiziksel bir adres, nesne için bir sayfa tablosu veya iki düzey için üst düzey sayfa tablosu veren nesne tanımlayıcıları tablosuna bir dizindir. nesne türüne bağlı olarak nesne için sayfa tablosu.

Prime , Stratus , Apollo , IBM System/38 ve IBM AS/400 ( IBM i dahil ) bilgisayarları bellek segmentasyonu kullanır.

x86 mimarisi

Intel 8086 ile başlayan erken dönem x86 işlemciler tarafından kullanılan bellek segmentasyonu herhangi bir koruma sağlamaz. Bu işlemcilerde çalışan herhangi bir program, herhangi bir kısıtlama olmaksızın herhangi bir segmente erişebilir. Bir segment yalnızca başlangıç ​​konumu ile tanımlanır; uzunluk kontrolü yoktur. Segment başlangıç ​​adresi ayrıntı düzeyi 16 bayttır ve ofset 16 bittir, 64 KiB'ye kadar segment boyutlarını destekler, bu nedenle segmentler üst üste gelebilir (ve genellikle yapar) ve her bir fiziksel adres 4096 farklı segment-offset çifti ile gösterilebilir (adres için izin veren) ofset sarma).

Intel 80286 ve sonraki sürümlerde segmentasyon koruma sağlar: 80286'nın piyasaya sürülmesiyle Intel, geriye dönük olarak önceki x86 CPU modellerinin tek çalışma modunu " gerçek mod " olarak adlandırdı ve koruma özelliklerine sahip yeni bir " korumalı mod " tanıttı . Geriye dönük uyumluluk için, tüm x86 CPU'lar bellek koruması olmadan, sabit 64 KiB segmenti ve yalnızca 20 bit (1024 KiB) adresleme ile "gerçek modda" başlar. 80286 veya sonraki bir işlemci, tam adres alanını ve gelişmiş MMU özelliklerini kullanmak için yazılım tarafından başka bir moda geçirilmelidir.

Intel 80386 ve üstü işlemciler de disk belleği destekler; bu işlemcilerde, segment tablosu, segment için bir sayfa tablosuna işaret etmek yerine, segment adresini doğrusal bellekte içerir . Doğrusal bellekteki adresler daha sonra, sayfalama etkinleştirilmişse, ayrı bir sayfa tablosu kullanılarak fiziksel adreslerle eşlenir.

X86-64 mimarisi uzun modunda (64 bit modu) segmentasyon kullanmaz. Bir x86-64 mimarisinde eski olarak kabul edilir ve çoğu x86-64 tabanlı modern sistem yazılımı bellek segmentasyonu kullanmaz. Bunun yerine, programları ve verilerini, aynı zamanda bir bellek koruma yolu olarak da hizmet eden bellek sayfalamayı kullanarak işlerler . Çoğu x86-64 uygulaması, geriye dönük uyumluluk nedenleriyle hala onu desteklemektedir. Segment kayıtlarından dördü: CS, SS, DS ve ES, 0'a ve sınır 2 64'e zorlanır . Segment kayıtları FS ve GS yine de sıfırdan farklı bir temel adrese sahip olabilir. Bu, işletim sistemlerinin bu segmentleri özel amaçlar için kullanmasına izin verir.

Ayrıca bakınız

Referanslar

Dış bağlantılar