Segmentace paměti - Memory segmentation
![]() | Tento článek obsahuje seznam obecných Reference, ale zůstává z velké části neověřený, protože postrádá dostatečné odpovídající vložené citace.Ledna 2011) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
Segmentace paměti je počítač (hlavní ) správa paměti technika dělení a počítač primární paměť do segmenty nebo sekce. V počítačový systém pomocí segmentace zahrnuje odkaz na paměťové místo hodnotu, která identifikuje segment a offset (umístění paměti) v tomto segmentu. Segmenty nebo sekce se také používají v soubory objektů zkompilovaných programů, pokud jsou propojeno společně do a obrázek programu a když je obrázek načten do paměti.
Segmenty obvykle odpovídají přirozenému rozdělení programu, jako jsou jednotlivé rutiny nebo datové tabulky[1] takže segmentace je pro programátora obecně viditelnější než stránkování sama.[2]Pro jiný program mohou být vytvořeny různé segmenty moduly, nebo pro různé třídy využití paměti, jako je kód a datové segmenty.[3] Některé segmenty mohou být sdíleny mezi programy.[1][2]
Segmentace byla původně vynalezena jako metoda, kterou systémový software mohl izolovat jiný software procesy (úkoly ) a data, která používají. Jeho cílem bylo zvýšit spolehlivost systémů provozujících více procesů současně.[4] V architektura x86-64 považuje se za starší verzi a většina moderního systémového softwaru založeného na x86-64 nepoužívá segmentaci paměti. Místo toho zpracovávají programy a jejich data využitím stránkování paměti který také slouží jako způsob ochrany paměti. Většina implementací x86-64 jej však stále podporuje z důvodu zpětné kompatibility.[4]
Hardwarová implementace
V systému používajícím segmentaci se adresy paměti počítače skládají z id segmentu a offsetu v segmentu.[3]Hardware jednotka správy paměti (MMU) odpovídá za převod segmentu a posunutí do a fyzická adresa a pro provádění kontrol, aby bylo zajištěno, že lze provést překlad a zda je povolen odkaz na tento segment a posun.
Každý segment má délku a sadu oprávnění (například číst, psát si, vykonat) s ním spojené.[3] A proces je povoleno vytvořit odkaz na segment, pouze pokud je typ odkazu povolen oprávněními a pokud je posun v rámci segmentu v rozsahu určeném délkou segmentu. Jinak a hardwarová výjimka jako a Porucha Segmentace je zvednutý.
K implementaci lze také použít segmenty virtuální paměť V tomto případě má každý segment přidružený příznak označující, zda je přítomen v hlavní paměti nebo ne. Pokud je přístupný segment, který není přítomen v hlavní paměti, vyvolá se výjimka a operační systém přečte segment do paměti ze sekundárního úložiště.
Segmentace je jednou z metod implementace ochrana paměti.[5] Stránkování je další a lze je kombinovat. Velikost segmentu paměti obecně není pevná a může být malá jako jediná byte.[6]
Segmentace byla implementována několika různými způsoby na jiném hardwaru, s stránkováním nebo bez něj. Intel x86 segmentace paměti nezapadá do žádného modelu a je popsán samostatně níže a také podrobněji v samostatném článku.
Segmentace bez stránkování
S každým segmentem jsou spojeny informace, které označují, kde je segment umístěn v paměti - segmentová základna. Když program odkazuje na umístění v paměti, offset se přidá k základně segmentu, aby se vygenerovala adresa fyzické paměti.
Implementace virtuální paměti v systému pomocí segmentace bez stránkování vyžaduje, aby byly mezi hlavní pamětí a sekundárním úložištěm vyměňovány celé segmenty tam a zpět. Když je segment zaměněn, operační systém musí přidělit dostatek souvislé volné paměti pro uložení celého segmentu. Často fragmentace paměti výsledky, pokud není dostatek souvislé paměti, i když jich může být celkem.
Segmentace s stránkováním
Místo skutečného umístění v paměti obsahuje informace o segmentu adresu a tabulka stránek Když program odkazuje na místo v paměti, je offset přeložen na adresu paměti pomocí tabulky stránek. Segment lze jednoduše rozšířit přidělením jiné stránky paměti a přidáním do tabulky stránek segmentu.
Implementace virtuální paměť v systému používajícím segmentaci s stránkováním obvykle přesouvá jednotlivé stránky tam a zpět mezi hlavní pamětí a sekundárním úložištěm, podobně jako stránkovaný nesegmentovaný systém. Stránky segmentu lze umístit kdekoli v hlavní paměti a nemusí být souvislé. To obvykle vede ke sníženému množství vstupu / výstupu mezi primárním a sekundárním úložištěm a snížené fragmentaci paměti.
Dějiny
The Burroughs Corporation B5000 počítač byl jedním z prvních, kdo implementoval segmentaci, a „možná první komerční počítač poskytující virtuální paměť“[7] na základě segmentace. Později B6500 počítač také implementoval segmentaci; verze jeho architektury se dodnes používá na serverech Unisys ClearPath Libra.
The GE-645 počítač, modifikace GE-635 s přidanou podporou segmentace a stránkování, byla navržena v roce 1964 na podporu Multics.
The Intel iAPX 432,[8] započatý v roce 1975, pokus o implementaci skutečné segmentované architektury s ochranou paměti na mikroprocesoru.
Verze 960MX Intel i960 procesory podporovaly pokyny pro načítání a ukládání, přičemž zdrojem nebo cílem je „deskriptor přístupu“ pro objekt a offset do objektu, přičemž deskriptor přístupu je v 32bitovém registru a offset je počítán ze základního offsetu v další registr az dalšího posunutí a volitelně indexový registr uvedený v instrukci. Deskriptor přístupu obsahuje bity oprávnění a 26bitový index objektu; index objektu je index do tabulky deskriptorů objektů, udávající typ objektu, délku objektu a fyzickou adresu pro data objektu, tabulku stránek pro objekt nebo tabulku stránek nejvyšší úrovně pro dvouúrovňový tabulka stránek pro objekt, v závislosti na typu objektu.[9]
primární, Oblak, Apollo, Systém IBM / 38, a IBM AS / 400 počítače používají segmentaci paměti.
architektura x86
Segmentace paměti používaná brzy x86 procesory, počínaje Intel 8086, neposkytuje žádnou ochranu. Jakýkoli program spuštěný na těchto procesorech má přístup k jakémukoli segmentu bez omezení. Segment je identifikován pouze podle jeho počátečního umístění; neexistuje kontrola délky. Granularita počáteční adresy segmentu je 16 bajtů a offset je 16 bitů, což podporuje velikosti segmentů až 64 KiB, takže segmenty se mohou (a často i) překrývají a každou fyzickou adresu lze označit 4096 různými páry segment-offset (umožňující adresu offset ovinutí).
Segmentace v Intel 80286 a novější poskytuje ochranu: se zavedením 80286 společnost Intel zpětně pojmenovala jediný provozní režim předchozích modelů procesorů x86 "skutečný režim „a představil nový“chráněný režim "s ochrannými funkcemi. Z důvodu zpětné kompatibility začínají všechny procesory x86 v" reálném režimu "bez ochrany paměti, s pevnými 64 segmenty KiB a pouze s 20bitovým (1024 KiB) adresováním. Procesor 80286 nebo novější musí být přepnut do jiného režimu pomocí softwaru, aby bylo možné využívat celý jeho adresní prostor a pokročilé funkce MMU.
The Intel 80386 a novější procesory také podporují stránkování; v těchto procesorech obsahuje tabulka segmentů namísto ukazování na tabulku stránek pro segment adresu adresy v lineární paměť. Adresy v lineární paměti se poté mapují na fyzické adresy pomocí samostatné tabulky stránek, pokud je povoleno stránkování.
The x86-64 architektura nepoužívá segmentaci v dlouhém režimu (64bitový režim).[10] V architektura x86-64 považuje se za starší verzi a většina moderního systémového softwaru založeného na x86-64 nepoužívá segmentaci paměti. Místo toho zpracovávají programy a jejich data využitím stránkování paměti který také slouží jako způsob ochrany paměti. Ačkoli většina implementací x86-64 jej stále podporuje z důvodu zpětné kompatibility.[4] Čtyři ze segmentových registrů: CS, SS, DS a ES jsou vynuceny na 0 a limit na 264. Registry segmentů FS a GS mohou mít stále nenulovou základní adresu. To umožňuje operačním systémům používat tyto segmenty pro speciální účely.
Viz také
- Správa paměti (operační systémy)
- Virtuální adresní prostor
- Virtuální paměť
- Datový segment
- Segment BSS
- x86 segmentace paměti
- Porucha Segmentace
- Plochý paměťový model
Reference
- ^ A b Holt, A. W. (1961). "Organizace programu a vedení záznamů pro dynamické přidělování úložiště". Komunikace ACM.
- ^ A b Englander, Irv (2003). Architektura počítačového hardwaru a systémového softwaru (3. vyd.). Wiley. ISBN 0-471-07325-3.
- ^ A b C Glaser, E. L .; Couleur, J. F .; Oliver, G. A. (1965). Návrh systému počítače pro aplikace sdílení času. 1965 Fall Joint Computer Conference.
- ^ A b C "1.2 Správa paměti". Technologie AMD64 Příručka programátora architektury AMD64, svazek 2: Programování systému (PDF). 2. Pokročilá mikro zařízení. 2018. str. 5.
- ^ Arpaci-Dusseau, Remzi H .; Arpaci-Dusseau, Andrea C. (2014). "Segmentace" (PDF). Operační systémy: Tři snadné kousky. Knihy Arpaci-Dusseau.
- ^ Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 3 (3A, 3B & 3C): System Programming Guide (PDF). Intel Corporation. 2012. s. 3–13.
- ^ Mayer, Alastair J.W. „The Architecture of the Burroughs B5000 - 20 Years Later and Still Ahead of the Times?“. Citováno 15. března 2012.
- ^ Úvod do architektury IAPX 432 (PDF). Intel Corporation. 1981. str. 78.
- ^ Referenční příručka architektury CPU BiiN (PDF). BiiN. Červenec 1998.
- ^ Technologie AMD64 Příručka programátora architektury AMD64, svazek 2: Programování systému (PDF). 2. Pokročilá mikro zařízení. 2018.
externí odkazy
- Příručka pro vývojáře softwaru IA-32 Intel Architecture Software, díl 3A: Průvodce programováním systému. http://www.intel.com/products/processor/manuals/index.htm.
- Operační systémy: Interní prvky a principy návrhu od Williama Stallingsa. Vydavatel: Prentice Hall. ISBN 0-13-147954-7. ISBN 978-0-13-147954-8.