Bellek adresi - Memory address

Sanal bellek kullanan bir bilgisayarda , bir bellek adresine karşılık gelen konuma erişim birçok seviyeyi içerebilir.

Bilgi işlemde , bir bellek adresi , yazılım ve donanım tarafından çeşitli düzeylerde kullanılan belirli bir bellek konumuna yapılan bir referanstır . Bellek adresleri, geleneksel olarak görüntülenen ve işaretsiz tamsayılar olarak işlenen sabit uzunluktaki basamak dizileridir . Bu tür sayısal anlambilim, kendisini CPU'nun özelliklerine ( yönerge işaretçisi ve artımlı adres yazmaçları gibi ) ve ayrıca belleğin çeşitli programlama dilleri tarafından onaylanan bir dizi gibi kullanımına dayanır .

Türler

Fiziksel adresler

Bir dijital bilgisayarın 's ana bellek çok sayıda oluşur bellek konumlarında . Her bellek konumunun bir kod olan fiziksel bir adresi vardır. CPU (veya diğer cihaz), ilgili bellek konumuna erişmek için kodu kullanabilir. Genellikle yalnızca sistem yazılımı , yani BIOS , işletim sistemleri ve bazı özel yardımcı programlar (örneğin, bellek test cihazları ), makine kodu işlenenlerini veya işlemci kayıtlarını kullanarak fiziksel belleğe hitap eder ve CPU'ya bellek denetleyicisi olarak adlandırılan bir donanım aygıtını yönlendirmesini söyler . programın komutlarını yürütmek için bellek veri yolunu veya sistem yolunu ya da ayrı kontrol , adres ve veri yollarını kullanın. Bellek denetleyicilerinin veri yolu , her biri bir ikili basamak (bit) ile temsil edilen bir dizi paralel hattan oluşur . Veri yolunun genişliği ve dolayısıyla adreslenebilir depolama birimlerinin sayısı ve her bir birimdeki bit sayısı bilgisayarlar arasında farklılık gösterir.

Mantıksal adresler

Bir bilgisayar programı , makine kodunu yürütmek ve verileri depolamak ve almak için bellek adreslerini kullanır . Erken bilgisayarlarda mantıksal ve fiziksel adresler birbirine karşılık geliyordu, ancak sanal belleğin ortaya çıkmasından bu yana çoğu uygulama programı fiziksel adres bilgisine sahip değil. Bunun yerine, bilgisayarın bellek yönetim birimini ve işletim sistemi bellek eşlemesini kullanarak mantıksal adresleri veya sanal adresleri adreslerler ; aşağıya bakın .

Adres çözümleme birimi

Çoğu modern bilgisayar bayt adreslenebilir . Her adres , depolamanın tek bir baytını ( sekiz bit ) tanımlar . Tek bir bayttan daha büyük veriler, ardışık adres dizisinde saklanabilir. Minimum adreslenebilir depolama biriminin tam olarak işlemcinin word'ü olduğu, kelime adreslenebilir bilgisayarlar vardır . Örneğin, Data General Nova minibilgisayar ve Texas Instruments TMS9900 ve National Semiconductor IMP-16 mikrobilgisayarları 16 bit sözcükler kullandı ve 18 bit sözcük adresleme kullanan birçok 36 bitlik ana bilgisayar (örneğin, PDP-10 ) vardı , bayt adresleme değil , 2 18 36 bit word'lük bir adres alanı vererek , yaklaşık 1 megabayt depolama alanı. Belleğin adresleme verimliliği, adresler için kullanılan veri yolunun bit boyutuna bağlıdır - ne kadar çok bit kullanılırsa, bilgisayarda o kadar fazla adres bulunur. Örneğin, 20 bit adres veriyoluna (örn. Intel 8086 ) sahip 8 bit bayt adreslenebilir bir makine, 2 20 (1.048.576) bellek konumunu veya bir MiB belleği adresleyebilirken , 32 bit veriyolu (örn. Intel 80386) ) 2 32 (4,294,967,296) konumu veya 4 GiB adres alanını adresler. Buna karşılık, sadece 2, bir 18 bitlik adres yolu adresleri ile bir 36-bitlik bir sözcük-adreslenebilir makinesi 18 1.179.648 8-bitlik baytlar veya 1152 (262,144) 36 bit konumları (9.437.184 bit), eşdeğer KiB veya 1.125 MIB - 8086'dan biraz daha fazla.

