2009-04-19 3 views
1

Zum Beispiel kann ein Verfahren zur Plattenwarte I/O auf der Adresse des Puffer-Header zu vervollständigen schlafen entsprechend den Daten übertragen. Wenn der Interrupt Routine für den Datenträgertreiber notiert, dass die Übertragung abgeschlossen ist, ruft es Wakeup auf dem Pufferheader. Der Interrupt verwendet den Kernel-Stack für , was auch immer passiert ist läuft zu der Zeit, und das Aufwecken ist getan von diesem Systemprozess.Prozessplanungs Frage

Können Sie bitte die letzte Zeile im Absatz, die ich betont habe, erklären. Es geht darum, den Prozess aufzuwecken, der auf ein Ereignis gewartet hat und somit geschlafen hat. Dieser Para stammt von Galvin. Übrigens können Sie ein gutes Buch oder einen Link zum Studieren von Unix-Betriebssystemen vorschlagen?

Danke.

+0

Wenn Sie nach einem guten Buch über Kernel suchen, ist Understanding the Linux Kernel ein wirklich großartiges Buch über die Interna von Linux. – Zifre

Antwort

1

Es gibt einige Prozess zum Zeitpunkt des Interrupts ausgeführt wird. Der Kernel wechselt nicht zu einem anderen Prozesskontext, um damit umzugehen - das würde Zeit brauchen - er tut nur, was im aktuellen Kontext notwendig ist, und lässt den Scheduler wissen, dass der Warteprozess beim nächsten Termin bereit ist fortfahren.

Es gibt eine Reihe von guten Interna Bücher um. Ich mag die verschiedenen McKusick et al Bücher, wie The Design and Implementation of the FreeBSD Operating System.

+0

wirklich danke dafür. Kannst du das auch erklären; FreeBSD implementiert Seitenfärbung mit Paging-Warteschlangen. Die Warteschlangen sind entsprechend der Größe der L1- und L2-Caches des Prozessors angeordnet; Wenn eine neue Seite zugewiesen werden muss, versucht FreeBSD, eine optimal für den Cache ausgerichtete Seite zu ermitteln. danke – mawia

+0

Wow, nicht in einem Kommentar kann ich nicht. –

0

Der E/A-Abschluss-Interrupt wird ausgeführt, sobald die Platte das Ende der Übertragung signalisiert. Dies geschieht unabhängig davon, was der Kernel gerade macht. Interrupthandler sind normalerweise sehr klein und in sich abgeschlossen. Daher ist es schneller, die aktuelle Laufzeitumgebung (Stapel, CPU-Status usw.) wiederzuverwenden, anstatt einen vollständigen Kontextwechsel zu einem separaten Thread durchzuführen. Auf der anderen Seite bedeutet dies, dass Interrupt-Handler nur sehr begrenzte Dinge tun dürfen, wie zum Beispiel das Setzen einer Flagge woanders, oder ein Arbeitselement in die Warteschlange stellen. Außerdem müssen sie sehr vorsichtig nach sich selbst aufräumen, damit der laufende Prozess nicht gestört wird.

0

Eric Raymond 'The Art of Unix Programming', sollte gelesen werden, um die Unix-Philosophie und Kultur zu verstehen. Um tatsächlich zu wissen und zu schätzen, die Gründe hinter seinem Design.