Nulová stránka - Zero page
![]() | tento článek potřebuje další citace pro ověření.Říjen 2011) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
The nulová stránka nebo základní stránka je blok paměti na samém začátku a počítač je adresní prostor; toto je strana jehož počáteční adresa je nula. Velikost stránky závisí na kontextu a význam paměti nulové stránky ve srovnání s vyšší adresovanou pamětí velmi závisí na architektuře stroje. Například Motorola 6800 a Technologie MOS 6502 rodiny procesorů zpracovávají prvních 256 bajtů z Paměť speciálně,[1] zatímco mnoho jiných procesorů ne.
Na rozdíl od modernějšího hardwaru v 70. letech počítač RAM byl stejně rychlý nebo rychlejší než CPU. Dávalo tedy smysl mít několik registrů a používat hlavní paměť jako rozšířený soubor dalších registrů. U strojů s relativně širokým 16-bit adresní sběrnice a poměrně úzký 8-bit datová sběrnice, přístup k nulovým umístěním stránek může být rychlejší než přístup k jiným umístěním.
Nulové adresování stránek má nyní většinou historický význam, od vývoje v integrovaný obvod technologie přidali více registrů k CPU levněji a operace CPU mnohem rychleji, než přistupuje RAM.
Velikost
Skutečná velikost nulové stránky v bajtech je určena mikroprocesor a ve starších vzorech se často rovná největší hodnotě, na kterou lze odkazovat pomocí indexovacích registrů procesoru. Například výše uvedené 8bitové procesory mají 8bitové rejstříky indexů a velikost stránky 256 bajtů. Proto jejich nulová stránka sahá od adresy 0 do adresy 255.
Počítače s několika registry CPU
V raných počítačích, včetně PDP-8, nulová stránka měla zvláštní rychle režim adresování, což usnadnilo jeho dočasné použití ukládání dat a kompenzoval relativní nedostatek procesor registry. PDP-8 měl pouze jeden registr, takže nulové adresování stránky bylo nezbytné.
Na rozdíl od modernějšího hardwaru v 70. letech počítač RAM byl stejně rychlý nebo rychlejší než CPU. Dávalo tedy smysl mít několik registrů a používat hlavní paměť jako rozšířený soubor dalších registrů. U strojů s relativně širokým 16-bit adresní sběrnice a poměrně úzký 8-bit datová sběrnice, přístup k nulovým umístěním stránek může být rychlejší než přístup k jiným umístěním. Vzhledem k tomu, že nulové umístění stránek bylo možné řešit jediným byte, pokyny pro přístup k nim by mohly být menší a rychlejší načítání.
Například MOS Technology 6502 má pouze jeden univerzální registr (akumulátor). Ve výsledku značně využívalo nulovou stránku. Mnoho instrukce jsou kódovány odlišně pro nulovou adresu stránky a nenulovou adresu stránky:
LDA $00 ; nulová stránka LDA $0000 ; nenulová stránka
Oba výše uvedené pokyny splňují totéž: načtou hodnotu umístění paměti $ 00 do registru .A (akumulátor). První instrukce je však pouze dva bajty dlouhá a k dokončení vyžaduje tři hodinové cykly. Druhá instrukce má délku tři bajty a její provedení vyžaduje čtyři hodinové cykly. Tento rozdíl v době provádění se může stát významný v opakujícím se kódu.
Nulové ukazatele
Na rozdíl od původního preferenčního použití nulové stránky, některé moderní operační systémy jako např FreeBSD, Linux a Microsoft Windows[2] ve skutečnosti znepřístupní nulovou stránku pro zachycení použití nulové ukazatele. Takové hodnoty ukazatele mohou legitimně označovat neinicializované hodnoty nebo sentinelové uzly, ale neukazují na platné objekty. Buggy kód se může pokusit o přístup k objektu pomocí nulového ukazatele a to může být zachyceno na úrovni operačního systému jako paměť narušení přístupu.
Přerušovací vektory
Některé počítačové architektury však začátek adresního prostoru stále rezervují pro jiné účely; například, Intel x86 systémy rezervují prvních 256 dvojitých slov adresního prostoru pro vektorová tabulka přerušení (IVT), pokud narazí skutečný režim.
Podobná technika použití nulové stránky pro vektory související s hardwarem byla použita v architektuře ARM. Ve špatně napsaných programech by to mohlo vést k chování „ofla“, kdy se program pokusí číst informace z oblasti nezamýšlené paměti a zachází se spustitelným kódem jako s daty nebo naopak. To je obzvláště problematické, pokud se oblast nulové stránky používá k ukládání vektorů skoků systému a firmware je podveden k jejich přepsání.[3]
CP / M
V 8bitové CP / M, nulová stránka se používá pro komunikaci mezi spuštěným programem a operačním systémem.
Adresování stránky
V některých procesorových architekturách, jako je tomu v Intel 4004 4-bitový procesor, paměť byla rozdělena na (256 bajtů) stránek a bylo nutné provést zvláštní opatření, když regulační tok přešel hranice stránky, Jako některé pokyny ke stroji vykazovaly odlišné chování, pokud se nacházejí v posledních několika pokynech stránky, takže mezi skoky se doporučovalo jen několik pokynů.[4]
Viz také
- Nedostatek paměti - prvních 64 kB paměti (segment 0) v systému DOS
- Přesunutí hranice stránky
Reference
- ^ Sjödin, Tomáš; Jonsson, Johan (2006). Studentské práce v počítačové architektuře (PDF). Umeå, Švédsko. str. 29. Citováno 2019-08-21.
- ^ „Správa virtuální paměti“. Microsoft. 2014-12-05. Citováno 2014-12-05.
- ^ „ARM„ bezpečnostní díra “je často bratranec“. drobe.co.uk. 2007-04-24. Citováno 2008-10-22.
- ^ „4.1 Překročení hranic stránky“. Příručka k programovacímu jazyku MCS-4 - Příručka k programování mikropočítačového systému INTELLEC 4 (PDF) (Předběžné vydání.). Santa Clara, Kalifornie, USA: Intel Corporation. Prosinec 1973. str. 2-4, 2-14, 3-41, 4-1. MCS-030-1273-1. Archivováno (PDF) od původního dne 2020-03-01. Citováno 2020-03-02.
[…] Určité pokyny fungují jinak, když jsou umístěny v posledním bajtu (nebo bajtech) stránky, než když jsou umístěny jinde. […] Dvě adresy jsou na stejné stránce, jsou-li hexadecimální číslice jejich adres stejné. […] Pokud je instrukce JIN umístěna na posledním místě stránky v paměti, jsou nejvyšší 4 bity programového čítače zvýšeny o jednu, což způsobí přenesení řízení do odpovídajícího umístění na další stránce. […] Pokud […] byl JIN umístěn na adrese 255 desítkově (0FF hexadecimai), kontrola by byla přenesena na adresu 115 hexadecimálně, ne 015 hexadecimálně. Toto je nebezpečná programovací praxe a je třeba se jí vyhnout, kdykoli je to možné. […] Programy jsou uloženy buď v paměti ROM, nebo v paměti RAM programu, oba jsou rozděleny na stránky. Každá stránka se skládá z 256 8bitových umístění. Adresy 0 až 255 zahrnují první stránku, 256-511 tvoří druhou stránku atd. Obecně je dobrým programovacím postupem nikdy nedovolit, aby tok programu překročil hranici stránky, kromě použití instrukce JUN nebo JMS. […]
Další čtení
- Bray, Andrew C .; Dickens, Adrian C .; Holmes, Mark A. (1983). Podrobná uživatelská příručka pro mikropočítač BBC (3. vyd.). Cambridge mikropočítačové centrum. ISBN 0-946827-00-1.
- Roth, Richard L. (únor 1978) [1977]. „Přemístění není jen přesun programů“. Dr. Dobb. Sv. 3 č. 2. Ridgefield, CA, USA: Lidová počítačová společnost. str. 14–20 (70–76). ISBN 0-8104-5490-4. #22. Archivováno od originálu na 2019-04-20. Citováno 2019-04-19.
- "1. Úvod: Zarovnání segmentu". 8086 Family Utilities - Uživatelská příručka pro vývojové systémy založené na 8080/8085 (PDF). Revize E (A620 / 5821 6K DD ed.). Santa Clara, Kalifornie, USA: Intel Corporation. Květen 1982 [1980, 1978]. str. 1-6. Objednací číslo: 9800639-04. Archivováno (PDF) z původního dne 2020-02-29. Citováno 2020-02-29.