Adresa paměti - Memory address

V počítači využívajícím virtuální paměť může přístup k umístění odpovídajícímu adrese paměti zahrnovat mnoho úrovní.

Při práci na počítači je adresa paměti odkazem na konkrétní paměťové místo používané na různých úrovních softwarem a hardwarem . Adresy paměti jsou sekvence číslic s pevnou délkou běžně zobrazované a zpracovávané jako celá čísla bez znaménka . Taková numerická sémantika vychází z vlastností CPU (jako je ukazatel instrukce a přírůstkové registry adres ), stejně jako z využití paměti jako pole schváleného různými programovacími jazyky .

Typy

Fyzické adresy

A digitální počítač s operační paměť se skládá z mnoha míst paměti . Každé paměťové místo má fyzickou adresu, což je kód. CPU (nebo jiné zařízení) může použít kód pro přístup k odpovídajícímu umístění paměti. Obecně pouze systémový software , tj. BIOS , operační systémy a některé specializované obslužné programy (např. Testery paměti ), adresují fyzickou paměť pomocí operandů strojového kódu nebo registrů procesorů a instruují CPU, aby nasměrovalo hardwarové zařízení, nazývané řadič paměti , aby k provádění příkazů programu použijte paměťovou sběrnici nebo systémovou sběrnici nebo oddělené řídicí , adresové a datové sběrnice . Sběrnice řadičů paměti se skládá z několika paralelních linek, z nichž každá je reprezentována binární číslicí (bitem). Šířka sběrnice, a tím i počet adresovatelných úložných jednotek a počet bitů v každé jednotce, se mezi počítači liší.

Logické adresy

Počítačový program používá adresy paměti ke spuštění strojového kódu , a pro ukládání a načítání dat . V počátečních počítačích logické a fyzické adresy odpovídaly, ale od zavedení virtuální paměti většina aplikačních programů nezná fyzické adresy. Adresují spíše logické adresy nebo virtuální adresy pomocí jednotky pro správu paměti počítače a mapování paměti operačního systému ; viz níže .

Jednotka rozlišení adresy

Většina moderních počítačů je adresovatelných podle bajtů . Každá adresa identifikuje jeden bajt ( osm bitů ) úložiště. Data větší než jeden bajt mohou být uložena v sekvenci po sobě jdoucích adres. Existují počítače adresovatelné slovem , kde minimální adresovatelná úložná jednotka je přesně slovo procesoru . Například data Všeobecné Nova minipočítač , a Texas Instruments TMS9900 a National Semiconductor IMP-16 mikropočítače používá 16 bitové slovo , a tam bylo mnoho 36-bitové sálové počítače (např PDP-10 ), který používal 18-bitové slovo adresování , nikoli adresování bajtů , což poskytuje adresní prostor 2 18 36bitových slov, přibližně 1 megabajt úložiště. Účinnost adresování paměti závisí na bitové velikosti sběrnice použité pro adresy - čím více použitých bitů, tím více adres má počítač k dispozici. Například 8bitový adresovatelný stroj s 20bitovou adresovou sběrnicí (např. Intel 8086 ) může adresovat 2 20 (1 048 576) paměťových míst nebo jedno MiB paměti, zatímco 32bitová sběrnice (např. Intel 80386 ) adresy 2 32 (4 294 967 296) umístění nebo adresní prostor 4 GiB . Naproti tomu 36bitový stroj adresovatelný slovy s adresami 18bitové sběrnice adres pouze 2 18 (262 144) 36bitových umístění (9 437 184 bitů), což odpovídá 1 179 648 8bitovým bytům nebo 1152 KiB nebo 1,125 MiB- o něco více než 8086.

Některé starší počítače ( desítkové počítače ) byly adresovatelné s desetinnou číslicí . Například, každá adresa v IBM 1620 je magnetické jádro paměti identifikován jediný šest bitů BCD číslice, skládající se z paritní bit , příznakový bit a čtyři číselné bitů. 1620 používalo 5místné desetinné adresy, takže teoreticky nejvyšší možná adresa byla 99 999. V praxi CPU podporovalo 20 000 paměťových míst a mohly být přidány až dvě volitelné externí paměťové jednotky, z nichž každá podporovala 20 000 adres, tedy celkem 60 000 (00000–59999).

Velikost slova versus velikost adresy

Velikost slova je charakteristická pro architekturu počítače a udává počet bitů, které může procesor zpracovat najednou. Moderní procesory, včetně vestavěných systémů , mají obvykle velikost slova 8, 16, 24, 32 nebo 64 bitů; většina současných univerzálních počítačů používá 32 nebo 64 bitů. Historicky bylo použito mnoho různých velikostí, včetně 8, 9, 10, 12, 18, 24, 36, 39, 40, 48 a 60 bitů.

