A köteg átkapcsolása

Amikor egy privilegizált szintű eljárást hív fel, a következőket hajtja végre:

A belső védelmi gyűrűk (0, 1 és 2 kiváltsági szint) saját kötegekkel rendelkeznek a kevésbé privilegizált szintekről érkező hívások fogadására. Ha a köteg a hívási folyamatot biztosítja, és a köteg túl kicsi volt, akkor az eredménytelen eljárás az elégtelen veremméret miatt meghiúsulhat. Így a kevésbé privilegizált programok miatti hibásabb programok védelme új köteg létrehozásával érhető el, ha kevésbé kiváltságos eljárásokat hívnak le, kiváltságosabbakat. Új köteg keletkezik, a hívásparaméterek átmásolódnak a régi veremről az újra, és a regiszterek értékei mentésre kerülnek, majd a hívott eljárás normál végrehajtása folytatódik. Amikor visszaáll az eljárásból, a tárolt regiszterek tartalma visszaáll az eredeti kötegre. A kapcsolási feladatok mechanizmusának teljes leírását a 7. fejezet tartalmazza.

A processzor új helyeket hoz létre a feladatállapot szegmens (TSS) használatával, amint azt a 6-8. Ábra mutatja. Minden feladatnak saját TSS-je van. A TSS tartalmazza a belső védelmi gyűrűk eredeti kötegjelzőit. Az operációs rendszer felelős az egyes TSS létrehozásához és a megfelelő kötegmutatók inicializálásáért. Az első stack pointer egy szegmensválasztóból és az ESP regiszter kezdőértékéből áll (a szegmens kezdeti eltolása). A forráskészlet-mutatók csak olvasható értékek. A processzor nem változtatja meg őket a feladatok végrehajtása során. Ezek a veremmutatók csak arra szolgálnak, hogy új kötegeket hozzanak létre, amikor nagyobb jogosultsági szintű eljáráshívásokat hajtanak végre. Amikor visszatér a hívott eljárásokból, ezek a halmok eltűnnek. A következő alkalommal, amikor az eljárás hívásra kerül, új köteg keletkezik az eredeti köteges mutató használatával.

Ha több mint 31 kettős adatszót szeretne átvinni a hívott eljáráshoz, akkor az egyik paraméter az egérmutatóra mutató lehet az adatszerkezethez, vagy az abban tárolt SS és ESP regiszterek értékei felhasználhatók a verem régi területén lévő paraméterek elérésére. Egy másik jogosultsági szinttel rendelkező eljáráshívás során a processzor a következő lépéseket hajtja végre a köteghez:

A 6-9. Ábra a verem kereteket mutatja a sikeres hívás előtt, közben és után, és visszatér a különböző jogosultsági szintek közötti eljárások között.

A TSS-nek nincs stack pointerje a 3-as kiváltságszintű veremhez, mivel a 3. jogosultsági szinttel rendelkező eljárás nem okozhat egy még alacsonyabb szintű eljárást. A 3. kiváltsági szinthez tartozó köteget az SS és EIP regiszterek tartalma védi, amelyeket a 3. réteg okozta kiváltságos szint stackje tárol.

A hívás átjárót használó hívás nem ellenőrzi az új veremre másolt szavak értékeit. A hívott eljárásnak ellenőriznie kell az egyes paraméterek érvényességét. Az alábbi szakaszok tárgyalják, hogyan kell használni az ARPL, VERR, VERW, LSL és LAR parancsokat a mutató értékek ellenőrzéséhez.

Kapcsolódó cikkek