Vnitřní a vnější paměti Část: vnitřní paměti Cíl kapitoly Tato kapitola navazuje na kapitolu stejného jména, která se zabývá základními rysy zejména vnějších pamětí. Cílem této kapitoly je porozumět a umět využívat vnitřní paměti počítače včetně nástinu i historie pamětí.
Klíčové pojmy: AB, adresová sběrnice, BIOS, Cache, CMOS, deskriptor table, EMS, frame, fyzická adresa, GDT, granularita, index, instruction pointer (IP), konvenční paměť, LDT, lineární adresa, logická adresa, OP. operační paměť, protected mode, real mode, ROM, segment selektor, stránka, swap, task state segment, virtuální adresa, virtuální paměť, XMS
Úvod Vnitřní paměti počítače jsou paměti, které přímo využívá procesor ke své činnosti. Nejdůležitější z nich je operační paměť,kterou se budeme převážně zabývat, dále paměť s uloženým BIOSem – nazývaná ROM nebo ROM-BIOS a pamsť s uloženou konfigurací počítače nazývaná podle technologie CMOS. Paměti, které jsou součástí procesorů nebo jednotlivých periferií se v této kapitole zabývat nebudeme, vyjma vyrovnávací paměti CACHE.
Operační paměť Operační paměť je polovodičová paměť typu RAM (Random Access Memory), a proto se také nesprávně nazývá jako paměť RAM. Velikost možné operační paměti (dále jen OP) je dána typem procesoru a operačním systémem- U procesorů I8086 , které měly jen 20bitovou adresovou sběrnici (dále AB – address bus) byla maximální paměť 1MB (možnost adresovat paměť velikosti 220 ). Z této paměti byla pro programy, spolupráci s diskovými pamětmi, pro přerušení apod. k dispozici část paměti o velikosti 640kB – která se nazývala konvenční paměť. U procesorů odpovídajícím I80286 byla sběrnice AB rozšířena na 24 bitů, a tedy maximální paměť mohla být 224B = 16MB. U dnešních procesorů, pokud se používají ještě operační systémy obdobné DOSu (resp. založené na DOSu), stále je důležitá oblast konvenční paměti. U procesorů I80386 a vyšších je AB velikosti 32b a tedy max OP je 4GB. Pozdější procesory pentium mohly mít paměť 2x4GB. U 64 bitových procesorů je paměť dána aktivní části AB, která je většinou 40b, 48b. V budoucnu se počítá se šířkou sběrnice 64 bitů. Podle způsobu adresování rozlišujeme paměti
Expanded –EMS - to je paměťový prostor nad 1MB, který nelze přímo adresovat z AB
Extended – XMS - paměťový prostor nad 1MB, který lze přímo adresovat z AB, to znamená, že AB je dostatečně široký.
Dnešní procesory se spouští v režimu – real mode – reálný režim – to je jako základní procesor I8086, a tedy při spouštění je zapotřebí paměť jen velikosti 1MB. Teprve OS (operační systém) přepíná procesor do pracovního módu - obvykle protected mode – chráněného režimu.
Rozdělení operační paměti Pro činnost počítače je důležitý OS, který musí být natažen v OP. Tento OS zabírá v operační paměti několik MB, a to většinou nejvyšších adres. Mimo OS musí OP obsahovat tabulku vektorů přerušení, stack (pro každý spuštěný program zvlášť) , disk buffers pro komunikaci jednotlivých programů s disky,
prostor pro CMOS paměť, BIOS, stínové paměti (opis pomalých pamětí jako je BIOS do 32b verze, aby program běžel rychleji) atd.
Adresování operační paměti Adresování v real mode Jak již bylo uvedeno, real mode je používán při startu procesoru tj. v POSTu. Adresová sběrnice má v tomto režimu šířku 20ti bitů, používané registry jsou 16ti bitové. Proto je nutné vypočítat fyzickou adresu zasílanou po sběrnici. Vstupem k výpočtu je tzv. viruální neboli logická adresa. Tato adresa se sestává z segmentové části (obsažená v segmentových registrech procesoru (CS, SS, DS nebo ES) a v registru Instruction pointer (IP). Obsah IP je prakticky záležitostí programátora (po překladech a linkování), kdežto o segmenty se stará procesor s operačním systémem. Operační paměť musí být dělena na menší části, aby bylo možné v různých situacích nahrávat program (data) do rozdílných částí paměti. Vzhledem k 16ti bitovému IP v tomto režimu, ve kterém se nachází offset v rámci segmentu, může být velikost segmentu maximálně 216B, tj. 64kiB (64kB informatických). V segmentovém registru je uloženo číslo segmentu. Pak výstupní neboli fyzická adresa se vypočítá (zjednodušeně, neboť adresa může mít více komponent) podle následujícího schématu (zapsáno binárně) code segment
ssss ssss ssss ssss
code segment krát 16
ssss ssss ssss ssss 0000
IP (offset)
ffff
fyz. adresa
ffff
ffff
ffff
aaaa aaaa aaaa aaaa aaaa
Kde ssss – bity obsahu segmentového registru ffff - bity obsahu instuction pointru (offset) aaaa – bity vypočtené fyzické adresy (součet CSx16 + IP) Výsledná fyzická adresa se zasílá na adresovou sběrnici. Příklad: Obsah CS je 16A4H, IP je 4046H. Jaká je fyzická adresa?
16A40 + 4046 1AA86 Fyzická adresa je 1AA86H.
Adresování v protected mode Adresování protected modu probereme podrobněji pro I80386 a vyšší. Původně byl protected mod určen pro procesory 80286, kdy byla zvětšena operační paměť na 16MB a zejména kvůli umožnění multitaskingu. U multitaskingu, kdy procesor pracuje navíce úlohách jejich rychlým přepínáním, musí procesor zajistit izolovanost částí paměti určených pro jednotlivé úlohy, aby nedošlo k jejich promíchání. Proto tento režim se také nazývá protected mode neboli chráněný režim. Postup při adresování 64bitových procesorů probereme samostatně. Adresa v chráněném režimu, stejně jako v reálném, je složena ze dvou složek. Složka první odpovídající segmentovému registru je 16ti bitová, druhá složka vytvářející offset v rámci segmentu je 32bitová (u I80286 jen 16ti bitová). První složku nazýváme Segment Selector (stručně selector). Vstupní adresa, která je tedy složená ze selektoru a offsetu, se nazývá virtuální adresa. Selector je 16ti bitové slovo, které obsahuje 13 bitů pro index (možných 8192 kombinací indexu). Tento index určuje řádek v Descriptor Table - tabulce popisovačů lokálního nebo globálního prostoru. Zbývající 3 bity určují, zda se právě jedná o globální nebo lokální prostor (bit TI), a 2bity nazvané RPL určují úroveň oprávnění přístupu k danému segmentu. Tyto bity RPL tedy určují 4 úrovně přístupu k záznamům. Úrovení 0 je označen přístup k operačnímu systému, který řídí obvodové funkce mikroprocesoru a spravuje paměť. Některé instrukce - privilegované mohou pracovat pouze na této úrovni ochrany. Úroveň 1 obsahuje všechny rutiny pro správu systému pomocí OS. Úroveň 2 je určena pro zpracování knihoven, kartoték apod. Úrovní 3 jsou přístupny jen uživatelské programy. Globální prostor je prostor, ve kterém jsou obvykle programy nebo proměnné přístupné více uživatelům. Ochranná funkce tedy zaručuje oddělení systémového a uživatelského software, kontrolu typu dat a oddělení jednotlivých úloh.
Ochranné atributy jsou společné pro celý segment. Srovnání probíhá současně s překladem adresy. Lokální prostor je obvykle určen jen pro umísťování jedinečných dat. Globální tabulka deskriptorů GDT ukazující na globální prostor má stejně jako Lokální tabulka deskriptorů, která ukazuje na lokální prostor celkem 64kB, což je maximální velikost základního segmentu (velikost odvozených segmentů byl u pozdějších procesorů zvětšen na násobky, u pentia až 2GB). Virtuální neboli logická adresa má tedy 48 (32 u I286) bitů a je z ní vytvářena fyzická 32 (u I286 24) bitová adresa. Výpočet adres v tomto módu se nazývá segmentace v protected modu. Výstupem segmentace je vždy lineární adresa. Pokud po segmentaci nenásledují další výpočty adres (stránkování – bude probráno v následujícím paragrafu) je tato adresa fyzická adresa, tedy adresa, která je vysílána na adresovou sběrnici AB.
Segmentace VIRTUÁLNÍ (logická)ADRESA Selektor 15
TI RPL
Index
3210
REÁLNÁ PAMĚŤ OFFSET 31 (15)
0
GDT (LDT)
16MB
1023 ofset 32 (16) Index 13 32 (24)
32 ( 24) Lineární adresa
GDTR
(fyzická adresa) báze segmentu
Popis činnosti (obrázku) – údaje v závorkách platí pro I80286, nezávorkované jsou společné nebo pro procesory I80386 až po první pentia. Pro pentia vyšší generace je segmentování poněkud odlišné. Index v selektoru ukazuje na odpovídající řádek v LGT nebo GDT podle hodnoty bitu TI v selektoru. Každý řádek má 8B, z toho 4B (3B) určují bázi tj. počáteční adresu segmentu, v němž se nachází hledaná informace 3B (2B) určují limit, tj. skutečnou velikost segmentu. Před dalším výpočtem je nutné zkontrolovat offset, zda není větší než limit. V těchto případech by hledaná data byly v jiném segmentu a možná dokonce by patřila jiné úloze. 1B práva. Tato práva jsou určena RPL právy a také atributy souborů (read only, hiden, archivní atd) 0B (2B) rezerva (base 24-31 a AV seg lim) 31 29
27 25
23
base 24 ÷ 31
21
19
17
AV seg.lim
baze TABULKA DESKRIPTORŮ
15
13
p
DPL S
11
9 type
7
5
3
1 0
base 16÷23
limit GDT nebo LDT
Na řádku tabulky se vyhledá patřičný segment, v němž se informace nachází. Počáteční adresa tohoto segmentu je dána hodnotou BASE. Po kontrole zda offset není větší než limit se offset sečte s bází a vytvoří hledanou lineární – v našem případě i fyzickou adresu pro operační paměť. Na této adrese se nachází hledaná informace. Pokud kontrola limitu a offsetu nevyjde, zahlásí OS chybu s oznámením, že nastala chyba na adrese segment:offset.
Segmentace u pentia Vstupy pro segmentaci jsou shodné se všemi 32 bitovými procesory. Aby bylo možné vytvářet větší segmenty zavádí se tzv. granularita – zrnitost. Granularita znamená, že v tabulkách velikosti limitu. 8B řídku v tabulce deskriptorů vypadá následovně. Báze je opětně vyjádřena 32 bity, limit pouze 20 (16+4) bity. O velikosti segmentu rozhodují bity D/B – do 64kB nebo až do 4GB a bit G – granularita (buď po bajtech nebo po 4kB). Práva jsou rozšířena o další 4b tedy na 12 bitů.
31 29
27
base 24 = 31
25 23
21
G D
19
17 15
13
11
0 AV seg.lim p DPL S
B
9 type
7
5
3
1 0
base 16 = 23
L
base 0 - 15
seg: limit 0 - 15
kde AVL - uživatelsky softw. Přístupný BASE - base segmentu D/B
- 0 - 16 bitový segment 1 - 32 bitový segment
DPL
- Přístupová úroveň Deskriptoru (descriptor privilege level)
G
- Granularity - zrnitost 0 - v bytech 1 - po 4kBytech
LIM
- segment limit
P
- segment present ( využitý)
S
- typ deskriptoru 0 - system,
Type
- 16 typu segmentu: RO,R/W, Executable,atd.
1 - aplikace
Modely segmentace paměti 1. Flat Model (jednoduchý model) vhodný pro UNIX, který nepodporuje segmentaci, ale pouze stránkování. Tento model je užívám i u jednoduchých krátkých úloh, které eliminují far-point a jsou prováděny samostatně. Proto každý segment má počáteční adresu 0, a limit 4GB. V rámci segmentu je kód zapisován na vrchol paměti (od 4GB dolů), a data od adresy 0 nahoru. Velmi rychlý mód, protože se nepřepočítává segment. 2. Protected Flat Model vhodný pro nestrákované paměti, protože poskytuje minimum chránění v paměti. Délka segmentu již odpovídá délce použité paměti aplikace. Kontroluje délku segmentu a tím zpomaluje chod, ale zároveň chrání před vyjímkou zásahu do prázdné paměti. 3. Multisegment Mode Každý program má svou vlastní tabulku segment descriptorů a vlastní segmenty (více segmentů pro program). Naráz je k dispozici 6 segmentů (volány z CS, ES, SS, DS, FS a GS registru). Registry pro tabulky deskriptorů Pro GDT a IDT (Interrupt deskriptor table) existují speciální registry GDTR a IDTR obsahující 32 bitovou bázi tabulky a 16ti bitový limit. To znamená, že skutečná délka
tabulky je 8*limit-1. Pro čtení a zápis do těchto registrů slouží instrukce SGDT, LGDT, SIDT, LIDT. Registr LDTR pro LDT má stejnou strukturu jako položka této tabulky. Ovládací instrukce jsou SLDT a LLDT.
Stránkování V dnešní době je nutné na adresaci paměti navazovat další funkce jako je např. vytváření virtuální paměti. Pro zavedení této funkce je segmentace v protected modu nevyhovující a zavádí se další stupeň adresování, který navazuje na segmentaci a to stránkování. Na rozdíl od segmentace, kdy segment má proměnnou délku stránka má vždy konstantní délku a to obvykle 4kB. Pak pro práci se stránkou stačí si zapamatovat pouze číslo stránky. Při stránkování je převáděna lineární adresa (výstup ze segmentace) podle dvoustupňových tabulek na fyzickou. Pokud tato tabulka převod neumožní, je vyvolána vyjímka (přerušení), které swapuje stránku z disku za jinou, nepoužívanou stránku v paměti, a pak je vyvolána znovu instrukce, která způsobila výjimku. Není li zapnuto stránkování (31.bit -PG registru CR0) pak je lineární adresa považována za fyzickou. Dnes ale už všechny procesory pracují ve stránkovacím režimu s délkou stránky 4kB, 8kB nebo více. Zde bude objasněn princip stránkování pro 4kB stránky. Lineární adresa je pro účely stránkování rozdělena na 3 části 10b
adresář
10b
tabulka
12b
offset
31
22 DIR- (adresář) 10bitů
12
0
TABLE
OFFSET
10bitů
12bitů
Z toho plyne, že 12b offset umožňuje velikost stránky 212B= 4kB. Vytváření fyzické adresy je shodné pro všechny 32b procesory.
Logická adresa Selektor
15
Index
TI RPL
OFFSET
3210
31
0
GDT
32
13
32
32 Lineární adresa
GDTR
Adresář 31
Tabulka
Offset
22
12
0 Fyzická
1023
1023
10
10
paměť
stránkový
stránkovací
adresář
tabulka 12 20
> 0 31 DBAR
0
31
0
32
Vytvoření lineární adresy je popsáno u segmentace. Lineární adresa se dělí na 3 části. První ukazuje na řádek adresářové tabulky, druhá na řádek stránkovací tabulky a třetí je offset – posunutí od počátku stránky. Tabulky mají po 1k řádků a na každém řádku jsou 4B. Obsahem řádku je číslo stránky mající 20b a práva 12b. Těchto 12b se liší u stránkovací a adresářové tabulky prakticky jen bity 6 (obsazeno) a 7 a 8 délka stránky. Z našeho hlediska je důležitý bit, který nám říká, zda číslo stránky je skutečně číslo stránky v OP nebo zda se jedná o frame ve virtuální paměti. Adresářová tabulka udává číslo stránky – stránkovací tabulky, kde jsou uloženy čísla stránek patřící danému souboru. Počáteční adresa tabulky je hodnota uvedená jako číslo stránky doplěné 12 nulami ve dvojkové soustavě. Totéž platí i pro čísla stránek ze stránkovací tabulky. Adresa dat v paměti se vypočte součtem počáteční adresy stránky a offsetu.
Protected multitasking Mode Práce s více tasky je obdobná jako při volání procedur, ale je nutné si zapamatovat více informací. Procesor neukládá všechny informace do stacku, ale do vyčleněné paměti nazývané Task State Segment.
Přerušení v protected modu Při přerušení procesor vyhledává v IDT (Interrupt Descriptor Table) offset a selector pro GDT k určení adresy obslužné procedury. V IDT hledá adresu, která je osminásobek čísla přerušení (descriptor IDT má opět 8Bytů).
Adresování u 64bitových procesor
Virtuální paměť Operační paměť je skoro vždy malá pro nainstalované programy. Proto se rozšiřuje o tzv. virtuální paměť, kam procesor odkládá momentálně nepotřebné stránky z OP. Zásadní myšlenkou virtuálních pamětí je využít levnější sekundární paměti pro účely paměti primární. Sekundární paměť, obvykle hard disk, je pro tyto účely rozdělena na rámce -frame, které jsou podle potřeby přesouvány (swap) z a do operační paměti. V případě, že počet volných stránek v OP se blíží k nule, procesor automaticky uvolní ty rámce (stránky), které nejdéle nepotřeboval. To znamená, že tyto rámce uloží na disk. Pro uživatele se tak vytváří dojem, že operační paměť má velikost celé sekundární paměti (do 4GB). U Linuxů, Unixů je swapovací prostor tvořen samostatným logickým diskem bez souborového systému. Orientace na disku je jen podle čísel framů (rámců). U Windows se vytváří na disku samostatný swapovací soubor. Swapovací soubor je sice pomalejší, ale jeho velikost je snadněji měnitelná. Pro swapování je podmínkou zapnuté stránkování. Ve stránkovací tabulce najde OS stránky, které nejdéle nepoužíval. Pak najde volné místo ve swapovacím prostoru aq celou stránku odloží. V tabulce zapíše číslo frame na disku (swapnuté stránky) a nastaví příznak „swapnuto“. Pokud OS vyhledává data, tak podle příznaku „swapnuto“ zjistí, zda stránka je swapnuta nebo ne. V případě že je swapnuta, najde volné místo v OP, resp. uvolní místo swapnutím jiné stránky, přepíše frame do OP. Místo obnovených dat v OP opět zapíše do stránkovací tabulky jako číslo stránky a příznak „swapnuto“ znuluje. Pak jsou již data připravena k zpracování.
Kontrolní otázky
Jaký je rozdíl mezi EMS a XMS? Jak se vypočítá maximální velikost operační paměti? Zopakujte si z předchozích kapitol rozdělení polovodičových pamětí. Jaký je velký segment v realmodu? Zamyslete se nad jeho minimální velikostí - číslo segmentu je násobeno 16). Jaký je rozdíl mezi virtuální, logickou, lineární a fyzickou adresou? Co je to segment selektor a jaké má části? Proč jsou zavedena v protected modu RPL práva? Jak se vytváří adresa v segmentaci u protected modu? Kolik bajtů má řádek v tabulce deskriptorů?
Co je to Task State Segment? Jaký je rozdíl mezi stránkou a segmentem? Co je to číslo stránky a na které adresách je tato stránka uložena? Co je to swapování a k čemu slouží. Popište postup při swapování. Vysvětlete na stránkovací tabulce.
Sítě VLAN a celkové shrnutí jsou uvedeny v druhé části textu Virtuální sítě VLAN Použitá literatura [1] PC World10/96