Bazı eski bilgisayarlar ( ondalık bilgisayarlar ), ondalık basamak adreslenebilirdi . Örneğin, her bir adres kullanım IBM 1620 s' , manyetik çekirdek bellek tanımlanan tek bir altı bitlik ikili kodlanmış ondalık bir oluşan basamaklı eşlik biti , bayrak biti ve dört sayısal bit. 1620, 5 basamaklı ondalık adresler kullandı, bu nedenle teoride mümkün olan en yüksek adres 99.999'du. Pratikte, CPU 20.000 bellek konumunu destekledi ve her biri 20.000 adresi destekleyen iki adede kadar isteğe bağlı harici bellek birimi eklenebilir, toplam 60.000 (00000–59999).

Kelime boyutuna karşı adres boyutu

Kelime boyutu, bir CPU'nun bir seferde işleyebileceği bit sayısını gösteren bilgisayar mimarisinin bir özelliğidir . Gömülü sistemler de dahil olmak üzere modern işlemciler genellikle 8, 16, 24, 32 veya 64 bitlik bir kelime boyutuna sahiptir; mevcut genel amaçlı bilgisayarların çoğu 32 veya 64 bit kullanır. 8, 9, 10, 12, 18, 24, 36, 39, 40, 48 ve 60 bit dahil olmak üzere tarihsel olarak birçok farklı boyut kullanılmıştır.

Çok sık olarak, modern bir bilgisayarın kelime boyutuna atıfta bulunulurken , o bilgisayardaki adres alanının boyutu da tanımlanır. Örneğin, " 32-bit " olduğu söylenen bir bilgisayar genellikle 32-bit bellek adreslerine de izin verir; bir bayt adreslenebilir 32 bit bilgisayar, 2 32 = 4,294,967,296 bayt bellek veya 4 gibibayt (GiB) adresleyebilir . Bu, bir bellek adresinin tek kelimede verimli bir şekilde saklanmasını sağlar.

Ancak, bu her zaman geçerli değildir. Bilgisayarlar, kelime boyutlarından daha büyük veya daha küçük bellek adreslerine sahip olabilir. Örneğin, birçok 8 bit gibi işlemciler, MOS Technology 6502 , 16 bit adresleri desteklenen - onlar sadece 256 ile sınırlı olurdu değilse bayt bellek adresleme. 16 bit Intel 8088 ve Intel 8086 , segmentasyon yoluyla 20 bit adreslemeyi destekleyerek 64 KiB bellek yerine 1 MiB'ye erişmelerine izin verdi. Tüm Intel Pentium beri işlemciler Pentium Pro dahil Fiziksel Adres Uzantıları destek haritalama 36 bitlik fiziksel adresler sanal adresleri 32-bit (PAE). Çoğu eski işlemci , 36 bit işlemciler gibi kelime başına 2 adres tuttu .

Teoride, modern bayt adreslenebilir 64-bit bilgisayarlar 2 64 baytı (16 exbibyte ) adresleyebilir , ancak pratikte bellek miktarı CPU, bellek denetleyicisi veya baskılı devre kartı tasarımı (örn. bellek konektörleri veya lehimlenmiş bellek miktarı).

Her hafıza konumunun içeriği

Depolanmış bir program bilgisayarındaki her bellek konumu, bir tür ikili sayı veya ondalık sayı tutar . Bir veri tipinin verisi olarak veya bir talimat olarak yorumlanması ve kullanımı, onu alan ve işleyen talimatlar tarafından belirlenir .

