x86-Programmierung und -Betriebsarten (Teil 4)

Die I/O-Permission-Bit-Map

Neben dem globalen Schutz durch das IOPL-Flag kennt eine 32-Bit-CPU einen weiteren Schutzmechanismus für Zugriffe auf den I/O-Adressbereich, nämlich die so genannte I/O-Permission-Bit-Map. Sie ist im TSS des jeweiligen Tasks abgelegt, verschiedene Tasks können also unterschiedliche I/O-Permission-Bit-Maps besitzen. Der Eintrag I/O-Map-Basis im TSS-Deskriptor gibt den Offset innerhalb des TSS an, bei dem die I/O-Permission-Bit-Map beginnt. Sie erstreckt sich bis zum Ende des TSS, wie es im Limiteintrag des TSS-Deskriptors festgelegt ist. Den Raum zwischen dem Eintrag I/O-Map-Basis und dem Beginn der I/O-Permission-Bit-Map kann das Betriebssystem verwenden, um eigene Informationen abzulegen. In Abbildung 6.17 sehen Sie das Schema der I/O-Permission-Bit-Map im 80386-TSS. Die I/O-Permission-Bit-Map muss also nicht unmittelbar nach den Einträgen für die Register im TSS beginnen. Vielmehr kann ein nahezu beliebig großer Raum zwischen dem Eintrag I/O-Map-Basis und dem Beginn der I/O-Permission-Bit-Map zur Verwendung durch das Betriebssystem vorgesehen werden, das dort eigene Informationen ablegt. Beachten Sie, dass das höchstwertige Byte der Map, das heißt das Byte unmittelbar vor dem Ende des TSS, den Wert 11111111b (=0ffh) besitzen muss. Für die I/O-Permission-Bit-Map können Sie nur ein 80386-TSS verwenden, das 80286-TSS ist nicht zugelassen, weil es keinen Eintrag I/O-Map-Basis hat.

Eine gültige I/O-Permission-Bit-Map ist immer dann vorhanden, wenn die I/O-Map-Basis im TSS noch innerhalb des TSS' liegt. Zeigt der Wert der Basis über das TSS hinaus, so ignoriert der Prozessor alle Prüfungen im Zusammenhang mit der I/O-Permission-Bit-Map, der Zugriffsschutz für den I/O-Adressbereich erfolgt allein durch das IOPL-Flag.