| Zeile 2: | Zeile 2: | ||
== Aufbau == | == Aufbau == | ||
| − | Die IDT | + | Die IDT besteht aus einem Speicherbereich, in dem direkt aufeinanderfolgend die bis zu 256 Interruptdeskriptoren abgelegt sind (d.h. in Hochsprachen aus einem gepackten Array von 256 Deskriptoren). Für die Behandlung des Interrupt 0 wird der erste Eintrag der Tabelle benutzt, für Interrupt 1 der zweite usw. |
| − | {| {{Prettytable}} | + | === Descriptor === |
| − | ! 63-48 || 47 || 46-45 || 44 || 43 || 42-40 || 39-32 || 31-16 | + | {| width='450px' align='right' |
| + | | | ||
| + | {| {{Prettytable}} width='100%' | ||
| + | ! width='50%' | 63-48 || 47 || 46-45 || 44 || 43 || 42-40 || 39-32 | ||
| + | |- align='center' | ||
| + | | Offset 31-16 || P || DPL || 0 || D || Typ || 00000000 | ||
| + | |} | ||
|- | |- | ||
| − | | | + | | |
| + | {| {{Prettytable}} width='100%' | ||
| + | ! width='50%' | 31-16 || width='50%' | 15-0 | ||
| + | |- align='center' | ||
| + | | Selector || Offset 15-0 | ||
| + | |} | ||
|} | |} | ||
| − | + | * ''Selector'' gibt den Selector des Codesegments an, in das beim Auftreten des Interrupts gewechselt werden soll. Im Allgemeinen ist dies das Kernel-Codesegment (Ring 0). | |
| − | + | * ''Offset'': Gibt das Offset des ISR innerhalb des Segments an. Wenn der entsprechende Interrupt auftritt, wird eip auf diesen Wert gesetzt. | |
| − | + | * Das '''''P'''''resent flag gibt an, ob dieser Eintrag benutzt wird. | |
| − | + | * ''DPL'' gibt das Descriptor Privilege Level an, das man braucht um diesen Interrupt aufrufen zu dürfen. | |
| − | Gibt das Offset des ISR innerhalb des Segments an. Wenn der entsprechende Interrupt auftritt, wird eip auf diesen Wert gesetzt. | + | * ''D'' gibt an, ob es sich um ein 32bit- (1) oder um ein 16bit-Segment (0) handelt. |
| − | + | * ''Typ'' gibt die Art des Interrupts an: | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
{| {{Prettytable}} | {| {{Prettytable}} | ||
! Wert || Bedeutung | ! Wert || Bedeutung | ||
| Zeile 32: | Zeile 33: | ||
| 111b || '''Trap Gate''' - Beim Sprung in den Interrupthandler bleiben Hardwareinerrupts aktiviert | | 111b || '''Trap Gate''' - Beim Sprung in den Interrupthandler bleiben Hardwareinerrupts aktiviert | ||
|- | |- | ||
| − | | 101b || '''Task Gate''' - Beim Auftreten des | + | | 101b || '''Task Gate''' - Beim Auftreten des Interrupts wird ein Hardware-Taskswitch durchgeführt. Der Selector zeigt in diesem Fall nicht auf ein Codesegment, sondern auf ein [[TSS]]. Das Offset bleibt unbenutzt. |
|} | |} | ||
| − | |||
| − | |||
| − | |||
== Laden einer IDT == | == Laden einer IDT == | ||