Skutečný režim

Real mode (neboli režim reálné adresy; anglicky  real-address mode ) - provozní režim procesorů architektury x86 , který využívá adresování segmentové paměti (adresa paměťové buňky je tvořena dvěma číslicemi: adresa začátku segmentu posunutá o 4 bity a offset buňky od začátku segmentu; každý proces má přístup k celé paměti počítače). Zpočátku neměl režim žádné jméno, "skutečný" byl nazýván až po vytvoření procesorů 80286, které podporovaly režim nazývaný " chráněný " (režim se nazývá "chráněný", protože byl vytvořen, aby "chránil" procesy před sebou navzájem - aby se zabránilo procesům v přístupu k paměťovým oblastem ostatních, ale pro procesory 80286 nebyl chráněný režim skutečně „zabezpečený“, protože tyto procesory nepodporovaly stránkování paměti , které bylo poprvé implementováno v procesorech 80386 ).

Popis

V reálném režimu se virtuální adresa paměťové buňky skládá ze dvou čísel:

Pro výpočet fyzické nebo lineární adresy paměťové buňky vypočítá procesor fyzickou adresu začátku segmentu - vynásobí segmentovou část virtuální adresy číslem 16 (nebo ekvivalentně posune doleva o 4 ). bits ) a poté přidá výsledné číslo s posunem od začátku segmentu:

segment_part × 16 + offset

Pokud není segmentová část adresy specifikována (v kódu instrukce ), procesor načte segmentovou část adresy z jednoho ze segmentových registrů (z nichž jeden závisí na kódu instrukce).

S tímto adresováním budou adresy 0400 h : 0001h a 0000h: 4001h (písmeno "h" znamená, že číslo je zapsáno v hexadecimálním zápisu ) odkazovat na stejnou paměťovou buňku, protože 400h × 16 + 1 = 0 × 16 + 4001h .

Minimální adresa: 0000h:0000h ( 0 bajtů ).

Maximální adresa: FFFFh:FFFFh ( FFFFh × 16 + FFFFh) = 10FFEFh =  1114095 B = 100000h + 10000h - 11h = Mi B + 64  Ci B - 17 B ).

Popsaný způsob výpočtu fyzické adresy umožňuje adresovat ( 1 MiB + 64 KiB - 17 B + 1 B ) paměť (rozsah adres 0000h ... 10FFEFh ); 1 bajt je přidán na účet za bajt na adrese nula. Procesory 8086 / 8088 však mají pouze 20 adresních řádků (kovových stop), takže dostupná velikost paměti je 2 20 B = 1 MiB (rozsah adres 0000h ... FFFFFh ) a adresování vyšší (v rozsahu 100 000h ... 10FFEFh ) způsobí přetečení (" twist") - nejvýznamnější bit adresy je ignorován a v počátečních adresách je zpřístupněno 64 KiB ( 0000h ... FFEFh ).

Procesory 80286 mají 24bitovou adresovou sběrnici ( lze adresovat 2 24  B = 16 MiB paměti), takže nedochází k přetečení („přetečení“).

Počítače IBM PC / AT jsou postaveny na procesoru Intel 80286 a pro zachování kompatibility s počítači IBM PC a IBM PC / XT (postaveny na Intel 808x) jsou vybaveny logickým prvkem ( bránou ), který řídí činnost 21. adresního řádku (drát) (označené "A20") a pojmenované "Gate A20". Tento logický prvek je ve výchozím nastavení vypnutý (odpovídá režimu kompatibility) a ovládá se pomocí řadiče klávesnice (obvykle pomocí čipu Intel 8042 ).

Použití

Po zapnutí počítače nebo po resetování procesoru se procesor x86 spustí v reálném režimu. Tento režim spustí provádění kódu BIOS počítače kompatibilního s IBM-PC . V reálném režimu lze provést inicializaci některého hardwaru (například inicializaci řadiče RAM čipové sady ), nutného pro chod programů po přepnutí procesoru do chráněného režimu . Pokud je velikost kódu a dat programu, který provádí inicializaci hardwaru, malá, lze tento program spustit v reálném režimu. Takže například DOS pracuje v reálném režimu a nesnaží se uvést procesor do chráněného režimu. Dřívější verze Microsoft Windows mohly běžet pouze v reálném režimu. Dokonce i Windows 3.0, mezi třemi provozními režimy, umožňoval běh v reálném režimu a mohl být provozován na procesoru 8086.

