Ugrás a tartalomhoz

Operációs rendszerek

Dr. Fazekas Gábor (2011)

Kempelen Farkas Hallgatói Információs Központ

Lapozás és szegmentáció

Lapozás és szegmentáció

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é.