2.6. Segmentace pameti
- Zcela odlisny pristup k praci s pameti nez u vsech predeslych, kde se pracovalo
technickym prostredkys pameti tak, ze uzivatelska uloha o nicem
nevedela.
- Polozme otazku, je-li mozne vytvorit zcela novy pristup k pametovemu prostoru, ktery by
pamet lepe vyuzival a zaroven i usnadnoval programovani? Presne tim je segmentace
pameti.
- Jake je videni pameti uzivatelem? Jako linearni pole bytu, nebo jako mnozinu ruzne
velkych bloku ruznych ucelu? Druhy pohled je jiste efektivnejsi (viz. Obr. 29). Nazvat ony
bloky pameti segmenty je pak uz jen slovni hricka.

Obr. 29 Uzivatelsky pohled na program
- Segment lze definovat jako logicke seskupeni informaci tj. napr hlavni program,
podprogramy, datova oblast apod.
- Adresovy prostor kazde ulohy je potom tvoren nekolika segementy, jak ukazuje napr.
Obr. 29 Technika pridelovani pameti segmentum se nazyva
segmentace
- Pri segmentaci pameti musi kazdy odkaz do ni obsahovat
- cislo segmentu - (segment)
- pametove misto v segmentu - (offset)
- I kdyz je segmentace pro programatory viditelna, rozdily mezi beznym a segmentovanym
pametovym prostorem program neovlivni. Pascalsky prekladac napr. muze vytvorit
segmenty pro (1) globalni promenne; (2) zasobnik adres volani procedur; (3) kodovou cast
kazde procedury nebo funkce; a (4) lokalni promenne kazde procedury nebo funkce.
Loader potom priradi kazdemu segmentu jeho cislo.
2.6.1. Technicke prostredky
- Technicke prostredky musi umet premapovat dvourozmernou adresu (segment, offset) na
jednorozmernou fyzickou adresu daneho pametoveho mista. Stejne jako u strankovani se k
tomu vyuziva prevodni tabulka - tabulka segmentu (segment table). Kazda
polozka tabulky obsahuje pocatecni adresu segmentu (segment base) a
rozsah segmentu (segment limit). Uziti tabulky segmentu ilustruje Obr. 30. Kazdy
proces ma svou tabulku segmentu asociovanou s proces control blockem, podle ktereho se
orientuje dispecer.

Obr. 30 Technicke reseni segmentace pameti
- Logicka adresa se sklada z cisla segmentu (segment) a relativni adresy slova v ramci
segmentu (offset). Segment se pouzije jako index v tabulce segmentu. Offset, jakozto
relativni adresa v ramci segmentu nesmi byt vyssi nez limit (delka segmentu). Pokud tomu
tak je, nastava preruseni v dusledku poruseni ochrany pameti. Je-li vse v poradku secte se
offset a base segment, cimz vznikne fyzicka adresa, se kterou mozno vyrazit do
pameti.
- Pro ukazku realne situace segmentace pameti poslouzi priklad z Obr. 29. Vysledna situace
po zavedeni ulohy do pameti je videt na Obr. 31. 5 segmentu je ocislovano od 0 do 4.
Vsechny jsou ulozeny ve fyzicke pameti. Tabulka segmentu ma vlastni polozku pro kazdy
segment a obsahuje pocatecni adresu a delku segmentu. Napr. segment (2) ma delku
400 bytu a je ulozen v pameti od adresy 4300. Odkaz na 53 byte segmentu (offset) je
premapovan na 4300 + 53 = 4353. Odkaz na byte 1222 segmentu 0 vyvola preruseni v
dusledku poruseni ochrany pameti, nebot tento segment ma delku pouze 1000
bytu.
- Stejne jako u strankovani mohou byt tabulky segmentu ulozeny bud v pameti nebo v
rychlych registrech. V pripade ulozeni v registrech je odezva rychlejsi a soucet offsetu s
pocatecni adresou segmentu a porovnani s delkou segmentu muze byt provedenou
soubezne s ukladanim predeslych dat.

