next up previous contents
Next: Szabványok Up: Bevezetés Previous: Holtpont

Az Intel 80386 mikroprocesszor architektúrája

Az Intel 80386-os mikroprocesszor egy olyan igazi 32-bites mikroprocesszor, amely a programozónak egy szegmentált és lapozásos virtuális memóriát biztosít. Hardver módon támogatja a különféle védelmi rendszerek kialakítását (a programok 4 különbözo védelmi kategóriákba sorolhatóak, és az egyes kategóriákban a programok jogai elég finoman szabályozhatók). A 386-os nagyon jó alapot biztosít a UNIX operációs rendszer implementálásához, ezért érdemes a processzor architekturáját közelebbrol is megismerni. Errol lesz szó itt röviden.

A processzor memóriakezelésének a lelkét két táblázat köré építik: ezek a táblák a lokális- és globális leíró táblák (LDT: local descriptor table, GDT: global descriptor table). Ezek a táblák írják le a szegmensek szerkezetét (például a szegmens helyét (báziscímét), méretét (lapokban vagy byteokban mérve) és védelmi jellemzoit). A GDT-t minden program közösen használja, és a fontosabb rendszerszegmensek (mondjuk az operációs rendszer szegmensei) érhetok el ezen keresztül. Minden program rendelkezik egy-egy saját LDT-vel, amelyben a program saját szegmensei vannak leírva - amelyek a programkódot, adatokat és egyéb információkat tartalmazzák.

A processzornak 6 szegmensregisztere van: a CS, DS, SS, ES, FS és GS. Mindegyik szegmensregiszter egy 16-bites ún. szelektor értéket tartalmaz, amely egyértelmuen azonosít egy-egy leírótáblabeli elemet. (Pontosabban a 16 bitbol 1 bit mondja meg, hogy a lokális vagy globális deszkriptor tábláról van-e szó; további 13 bit mondja meg, hogy az adott táblán belül melyik sorszámú szegmensrol van szó; a maradék két bit pedig védelmi információkat tartalmaz.) A szegmensregiszterek közül a CS a kódszegmenst azonosítja (vagyis azt a szegmenst, amely a végrehajtandó kódot tartalmazza), a DS az adatszegmenst (vagyis azt a szegmenst, ahonnan a program a futásához szükséges adatokat veheti), az SS pedig a program verem szegmensét azonosítja. A másik három szegmenst (ES, FS, GS) a programozó arra használja, amire akarja - például egyes utasítások elé egy-egy ún. prefix byteot írva elérheto az, hogy a processzor az adott utasítás végrehajtása során a DS szegmens helyett mondjuk az ES-t használja az adatok elérésére.

Ezen kívül egy speciális kontroll-regiszter tartalmazza a laptábla kezdocímét a memóriában - ez alapján történik az ún. lineáris cím fizikai címmé konvertálása (a 386-os processzor 4 KByte-os lapokat kezel). A lineáris cím kiszámítása a következoképpen történik: amikor egy program egy adott szegmens adott bytejára hivatkozik (a byte offszetjének nevezik a byte szegmensen belüli helyét), akkor a processzor a szegmensszelektornak megfelelo leírótáblaelembol a báziscímet és a bytehoz tartozó offszetet összeadja, és így kapja meg az ún. lineáris címet. A lapozás természetesen letiltható (vagyis "kikapcsolható"), és ekkor a lineáris cím megegyezik a kérdéses byte fizikai memóriabeli címével.

A processzor védelmi modellje a következo: 4 ún. logikai védelmi gyuru van (ezek közül a 0-ás sorszámú a legtöbb privilegiumot biztosító, míg a 3-as sorszámú a legkevesebb privilegiumot biztosító, ún. legkevésbé privilegizált gyuru). Minden programról tárolva van, hogy melyik gyuruben fut (ez az, amit a program nem változtathat meg), és minden egyes szegmeshez is tárolva van a deszkriptortáblában egy-egy ilyen privilegium-szint. A legfontosabb szabály az, hogy a program nem nyúlhat bele a nálánál jobban privilegizált szegmensekbe. Egyéb esetekben ún. (általános) védelmi kizárás keletkezik, amikor az operációs rendszer kapja meg a vezérlést, és a "saját belátása szerint" cselekedhet (mondjuk kiloheti a szabálytalankodó programot). A privilegizáltabb kódszegmensekben tárolt eljárások meghívása is csak ellenorzott módon történhet - csakis a deszkriptortáblában tárolt ún. call-kapukon keresztül kerülhetünk privilegizáltabb kódszegmensbe. (Egy-egy ilyen call-kapu (call gate) lényegében a privilegizáltabb szegmens "nyilvános" belépési pontjait tárolja, és nem lehet csak úgy egy privilegizált szegmens belsejébe "beleugrani".)



next up previous contents
Next: Szabványok Up: Bevezetés Previous: Holtpont



Csizmazia Balazs
Tue Apr 2 00:06:27 MET DST 1996