003
03.11.2004, 23:22 Uhr
Hans
Library Walker (Operator)
|
Hi, ich versuch mal, mich kurz zu fassen Aaalllsoo:
Hardware-interrupts: Eine (PC-)CPU hat zwei Interruptleitungen: - eine für den Non Maskable Interrupt, NMI und - eine für den Maskable Interrupt. Die Maskierbarkeit bezieht sich auf das erlauben, bzw. verbieten von Interrupts. Das heisst wenn ein maskable IRQ maskiert ist, ist er abgeschaltet, bzw, verboten. Die CPU wird eine IRQ-Anfrage dann nicht bearbeiten, sondern das Programm fortsetzten, an dem sie arbeitet. Dem gegenüber steht der NMI, der sich nicht abschalten lässt. Wenn der auftritt, verzweigt die CPU immer in die Serviceroutine die zum NMI dazu gehört.
Hardwareinterrupts werden immer durch einen Impuls an den Interruptleitungen ausgelöst; (deshalb heissen sie ja auch so ) Da es aber verschiedene Geräte gibt, die das können, spielen zumindest im PC auch Interruptcontroller eine Rolle, also Zusatzbausteine, mit denen sich die Interrupt-anforderungen von verschiedenen Geräten "sortieren" lassen. Im PC sind das genau 16, und zwar jene, die man beachten muss, wenn man weitere Hardware einbauen will. (Zumindest war es mal so, ob Plug'n play in diesem Zusammenhang inzwischen sauber funktioniert, weis ich nicht.) Über dem Interruptcontroller werden den Geräten, bzw. deren IRQs Prioritäten zugeordnet, so das immer einer den Vorrang vor einem anderen hat, falls zwei Geräte zur selben Zeit die Aufmerksamkeit der CPU verlangen. Eine sehr hohe Priorität hat dabei die Systemuhr, oder der System-Timer. Der erzeugt in regelmässigen Abständen einen IRQ, der den System-Schedular (Task-switcher) aufruft. Das ist jener Teil des Betriebssystems, dem die Kontrolle des Multitasking unterliegt, und der dieses überhaupt erst ermöglicht, weil er zwischen den laufenden Prozessen oder Threads umschaltet. Dieser Interrupt ist maskierbar. Muss er auch sein, denn wenn der Task-switcher gerade einen Prozess unterbricht, um einem anderen Rechenzeit zu geben, darf er nicht unterbrochen werden, weil sonst chaos ausbrechen würde. Dann ist da noch der NMI, also der Nicht-maskierbare Interrupt. Der ruft bei Windows meisst direkt den Task-switcher auf (Strg-Alt-Einfg), damit man Prozesse beenden (abschiessen) kann, die sich nicht mehr kontrollieren lassen, weil sie abgestürzt sind oder in einer Endlos-schleife hängen.
Softwareinterrupts: Die werden bei Intel-CPUs durch abarbeiten des int-Befehls ausgelöst, wobei int für interrupt steht. Dazu gehört noch eine Nummer zwischen 0 und 255, womit wir bei den 256 (Software-)Interrupts von Intel-CPUs wären.
Was der genaue Sinn von Softwareinterrupts sein soll, muss man mal die Erfinder bei Intel fragen. Mir zumindest ist nicht klar, wozu die gut sein sollen, weil man dass, was man damit baut ebenso gut mit Unterprogrammen (-funktionen) realisieren kann. (Ich weis z.B. dass das System-API von DOS auf Interrupts aufgebaut ist. Aber warum man dafür Interrupts anstelle von Unterprogrammen verwendet, ist mir nicht klar, führt aber auch von Thema weg.) ... Eine Anwendung für SoftwareInterrupts ist mir noch eingefallen, und zwar die Ausnahmebehandlung. Wenn also Fehler wie Division durch Null, Segmentation-fault oder sowas auftritt. Dann kann dadurch gesteuert werden, wie auf solche Ereignisse zu reagieren ist.
Hans, dessen Ausführungen jetzt doch nicht so kurz ausgefallen sind... -- Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung. |