Szegmentálás 1
Szegmentálás Memória kezelési stratégia mely a felhasználó nézőpontját támogatja Például: Egy program szegmensekből áll Mindegyik szegmens külön címtér Egy eljárás nullás címen kezdődik Újrafordításnál nem kell változtatni verem függvény sqrt main 2
Szegmentálás Programozói nézőpont Memória 1 1 4 3 2 2 4 3 3
Szegmentált memória: Szegmentálás Több lineáris címtérből álló virtuális memória Egy processzus különböző részei külön szegmensekben helyezhetők el A részek külön-külön növekedhetnek, csökkenhetnek A szegmensek különböző típusúak lehetnek A szegmenseknek különböző lehet a védelme írható, olvasható, futtatható 4
Szegmentált címzés A logikai cím két részből áll Szegmens szám Offszet 5
Lapok fix méretűek Tiszta szegmentálás Szegmensek nem fix méretűek 6
Tiszta szegmentálás Külső töredezettség alakul ki Megszüntethető tömörítéssel 7
Összehasonlítás A programozó tudatában kell legyen a technikának? Hány lineáris címtartomány van? A teljes címtartomány meghaladhatja a fizikai címtartományt? Meg lehet-e különböztetni és külön védeni a programot és adatot? Változó méretű adatok könnyeb kezelhetők? Függvények megosztása felhasználók között lehetséges? Lapozás Nem 1 Igen Nem Nem Nem Szegmentálás Igen Sok Igen Igen Igen Igen 8
Összehasonlítás Miért találták ki a technikát? Lapozás Nagy lineáris memória területet kaphassunk, anélkül, hogy memóriát vennénk Szegmentálás A program el tudja különíteni a futtatható és adat részt logikailag különálló memória részre Támogassa a megosztást és védelmet 9
Szegmentálás, Intel 8086 (régi szegmentálás) Max 1 MB memória 64 KB szegmensek 16 x 64 KB = 1MB Bármely cím elérhető, csak be kell tölteni a szegmens regiszterbe CS : kód szegmens szelektor DS : adat szegmens szelektor 10
80386 Szegmentálás, Intel 4 GB memória A memória nem elérhető szabadon A szegmens bármekkora lehet 1 byte 64 KB 4 GB 11
Szegmentálás, Intel Szegmensek leírása: szegmens leíró Mezők Alap cím (0-ffff ffff) Hossz (0-ffff ffff) Szegmens típusa Privilégium szint Egyéb 12
Szegmens típus Szegmentálás, Intel Adat, csak olvasható Adat, írható-olvasható Verem, csak olvasható Verem, írható-olvasható Kód, csak végrehajtható Kód, végrehajtható, olvasható... 13
Szegmenstáblák A szegmensleírók folyamatosan egymás után a memóriában Minimum 1 db Maximum 8192 db 64 KB méret Három típus: GDT IDT LDT 14
Szegmenstáblák GDT (Globális leíró tábla) Csak egy van Általános célú Minden program használhatja IDT (Megszakítás leíró tábla) Megszakítás kezelő rutinok címe LDT (Lokális leíró tábla) Minden processzusnak lehet Opcionális 15
Szegmenstáblák Miután a memóriába helyeztük a leíró táblákat, a processzornak is meg kell mondani 3 speciális regiszter: GDTR, IDTR, LDTR 32 bites regiszterek Szegmens regiszter (DS, CS) 16 bitesek 16
Szegmens címzés Hogyan lehet egy 16 bites regiszterben 32 bites címet tárolni? Sehogy Vesszük a 16 bites címet Eltoljuk jobbra 3 bittel (13 bites cím) Ez 8192 különböző értéket jelent, ami pont megfelel a szegmenstáblák méretének A szegmens regiszter a szegmenstáblán belüli indexet adja meg 17
Mire kell az alsó 3 bit? Szegmens címzés 2 bit: a védelmi szint: 0-3 1 bit: GDT vagy LDT táblát használjuk-e? 18
Szegmens címzés FFFF FFFF DS:ESI DS:0 szegmens ESI 32 0 DS 15 0 00000 0000 0011 0 XX GDT GDTR 48 0 0000 0000 19
Szegmens címzés, LDT-vel FFFF FFFF DS:ESI ESI 32 0 DS:0 szegmens LDT DS 15 0 00000 0000 0001 1 XX LDTR GDT GDTR 48 0 0000 0000 20
Független szegmensek Verem szegmens Adat 2 szegmens Adat 1 szegmens Kód szegmens Verem vége Verem bázis Adat 2 vége Adat 2 bázis Adat 1 vége Adat 1 bázis Kód vége Kód bázis Verem leíró Adat 2 leíró Adat 1 leíró Kód leíró 21
Átlapolt szegmensek, aliasing Verem szegmens Adat 2 szegmens Adat 1 szegmens Kód szegmens Verem vége Verem bázis Adat 2 vége Adat 1 vége Adat 2 bázis Adat 1 bázis Kód vége Kód bázis Verem leíró Adat 2 leíró Adat 1 leíró Kód leíró 22
A rendszer megvéd: Védelmi szintek A felhasználók nem zavarhatják egymást A felhasználó titkos adatot nézzen meg Egy program hiba más programokat érintsen Egy program hiba más adatokat érintsen Tönkretétel ellen Hardware-be épített 23
Védelmi szintek 24
Védelmi szintek A 80386, protected módban folyamatosan ellenőrzi hogy van-e elég privilégiumunk: az utasítás végrehajtására az adat elérésére és a vezérlés átadására egy másik kódrészletre Az aktuális kódszegmens szintje határozza meg a privilégium szintet 25
Szint váltás Védelmi szintek Conforming szegmens (igazodik az aktuális szinthez) Call gate -en keresztül 26
Szegmentálás lapozással Minden szegmensen belül lapozást használunk Elkerülhető a külső töredezettség A memóriát hatékonyan használja Lépések 27