Segmentace paměti - Memory segmentation

Segmentace paměti je systém provozní správa paměti Technika rozdělení na počítači to primární paměti do segmentů nebo sekcí . V počítačovém systému využívajícím segmentaci obsahuje odkaz na paměťové místo hodnotu, která identifikuje segment a offset (umístění v paměti) v rámci tohoto segmentu. Segmenty nebo sekce se také používají v objektových souborech kompilovaných programů, když jsou propojeny dohromady do obrazu programu a když je obrázek načten do paměti.

Segmenty obvykle odpovídají přirozeným divizím programu, jako jsou jednotlivé rutiny nebo datové tabulky, takže segmentace je pro programátora obecně viditelnější než samotné stránkování . Mohou být vytvořeny různé segmenty pro různé programové moduly nebo pro různé třídy využití paměti, jako jsou kódové a datové segmenty . Některé segmenty mohou být sdíleny mezi programy.

Segmentace byla původně vynalezena jako metoda, pomocí níž systémový software mohl izolovat různé softwarové procesy ( úkoly ) a data, která používají. Cílem bylo zvýšit spolehlivost systémů běžících více procesů současně. V architektuře x86-64 je považován za starší a většina moderního systémového softwaru na bázi x86-64 nepoužívá segmentaci paměti. Místo toho zpracovávají programy a svá data pomocí stránkování paměti, které také slouží jako způsob ochrany paměti. Většina implementací x86-64 to však stále podporuje z důvodu zpětné kompatibility.

Hardwarová implementace

V systému využívajícím segmentaci se adresy paměti počítače skládají z ID segmentu a ofsetu v rámci segmentu. Jednotka správy paměti hardwaru (MMU) je zodpovědná za překlad segmentu a ofsetu na fyzickou adresu a za provádění kontrol, aby bylo zajištěno, že lze provést překlad a že je povolen odkaz na tento segment a offset.

Ke každému segmentu je přiřazena délka a sada oprávnění (například čtení , zápis , spouštění ). Proces je povoleno pouze, aby se odkaz na segmentu v případě, že typ odkazu je umožněno oprávnění, a v případě, že posun v segmentu je v rozmezí stanoveném podle délky segmentu. Jinak je vyvolána hardwarová výjimka , například chyba segmentace .

K implementaci virtuální paměti lze také použít segmenty . V tomto případě má každý segment přidružený příznak udávající, zda je přítomen v hlavní paměti nebo ne. Pokud je přistupováno k segmentu, který není přítomen v hlavní paměti, vyvolá se výjimka a operační systém načte segment do paměti ze sekundárního úložiště.

Segmentace je jednou z metod implementace ochrany paměti . Stránkování je další a lze je kombinovat. Velikost paměťového segmentu obecně není pevná a může být malá jako jeden bajt .

Segmentace byla implementována několika různými způsoby na různý hardware, se stránkováním nebo bez něj. Segmentace paměti Intel x86 se nehodí pro žádný model a je popsána 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é indikují, kde se segment nachází v paměti - základna segmentu . Když program odkazuje na umístění v paměti, ofset se přidá do základny 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 se celé segmenty vyměňovaly tam a zpět mezi hlavní pamětí a sekundárním úložištěm. Při výměně segmentu musí operační systém přidělit dostatek souvislé volné paměti pro uložení celého segmentu. Pokud není dostatek souvislé paměti, často dochází k fragmentaci paměti, přestože jich může být celkem dost.

Segmentace se stránkováním

Místo skutečného umístění paměti informace o segmentu obsahují adresu tabulky stránek pro segment. Když program odkazuje na paměťové místo, je offset přeložen na paměťovou adresu pomocí tabulky stránek. Segment lze rozšířit jednoduše přidělením další paměťové stránky a jejím přidáním do tabulky stránek segmentu.

Implementace virtuální paměti v systému pomocí segmentace se 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 mohou být umístěny kdekoli v hlavní paměti a nemusí na sebe navazovat. To obvykle vede ke snížení množství vstupu/výstupu mezi primárním a sekundárním úložištěm a snížení fragmentace paměti.

Dějiny

Počítač Burroughs Corporation B5000 byl jedním z prvních, který implementoval segmentaci, a „možná první komerční počítač poskytující virtuální paměť“ na základě segmentace. Pozdější počítač B6500 také implementoval segmentaci; verze jeho architektury se dodnes používá na serverech Unisys ClearPath Libra.

Počítač GE-645 , modifikace GE-635 s přidanou podporou segmentace a stránkování, byl navržen v roce 1964 na podporu Multics .

Intel iAPX 432 , začala v roce 1975, se pokusil realizovat skutečnou segmentovaný architekturu s ochranou paměti v mikroprocesoru.

Verze 960MX procesorů Intel i960 podporovala pokyny pro načítání a ukládání, přičemž zdroj nebo cíl byl „popisovač přístupu“ k objektu a odsazení do objektu, přičemž popisovač přístupu byl ve 32bitovém registru a s odsazením počítáno ze základního offsetu v dalším registru a z dodatečného offsetu a volitelně z indexového registru uvedeného v instrukci. Popisovač přístupu obsahuje bity oprávnění a index 26bitového objektu; index objektů je index do tabulky deskriptorů objektu, který udává 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.

Počítače Prime , Stratus , Apollo , IBM System/38 a IBM AS/400 (včetně IBM i ) používají segmentaci paměti.

architektura x86

Segmentace paměti používaná staršími procesory x86 , počínaje Intel 8086 , neposkytuje žádnou ochranu. Jakýkoli program běžící na těchto procesorech má přístup k jakémukoli segmentu bez omezení. Segment je identifikován pouze podle počátečního umístění; neexistuje žádná kontrola délky. Zrnitost počáteční adresy segmentu je 16 bytů a offset je 16 bitů, podporující velikosti segmentů až 64 KiB, takže segmenty se mohou (a často dělají) překrývat a každou fyzickou adresu lze označit 4096 různými páry segment -offset (což umožňuje adresu ofsetový zábal).

Segmentace v procesorech Intel 80286 a novějších poskytuje ochranu: se zavedením 80286 společnost Intel zpětně pojmenovala jediný provozní režim předchozích modelů CPU x86 „ skutečný režim “ a zavedla nový „ chráněný režim “ s ochrannými funkcemi. Kvůli zpětné kompatibilitě začínají všechny procesory x86 v „reálném režimu“ bez ochrany paměti, pevných 64 KiB segmentů a pouze 20bitového (1024 KiB) adresování. Aby bylo možné využívat celý adresní prostor a pokročilé funkce MMU, musí být procesor 80286 nebo novější softwarově přepnut do jiného režimu.

Intel 80386 a pozdnější procesory podporují také paging; v těchto procesorech tabulka segmentů, místo aby ukazovala na tabulku stránek pro segment, obsahuje adresu segmentu v lineární paměti . Adresy v lineární paměti jsou pak mapovány na fyzické adresy pomocí samostatné tabulky stránek, pokud je povoleno stránkování.

Architektura x86-64 nepoužívá segmentaci v dlouhém režimu (64bitový režim). V architektuře x86-64 je považován za starší a většina moderního systémového softwaru na bázi x86-64 nepoužívá segmentaci paměti. Místo toho zpracovávají programy a svá data pomocí stránkování paměti, které také slouží jako způsob ochrany paměti. Ačkoli většina implementací x86-64 to stále podporuje z důvodu zpětné kompatibility. Čtyři ze segmentových registrů: CS, SS, DS a ES jsou nuceny na 0 a limit na 2 64 . Segmentové registry 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é

Reference

externí odkazy