Bazı erken programcılar, pahalı olduğu zamanlarda bellekten tasarruf etmenin bir yolu olarak komutları ve verileri sözcüklerle birleştirdiler: Manchester Mark 1'in 40 bitlik sözcüklerinde küçük veri parçalarını depolamak için alan vardı - işlemcisi, verilerin ortasındaki küçük bir bölümü görmezden geldi. bir kelime - ve bu genellikle fazladan veri depolaması olarak kullanıldı. Virüsler gibi kendi kendini kopyalayan programlar kendilerine bazen veri bazen de talimat olarak davranırlar. Kendi kendini değiştiren kod , test ve bakımı orantısız bir şekilde birkaç baytın kaydedilmesini zorlaştırdığından ve ayrıca derleyici veya işlemcinin makinenin durumu hakkındaki varsayımları nedeniyle yanlış sonuçlar verebildiğinden, günümüzde genellikle kullanımdan kaldırılmıştır , ancak yine de bazen kasıtlı olarak kullanılır, büyük bir özenle.

Uygulama programlamasında adres alanı

Modern çoklu görev ortamında, bir uygulama sürecinin adres alanında (veya boşluklarında) genellikle aşağıdaki türde bellek parçaları bulunur:

Adres alanının bazı bölümleri hiç eşlenmemiş olabilir.

Bazı sistemler, makine kodunun, sabitlerin ve verilerin farklı konumlarda olduğu ve farklı adres boyutlarına sahip olabileceği "bölünmüş" bir bellek mimarisine sahiptir. Örneğin, PIC18 mikro denetleyicileri, Flash bellekteki makine kodunu ve sabitleri adreslemek için 21 bitlik bir program sayacına ve SRAM'deki verileri adreslemek için 12 bitlik adres yazmaçlarına sahiptir.

Adresleme şemaları

Bir bilgisayar programı, açıkça verilen bir adrese erişebilir - düşük seviyeli programlamada buna genellikle bir adres denir. mutlak adres veya bazenbelirli bir adresvedaha yüksek seviyeli dillerdeişaretçiveri türüolarak bilinir. Ancak bir program,başka bir yere göre bir konumu belirtengöreli adreside kullanabilir( temel adres ). Daha çok varDolaylı adresleme modları.

Mantıksal adresleri fiziksel ve sanal belleğe eşlemek, aynı zamanda çeşitli dolaylılık düzeyleri ekler; aşağıya bakınız.

Bellek modelleri

Birçok programcı, kod alanı ile veri alanı (bkz. yukarı ) ve fiziksel ve sanal bellek (aşağıya bakınız ) arasında hiçbir ayrım olmayacak şekilde belleği adreslemeyi tercih eder - başka bir deyişle, sayısal olarak aynı işaretçiler tam olarak aynı bayta atıfta bulunur. RAM'in.

Bununla birlikte, birçok eski bilgisayar böyle bir düz bellek modelini desteklemedi - özellikle Harvard mimarisi makineleri , program depolamayı veri depolamadan tamamen ayrı olmaya zorladı. Birçok modern DSP'nin ( Motorola 56000 gibi ) üç ayrı depolama alanı vardır - program depolama, katsayı depolama ve veri depolama. Yaygın olarak kullanılan bazı yönergeler, üç alanın hepsinden aynı anda alınır - daha az depolama alanı (toplam bayt depolama alanı aynı olsa bile) bu talimatların daha yavaş çalışmasına neden olur.

x86 mimarisinde bellek modelleri

İlk x86 bilgisayarları , iki sayının birleşimine dayalı olarak bölümlere ayrılmış bellek modeli adreslerini kullanır : bir bellek bölümü ve bu bölüm içindeki bir uzaklık .

Bazı bölümler dolaylı olarak yönergeler , yığın bölümleri veya normal veri bölümleri için ayrılmış kod bölümleri olarak ele alınır . Kullanımları farklı olsa da segmentlerin bunu yansıtan farklı bellek korumaları yoktur . Olarak düz bellek modeli bütün segmentler (kademeli kayıt) genel olarak sıfıra ayarlanır ve sadece ofsetler değişkendir.

Ayrıca bakınız

Referanslar