Procesory 80286 a novější, když pracují v reálném režimu, mají obecně stejná omezení adresního prostoru jako procesory 8086. Programy navržené pro reálný režim vyžadují speciální softwarové nástroje pro využití větší paměti. Na strojích s procesory 80286 a novějšími můžete například použít ovladače jako HIMEM.SYS . Existují také zařízení, která poskytuje nezdokumentovaný příkaz LOADALL (který však přináší řadu potíží). Procesory 80386 a novější zavedly funkci nezdokumentovanou společností Intel, která umožňuje přepnout procesor do režimu neformálně nazývaného „ neskutečný “ režim. Při běhu v neskutečném režimu může program, i když s určitými omezeními, používat 32bitový fyzický adresní prostor ( 2 32  B = 4 GiB ).

Přestože Intel nepočítal s možností přepnutí procesoru 80286 z chráněného režimu do reálného režimu, počítač IBM PC/AT tuto možnost má díky hardwarovým funkcím a podpoře ze strany BIOSu . IBM PC/AT umožňuje programům posílat resetovací signál do procesoru. Kód BIOSu dokáže rozlišit mezi příčinami/režimy restartu prozkoumáním obsahu umístění trvalé paměti CMOS na adrese 0Fh a umístění paměti RAM na adrese 40h:72h . Jakýkoli program zapsáním vhodných hodnot do pojmenovaných paměťových buněk a poskytnutím signálu resetování procesoru může přinutit procesor k restartu; po restartu začne procesor spouštět kód BIOS; kód BIOSu načte hodnoty z výše uvedených paměťových buněk, neprovede počáteční načtení, nezmění obsah RAM (v RAM zůstanou stejná data jako před restartem procesoru) a přenese ovládání na kód umístěný v RAM na adrese zapsané do buňky RAM s adresou 40h:67h . Program tedy může opakovaně přepínat mezi chráněným a reálným režimem, i když tato metoda vyžaduje poměrně velké časové náklady na každé přepnutí.

Možnost „normálního“ (bez triků) softwarového přechodu z chráněného režimu do reálného režimu poskytoval Intel pouze u procesorů 80386 a novějších modelů. V 80386 má však velkou hodnotu další nová funkce – virtuální režim 8086 (V86, VM86). V režimu V86 mohou programy používat starý (segmentový) způsob adresování paměti procesoru 8086; v tomto případě bude procesor v chráněném režimu a fyzická (lineární) adresa vypočítaná podle pravidel 8086 bude stránkovat. Díky režimu V86 bylo možné vytvářet virtuální stroje . Operační systém může omezit přístup k určité oblasti paměti (viz ochrana paměti ) pro každý virtuální stroj, může jim alokovat virtuální paměť namísto skutečné (fyzické) a může řídit přístup k I/O portům . Výše uvedené se používá k organizaci práce operačního systému DOS pod kontrolou multitaskingových operačních systémů , jako je OS / 2 a Microsoft Windows. Současně je pro každý virtuální stroj DOS k dispozici pouze 1 MiB adresního prostoru a současně může být spuštěno několik virtuálních strojů DOS.

Struktura adresního prostoru

Adresový prostor počítače kompatibilního s IBM-PC v reálném režimu je rozdělen do čtyř částí:

Paměťová oblast zvaná " hlavní " ( anglicky  konvenční paměť ) se používá k uložení tabulky vektorů přerušení a různých dat BIOSu , umístěná v RAM začínající na adrese 0000h:0000h , zabírá 640 kB a může být použita 16bitovými programy pro DOS .

Paměťová oblast zvaná "upper" nebo " horní " ( anglicky  upper memory area , UMA ), zabírá 384 kB , slouží k ukládání informací o hardwaru počítače , je podmíněně rozdělena do tří oblastí po 128 kiB . První oblast se používá k ukládání video paměti . Adaptéry systému BIOS jsou k dispozici prostřednictvím druhé oblasti . Třetí oblast využívá kód BIOSu, ale obvykle ne úplně (obvykle zbývá 64 kB ). Zbytek adresového prostoru z horní oblasti pomocí speciálních ovladačů (například EMM386.EXE , EMS.EXE, LIMEMS.EXE atd.) a / nebo rozšiřujících zařízení lze použít pro přístup k rozšířené paměti podle jejího specifikace ( eng specifikace  ) EMS,expandované paměti

Paměťová oblast zvaná " vysoká " ( anglicky  high memory area , HMA ) se nachází bezprostředně za prvním mebibajtem a zabírá 64 kB mínus 16 bajtů . Jeho vzhled je dán vlastností procesoru 80286 , který má 24 adresních řádků a při přístupu k adresám nad FFFFh: 000Fh jde přístup na druhý mebibajt paměti (místo na začátek prvního mebibajtu, jako v 8086 / 8088 ). Je to podmnožina "přídavné" (anglicky rozšířené) paměti.

Paměťová oblast nazvaná " další " (eng. rozšířená ) je dostupná pro 16bitové programy podle její specifikace ( eng.  e x tended memory specification , XMS ), začíná od adres umístěných nad prvním mebibytem a má velikost závislou na velikost instalované paměti RAM počítače.

Záměna názvu

Viz také