Obr. 31 Segmentace pameti
- V pripade velkeho mnozstvi segmentu neni ulozeni tabulek v registrech proveditelne a je
nutno je ukladat do pameti. Ukazatelem do tabulky segmentu je v Segment-table base point
registr (STBR).
- Vzhledem k promenlivemu poctu segmentu jednotlivych uloh je implementovan Segment-
table length registr (STLR) obsahujici pocet segmentu aktualni ulohy.
- Pro kazdou logickou adresu (s,o) se nejdrive kontroluje cislo segmentu (s < STRL). Je-li s
v poradku, pripocte se k STBR (STBR + s) a vysledkem je ukazatel na spravny zaznam
v tabulce segmentu, se kterym je nalozeno tak, jak uvadi Obr. 30.
- Pri umisteni registru v pameti znamena kazdy pristup k pameti pristupy dva (jeden do
tabulky segmentu). Aby se tento dopad zmirnil vyuzivaji se opet rychle registry jako cache
pro umisteni tech polozek tabulky segmentu, na ktere je nejcasteji odkazovano. Celkem
maly pocet registru dokaze snizit pocet pristupu do pometi tak, ze je jen o 10% nebo 15%
vyssi nez u nemapovane pameti.
2.6.6. Ochrana a sdileni segmentu
- Kazdy segment je zabezpecen zvlast
- Protoze segmenty predstavuji semanticky definovane bloky dat, pristupuje se k jednotlivym
bytum segmentu stejnym zpusobem - segmenty obsahujici instrukce, segmenty obsahujici
data
- V modernich systemech lze instrukcni segmenty definovat jako non-self-modifying, takze
jsou definovany jako read-only nebo execute-only. Signalizacni bity uvedene ochrany jsou
v kazde polozce tabulky segmentu a memory-mapping hardware je kontroluje pred kazdym
pristupem do pameti, aby predesel neopravnenym zasahum jako napr. zapis do read-only
segmentu, nebo uziti execute-only segmentu jako dat.
- Pri ulozeni pole do segmentu memory-managment hardware automaticka kontroluje
indexy pole jestli jsou v poradku a neprekracuji hranici segmentu.
- Mnoho softwarovych chyb je takto odhaleno hardwarem drive nez staci napachat
skody.
- Dalsi vyhodou segmentace je moznost sdileni (sharing) kodu nebo dat
jednotlivymi ulohami.

Obr. 32 Sdileni segmentu pri segmentaci pameti
- Uvazujme uziti textoveho editoru v systemu sdileni casu. Adresovy prostor editoru tvoreny segmenty
muze zabirat v pameti hodne mista. Tyto segmenty mohou byt sdileny vice uzivateli nez aby byl cely adresovy
prostor editoru v pameti n krat. Pro kazdeho uzivatele musi byt k dispozici pouze segment pro ulozeni lokalnich
promennych. Tyto segmenty samozrejme sdileny nebudou.
- Vhodne je take samozrejme sdilet i casti programu, ktere obsahuji napr. casto pouzivane rutiny (fce Sqrt
apod.). Museji byt proto v segmentech oznacenych jako sdilitelne a read-only.
- Sdileni je mozne pouze u peclive propracovanych programu, ktere jsou vytvoreny tak, aby to
umoznovaly. Napr. podmineny skok obsahuje cilovou adresu. Cilova adresa se sklada ze segmentu a offsetu.
Segment bude cislo kodoveho segmentu programu. Pokud bude tento segment sdilen, musi tedy mit ve vsech
procesech stejne cislo apod.
- Mnohem jednodussi je sdilet segmenty, ktere neobsahuji fyzicke adresy. Tam potreba stejneho cisla
segmentu u vsech procesu ktere ho sdili odpada. Lepe je tedy adresovat relativne, napr. vzhledem k aktualni
pozici ukazatele programu apod.
2.6.3. Fragmentace
- Planovac uloh musi najit a alokovat pametovy prostor pro vsechny segmenty uzivatelskeho programu.
Tato situace je totozna se strankovanim. Jediny rozdil je v promenlive delce segmentu.
- Stejne jako u strankovani stojime pred problemem mozne fragmentace pametoveho prostoru tj. situace
kdy je velmi mnoho velmi malych volnych oblasti v pameti, a tak nelze zavest novou ulohu.
- Nejjednodussim resenim fragmentace, ktere je vzdy mozne je pockat, az nektera uloha uvolni svuj
pametovy prostor. Prilis efektivni ovsem toto reseni neni.
- Dalsi moznou cestou je zhustovani. Protoze pri segmentaci je pametovy prostor rozdelen logicky a cely
algoritmus segmentace je ve sve podstate dynamicky, muzeme zhustovani provadet kdykoli se nam zamane.
Prikladne muzeme zhustovat v dobe kdy CPU musi cekat na lib. proces. Zhustovani v takovem pripade muze
byt spusteno (nebo nemusi) jako samostatny proces s nizkou prioritou.
- Zavaznost problemu fragmentace je zavisla na velikosti segmentu. Pokud by jsme system definovali tak,
ze kazdy byte bude ulozen ve vlastnim segmentu, problem fragmentace by nas minul. Nastaly by vsak nejspise
jine a zavaznejsi. V podstate se da rici, ze pokud jsou segmenty "rozumne" male, je i fragmentace unosna.
Zpet
Obsah
Vpred