Szegmentálása memória védett módban

Szegmentálása memória a védett módban. Címkék. leíró táblázatot.

Egy korábbi cikkben, a program valósult meg, hogy az átmenetet a védett módban, hogy ellenőrizze az esetleges további műveletek védett módban és végrehajtja egy egyszerű hurok 16 bites utasításokat. Most a feladat a következő program - átmenet a védett üzemmódot és 32 bites utasításokat. Ahhoz, hogy ezt elérje, meg kell ismernie az új vonatkozó információkat védett módban.


Ábra választó 11. Format

Bit 3-15 jelzik leíró számot a kiválasztott tag táblázat (az alábbi táblázatot). Így, a választó 213 lehet leírni = 8192 leírók egy táblázat. Minden leíró szegmens táblázat ismerteti meg, amit nem kell egy szegmensét kód vagy adat (típusú szegmens lesz írva az alábbiakban).

Bit 0-1 tartalmazzák a kért jogosultsági szintet (RPL - Kért Privilege Level) hozzáférési szegmens, azaz a jogosultságokat a program belép a szegmens leíró leírt. Mintegy hozzáférési jogok később tárgyaljuk, és amíg azt feltételezzük, hogy nullával egyenlő (azaz a legmagasabb).

Eddig mi példát is elegendő a szegmens leíró. Tekintsük a szerkezet a szegmens leíró:


12. ábra: A formátum a szegmens leíró

Most nézzük meg részletesebben a formátum leíró.

Limit - a maximális elmozdulás az elejétől a szegmens, azaz, a határ a méret a szegmens mínusz egy bájt. Tehát úgy tűnik, hogy a minimális szegmens méretet lehet állítani, hogy egy bájt, és a maximális - egy megabájt vagy négy gigabájt (ez függ, hogy a szegmens mérete szorozva 4 kilobájt vagy sem).

G - részletesség flag (Granularitás), amely csak azt jelzi, hogy mit mérnek a szegmens méret, ha G = 0, a szegmens mérete tekinthető bájtban (azaz, a maximális szegmens méret kapott 220 = 1 megabájt) ha G = 1 , a szegmens mérete tekinthető 4 KB blokkok (oldalak), azaz, a maximális szegmens méret 220 * 212 = 4 gigabájt, vele mindig többszöröse a szegmensméret 4 kilobájt.

D / B - amely jelzi, hogy bites szegmens: 0 - 16-bites szegmens 1 - szegmens 32 bites (ez a jelző is nevezik BIG).

Bit 53 van fenntartva, és mindig nulla.

AVL bit ingyenes (Elérhető) és fel lehet használni belátása szerint a program.

DPL bit hozzáférési jogosultságok meghatározása a szegmens (leíró Privelege Level). Jelenleg 4 hozzáférési szinteket, ahol a 0 - a legmagasabb prioritást, 3 - a legalacsonyabb prioritást. Így lehetséges volt a program használatát szegmensben leíró leírt adatokat a kiválasztó, a program használt bitek RPL kellene nem kevésbé fontos, mint a bitek DPL leíró. Egyébként van egy hardver hiba (interrupt), az úgynevezett kivétel, amelyet fel lehet dolgozni a kernel.

S zászló és szegmens típusát együtt kell figyelembe venni. Ha az S van állítva, az azt jelenti, hogy a szegmens a rendszer (System), egyébként eldobjuk flag S jelzi, hogy a leíró leír egy adatszegmens vagy kódot. Ha a szegmens egy olyan rendszer, az azt jelzi, hogy milyen típusú (a fajta rendszer leírásokat lesz írva később), a másik esetben, a leíró leír egy adatszegmens egy kód szegmens.

Field „szegmens típusú” az adatszegmenshez a következő:


13. ábra mező „szegmens típusú” adatszegmens

A kód szegmens területen egy kicsit más:


14. ábra mező „szegmens típusú” kódszegmens

Zászló is használják a virtuális memóriát, és egy hozzáférési zászló (elérni), azaz bármely hivatkozás az említett szegmense a zászló automatikusan beállításra kerül (azaz a bit operációs rendszer dönti el, mely szegmensek átmenetileg meg kell állítani a lemezre csereállományból ., de egyes szegmensekben kell várni). Ez azt jelenti, a OS időről időre vissza a kicsit, és ha egy idő után válik egyenlő eggyel, akkor a szegmens lehet állítani, például a merevlemezen, memóriát szabadít fel.

Két jellemző határozza meg a zászló adatszegmensek:

D meghatározza flag szegmens növekedési irányának (irány). Általában, ha a D = 1, a kiválasztott szegmens egy szegmense a növekvő halom mellett, és „hátra”. Ha D = 0, a kiválasztott szegmens egy adatszegmens. Tény, hogy a értéke D = 1 alkalmazzák a gyakorlatban.

Flag W meghatározza a felvétel lehetőségét a szegmensben (írható). Azaz, az eldobott zászló azt jelzi, hogy az adatok szegmens csak olvasható. Ha a jelző be van állítva, a szegmens is rendelkezésre áll a felvételre.

A következő két jellemző határozza zászlót kódszegmens:

Bit C egy kicsit alárendelés (Megfelel), de figyelembe kell venni később.

Fields P. DPL. S és szegmens típusát alkotják az egyik csoport - szegmens a hozzáférési jogosultságokat, és a működés e csoportjának különleges CPU utasításokat ad be, ami lesz szó később.

Most beszéljünk leíró tábla szerkezetét. LDT asztalok (Local Leírótábla), IDT (Megszakítás Leírótábla) és GDT (Global Leírótábla) azonos felépítésűek - tömbök leírásait. Táblázatok önmagukban nem szegmensek - ez az a terület, a fizikai memória. IDT kitüntetéssel GDT és LDT hogy konkrét leírások vannak tárolva az, hogy mi nem nyúl. Az egyetlen különbség a GDT LDT hogy Leírótábla lehet csak egy, és az LDT lehet sok. Továbbá, nulla leíró a Leírótábla nem lehet használni, és tartalmaznia kell nullát (úgynevezett „zéró leíró”). tábla szerkezete a következő:


15. ábra: Structure leíró táblázatokhoz

Vegyünk egy adatstruktúra regiszterekben tárolt GDTR és IDTR:


16. ábra az adatok szerkezete regisztrálja GDTR és a IDTR

LDTR regiszter felépítése a következő:


17. ábra: Regisztráció adatstruktúra LDTR

Az összes 10 bájt áll számunkra csak az alsó két bájt (bitek 0-15), ahol le a választó leíró táblázatot LDT. található a Leírótábla.

Manipulálása nyilvántartások GDTR. LDTR. IDTR szerepel a következő táblázat tartalmazza:

3. táblázat parancsok implicit felülírás szegmens regiszterek
kifejezetten felül utasítás regiszter szánt működését a nyilvántartások DS. ES. FS. GS. SS. Hogy megpróbálja megváltoztatni a szegmens terül CS. meg kell kihasználni implicit parancsokat. Most már elég információ, hogy megvalósítsa a teljesítményét 32 bites kódot. De ez lesz a következő kérdés.