interrupts funktionsweise
-
hallo,
hab eine verständnissfrage zum thema interrupts (bei x86).
gehen wir mal von dem aufrauf int 10h aus...gehen wir ferner davon aus, dass dies der momentan einzige aktive request ist...soweit ich es bisher verstanden habe, muss die cpu erst einmal die adresse der interrupt-routine "kennen" und die holt er sich aus der interrupt description table? soweit das korrekt sein sollte, ist die idt vermutlich im bios gespeichert? wird sie vorher in den ram geladen? das denk ich zumindest, weil die os-requests müssen ja auch irgendwo definiert werden?
gut also ich hoffe auf antworten, vielleicht auch auf einen nützlichen link bzgl der funktionsweise.
danke, nino
-
toostuff schrieb:
soweit ich es bisher verstanden habe, muss die cpu erst einmal die adresse der interrupt-routine "kennen" und die holt er sich aus der interrupt description table?
Da muss man zwischen Protected-Mode und Realmode unterscheiden: im Realmode ist es die IVT (Interrupt Vector Table), welche immer an der Adresse 0 bis 0x400 im RAM liegt (jeder der 256 einträge hat 4 byte, 2 byte segment & 2 byte offset). Diese Tabelle wird während der initialisierung des BIOS so vom BIOS angepasst, dass die Adressen auf die Funktionen des BIOS zeigen.
Im Protected-Mode ist es wie du schon gesagt hast die IDT. Diese liegt kann irgendwo im RAM liegen. Diese Adresse (und das dazugehörige Limit) wird über "lidt" in ein Register (IDTR) übertragen. Bei einem Interrupt schaut dann die CPU in diesem Register nach der Adresse der IDT. Die IDT selber hat bis zu 256 Einträge, wobei jeder davon ein 8byte großer Descriptor (Task-, Interrupt- oder Trapgate) ist.Nützliche Links? Die heiligen Intelmanuals, ansonsten die Standard OSDev Seiten, welche auch im Faq aufgelistet sind