Dr. Fazekas Gábor (2011)
Kempelen Farkas Hallgatói Információs Központ
Lapozás (Paging)
A külső fragmentáció problémájának egy megoldását kapjuk, ha a memóriát és a processzusokat kis, egyenlő méretű egységekre osztjuk (processzusdarab: lap – page ; memóriadarab: keret – frame)
Az operációs rendszer minden processzushoz egy ún. laptáblát (page table) tart fent
– tartalmazza a processzus lapjaihoz tarozó keretek helyzetét (ábra)
– logikai cím: lap sorszáma + lapon belüli relatív cím
– fizikai cím: keret memóriabeli kezdőcíme + kereten belüli kezdőcím
Szegmentáció
Programozói szemléletet tükröző memóriafelosztási séma
A programokat szegmensekre bontjuk, melyeknek nem kell azonos méretűnek lenniük, de egy maximális szegmensméretnél kisebbnek
A program tehát szegmensek együttese, a szegmens egy programozói logikai egység:
– főprogram, eljárás, függvény, lokális változók, globális változók, közös változók, verem, tömbök
A logikai cím két részből áll: szegmens szám + offset
Minden processzushoz tartozik egy szegmenstábla:
– két dimenziós, felhasználó által definiált címeket egy dimenziós fizikai címekké alakít; a táblában minden bejegyzés tartalmaz egy bázist (a szegmens fizikai kezdőcímét adja meg), mérethatárt (amely a szegmens hosszát mondja meg)
– Szegmens táblázat bázis regiszter (STBR): a szegmens tábla memóriabeli helyére (kezdőcím) mutat (pointer).
– Szegmens táblázat hossz regiszter (STLR): a szegmens tábla maximális bejegyzéseinek számát adja meg. az s szegmens szám akkor legális, ha s < [STLR]
Szegmentáció lapozással
Ötlet: a lapozás a külső fragmentációt, a szegmentálás a belső fragmentációt csökkentheti!
INTEL példa:
Egy processzus által használható szegmensek maximális száma: 16K (!)
Egy szegmens mérete: 4 GB, lapméret: 4K= 4096 bájt
A szegmensek egyik fele privát, ezek címét (adatait) az LDT (Local Descriptor Table) tartalmazza
A többi (az összes processzusok által) közösen használt szegmens, ezek címét a GDT (Global Descriptor Table) tartalmazza.
Mindkét táblában egy-egy bejegyzés 8 byte, az adott szegmens leírója (kezdőcím és hossz).
Logikai cím: szelektor + offset, ahol az offset egy 32 bites érték, a szelektor <s, g, p> alakú, ahol s: szegmens szám, g: GDT, vagy LDT, p: protection (védelem) jelzése
A processzor 6 szegmens regisztere egy-egy szegmens egyidejű gyors megcímzését teszi lehetővé.