Úvod
V počítači s funkcí převodu adres se adresa (operand) zadaná přístupovou instrukcí nazývá logická adresa nebo relativní adresa. Skutečná efektivní adresa ve vnitřní paměti, tj. fyzická adresa, se získá výpočtem nebo transformací režimu adresování.
Režim adresování (funkce převodu adres) se u různých počítačů liší. Při psaní programu v jazyce symbolických instrukcí se musíte nejprve seznámit s instrukčním systémem tohoto stroje.
Vysvětlení referenční příručky
1. V počítači s funkcí převodu adres se adresa (operand) zadaná přístupovou instrukcí nazývá logická adresa, nazývaná také relativní adresa. Fyzická adresa ve vnitřní paměti je získána výpočtem nebo transformací režimu adresování.
2. Adresa použitá v uživatelském programu se nazývá relativní adresa nebo logická adresa.
3. Logická adresa se skládá ze dvou 16bitových složek adresy, jedna je základní hodnota segmentu a druhá je offset. Obě součásti jsou kódovány čísly bez znaménka.
Vysvětlení akademické literatury
1. Tímto způsobem může být adresa úložné jednotky reprezentována základní adresou segmentu (adresa segmentu) a ofsetem v rámci segmentu (adresa offsetu). Základní adresa určuje umístění segmentu, ve kterém se nachází v celém úložném prostoru, a offset určuje jeho umístění v rámci segmentu. Tato reprezentace adresy se nazývá logická adresa a obvykle se vyjadřuje ve formě adresa segmentu: offsetová adresa.
2. Takzvaná logická adresa označuje umístění disku dané číslem logického bloku dat (l blok = 512 slov l slovo = 64 bitů) a fyzická adresa je určena válcem a hlavou disku. , Segment a další fyzická umístění určená adresou.
Pozadí
Když se podíváme na zdroj, 8bitový počítač Intel 8080CPU má 8bitovou datovou sběrnici (DB) a 16bitovou adresovou sběrnici (AB). Poté se tato 16bitová informace o adrese má také přenášet přes 8bitovou datovou sběrnici a je také uložena v zápisníku v datovém kanálu a v registrech a paměti v CPU, ale protože AB je přesně celé číslo násobek DB, takže nebudou žádné rozpory!
Když byl však upgradován na 16bitový počítač, návrh procesoru Intel8086/8088CPU nemohl překročit 40 pinů kvůli omezení technologie integrace IC a externího balení a technologie pinů. Mám ale pocit, že původní adresovací schopnost 8bitového stroje 2^16=64KB je příliš malá, ale je přímo zvýšena na celočíselný násobek 16, i když není dosaženo AB=32bitů. Proto lze AB pouze dočasně zvýšit o 4 až 20. Poté se kapacita adresování 2^20=1MB zvýšila 16krát. To však způsobilo rozpor mezi 20bitovým AB a 16bitovým DB. Informace o 20bitové adrese nelze přenášet na DB ani je nelze uložit do 16bitového registru CPU a paměťové jednotky. Tak vznikl princip segmentové struktury CPU.
Lineární adresa
Logická adresa se skládá ze dvou částí, identifikátoru segmentu a offsetu v segmentu. Identifikátor segmentu se skládá z 16bitového pole nazývaného selektor segmentu. Prvních 13 číslic je indexové číslo. Uvozovky lze chápat jako dolní index pole – a bude odpovídat poli. O jaký index se jedná? Toto je „deskriptor segmentu“. Konkrétní adresa deskriptoru segmentu popisuje segment (pochopení slova „segment“: můžeme pochopit, že virtuální paměť je rozdělena na segmenty. Například paměť má 1024 Lze ji rozdělit na 4 segmenty, každý segment má 256 bajtů). Tímto způsobem je mnoho deskriptorů segmentů seskupeno do pole nazvaného "tabulka deskriptorů segmentů". Tímto způsobem lze konkrétní deskriptor segmentu nalézt přímo v tabulce deskriptorů segmentu prostřednictvím prvních 13 bitů identifikátoru segmentu. Deskriptor popisuje segment. Abstrakce segmentu právě nebyla přesná, protože když se podíváte na to, co je v deskriptoru – tedy jak je to popsáno, můžete pochopit, co je v segmentu. , Každý deskriptor segmentu se skládá z 8 bajtů, jak je znázorněno na obrázku 1:
Tyto věci jsou velmi složité, i když k jejich definování lze použít datovou strukturu, ale zde mě zajímá pouze jedna věc, a to Základní pole, které popisuje lineární adresu počáteční pozice segmentu.
Původním záměrem návrhu společnosti Intel je, že některé globální deskriptory segmentů jsou umístěny v „Tabulce deskriptorů globálních segmentů (GDT)“ a některé místní, jako je každý proces vlastní, jsou umístěny v takzvaném „Local Segment Tabulka deskriptorů (LDT)". Kdy bych tedy měl použít GDT a kdy LDT? To je indikováno polem T1 ve selektoru segmentu, =0 znamená použití GDT a =1 znamená použití LDT.
Adresa a velikost GDT v paměti jsou uloženy v řídicím registru gdtr CPU, zatímco LDT je v registru ldtr.
Mnoho konceptů, jako jsou jazykolamy. Obrázek 2 vypadá intuitivněji:
Nejprve dostaneme úplnou logickou adresu [selektor segmentu: offsetová adresa v segmentu],
1, podívejte se na selektor segmentu T1=0 nebo 1, zjistěte, zda je aktuální převod segmentem v GDT nebo LDT, a poté zjistěte jeho adresu a velikost podle odpovídajícího registru. Máme pole.
2. Vyjměte prvních 13 bitů segmentového voliče. V tomto poli můžete najít odpovídající deskriptor segmentu, takže je to Base, tedy základní adresa.
3, Base + offset je lineární adresa, která má být převedena.
Související rozdíly
Logická adresa (Logická adresa) odkazuje na část offsetové adresy související se segmentem generovaným programem. Když například programujete ukazatel v jazyce C, můžete číst hodnotu samotné proměnné ukazatele (operace &). Tato hodnota je ve skutečnosti logická adresa, která je relativní k adrese datového segmentu vašeho aktuálního procesu a nesouvisí s absolutní fyzickou adresou. . Pouze v reálném režimu Intel je logická adresa rovna fyzické adrese (protože reálný režim nemá segmentační ani stránkovací mechanismus, CPU neprovádí automatickou konverzi adres); logika je odchylka v rámci limitu segmentu kódu při provádění programu v chráněném režimu Intel Shift adresa (za předpokladu, že segment kódu a datový segment jsou přesně stejné). Aplikační programátoři se musí zabývat pouze logickými adresami a mechanismus segmentace a stránkování je pro vás zcela transparentní a účastní se jej pouze systémoví programátoři. Přestože aplikační programátoři mohou přímo manipulovat s pamětí sami, mohou pracovat pouze se segmentem paměti, který vám přidělí operační systém. Lineární adresa (Linear Address) je mezivrstva mezi logickou adresou a konverzí fyzické adresy. Programový kód vygeneruje logickou adresu nebo offsetovou adresu v segmentu plus základní adresu odpovídajícího segmentu pro generování lineární adresy. Pokud je povolen stránkovací mechanismus, lze lineární adresu transformovat na generování fyzické adresy. Pokud není mechanismus stránkování povolen, lineární adresa je přímo fyzická adresa. Kapacita lineárního adresního prostoru Intel 80386 je 4G (2 až 32. mocnina je adresování 32 adresovou sběrnicí).
Fyzická adresa (fyzická adresa) označuje adresový signál, který se objevuje na externí adresové sběrnici CPU pro adresu fyzické paměti, a je konečnou adresou převodu adresy. Pokud je povolen stránkovací mechanismus, lineární adresa bude převedena na fyzickou adresu pomocí položek v adresáři stránek a tabulce stránek. Pokud není mechanismus stránkování povolen, lineární adresa se stane přímo fyzickou adresou.
Virtuální paměť označuje množství paměti, kterou počítač poskytuje, je mnohem větší než skutečná paměť. Umožňuje tedy programátorům kompilovat a spouštět programy, které mají mnohem větší paměť, než má skutečný systém. To umožňuje implementovat mnoho velkých projektů na systémech s omezenými paměťovými prostředky. Velmi vhodná analogie je: nepotřebujete dlouhou trať, abyste se dostali vlakem ze Šanghaje do Pekingu. Ke splnění tohoto úkolu potřebujete pouze dostatečně dlouhé koleje (řekněme 3 kilometry). Přijatá metoda spočívá v okamžitém položení kolejnic za předek vlaku. Pokud je váš provoz dostatečně rychlý a dokáže splnit požadavky, může vlak jet jako kompletní trať. Toto je úkol, který musí správa virtuální paměti dokončit. V jádře Linux 0.11 je každý program (proces) rozdělen do virtuálního paměťového prostoru o celkové kapacitě 64 MB. Proto je rozsah logických adres programu 0x0000000 až 0x4000000.
Někdy také nazýváme logické adresy jako virtuální adresy. Protože je to podobné konceptu virtuálního paměťového prostoru, logická adresa je také nezávislá na skutečné fyzické kapacitě paměti.
Mezera mezi logickou adresou a fyzickou adresou je 0xC0000000, což je způsobeno tím, že virtuální adresa -> lineární adresa -> mapování fyzické adresy se od této hodnoty přesně liší. Tato hodnota je určena operačním systémem.