Velmi často, když se odkazuje na velikost slova moderního počítače, se také popisuje velikost adresního prostoru na tomto počítači. Například počítač označovaný jako „ 32bitový “ také obvykle umožňuje adresy 32bitové paměti; 32bitový počítač s adresovatelným bajtem může adresovat 2 32 = 4 294 967 296 bajtů paměti nebo 4 gigabajty (GiB). To umožňuje efektivně uložit jednu adresu paměti do jednoho slova.

To však neplatí vždy. Počítače mohou mít adresy paměti větší nebo menší než velikost jejich slova. Například mnoho 8bitových procesorů, jako je technologie MOS 6502 , podporovalo 16bitové adresy -pokud ne, byly by omezeny na pouhých 256 bajtů adresování paměti. 16bitové Intel 8088 a Intel 8086 podporovaly 20bitové adresování prostřednictvím segmentace , což jim umožňovalo přístup k 1 MiB spíše než k 64 KiB paměti. Všechny procesory Intel Pentium od verze Pentium Pro obsahují rozšíření fyzické adresy (PAE), která podporují mapování 36bitových fyzických adres na 32bitové virtuální adresy. Mnoho raných procesorů obsahovalo 2 adresy na slovo , například 36bitové procesory.

Teoreticky mohou moderní 64bitové počítače s adresou bajtů adresovat 2 64 bajtů (16 exbibytů ), ale v praxi je velikost paměti omezena procesorem, řadičem paměti nebo návrhem desky s plošnými spoji (např. Počet fyzických paměťové konektory nebo množství připájené paměti).

Obsah každého paměťového místa

Každé paměťové místo v skladoval-počítač programubinární číslo nebo desetinné číslo nějakého druhu . Jeho interpretace, jako data nějakého datového typu nebo jako instrukce, a použití jsou určeny instrukcemi, které jej získávají a manipulují s ním.

Někteří raní programátoři kombinovali instrukce a data ve slovech jako způsob, jak ušetřit paměť, když to bylo drahé: Manchester Mark 1 měl ve svých 40bitových slovech místo pro ukládání malých bitů dat-jeho procesor ignoroval malou část uprostřed slovo - a to bylo často využíváno jako další úložiště dat. Samoreplikační programy, jako jsou viry, se považují někdy za data a někdy za pokyny. Self-modifikovat kód se obvykle nepoužívá v dnešní době, jak to dělá testování a údržba neúměrně složité k úspoře několika bajtů, a může také dát nesprávné výsledky, protože kompilátor nebo předpokladů procesoru o stroje stavu , ale je ještě někdy použitý úmyslně, s velkou péčí.

Adresní prostor v programování aplikací

V moderním víceúlohovém prostředí má proces aplikace obvykle ve svém adresním prostoru (nebo mezerách) bloky paměti následujících typů:

Některé části adresního prostoru nemusí být vůbec mapovány.

Některé systémy mají „rozdělenou“ paměťovou architekturu, kde jsou strojový kód, konstanty a data na různých místech a mohou mít různou velikost adresy. Například mikrokontroléry PIC18 mají 21bitový programový čítač pro adresování strojového kódu a konstant v paměti Flash a 12bitové registry adres pro adresování dat v SRAM.

Adresní schémata

Počítačový program má přístup k explicitně zadané adrese -v nízkoúrovňovém programování se tomu obvykle říká absolutní adresa nebo někdykonkrétní adresaave jazycích vyšší úrovněse označuje jakodatový typukazatele. Program však může také použítrelativní adresu,která určuje umístění ve vztahu k někde jinde ( základní adresa ). Existuje mnoho dalších režimy nepřímého adresování.

Mapování logických adres na fyzickou a virtuální paměť také přidává několik úrovní přesměrování; viz. níže.

Paměťové modely

Mnoho programátorů upřednostňuje adresování paměti tak, aby neexistoval rozdíl mezi kódovým prostorem a datovým prostorem (viz výše ), jakož i fyzickou a virtuální pamětí (viz níže ) - jinými slovy, číselně identické ukazatele odkazují na přesně stejný bajt RAM.

Mnoho raných počítačů však takový plochý model paměti nepodporovalo - zejména stroje na architektuře Harvard vynucují, aby bylo úložiště programu zcela oddělené od ukládání dat. Mnoho moderních DSP (například Motorola 56000 ) má tři oddělené oblasti úložiště - programové úložiště, úložiště koeficientů a úložiště dat. Některé běžně používané pokyny se načítají ze všech tří oblastí současně - méně úložných oblastí (i kdyby tam byly stejné celkové bajty úložiště) by tyto instrukce zpomalovaly.

Paměťové modely v architektuře x86

Počáteční počítače x86 používají adresy modelu segmentované paměti na základě kombinace dvou čísel: paměťový segment a offset v rámci tohoto segmentu.

Některé segmenty jsou implicitně považovány za segmenty kódu , vyhrazené pro pokyny , segmenty zásobníku nebo normální datové segmenty . Ačkoli jsou použití různá, segmenty nemají různé ochrany paměti, což to odráží. V modelu ploché paměti jsou všechny segmenty (registry segmentů) obecně nastaveny na nulu a pouze offsety jsou variabilní.

Viz také

Reference