2017-09-18 2 views
-1

Ich habe Probleme zu verstehen, wie Unterbrechungssignale an die CPU alle Prozesse senden, die gleichzeitig geplant und ausgeführt werden. Ich bin mir nicht sicher, ob der Mechanismus zur Prozessplanung noch funktioniert, da ich dieses Kapitel noch nicht erreicht habe.OS Interrupts und laufende Programme.

Wenn ein Ereignis einen Interrupt verursacht, speichert die CPU ihren Kontext (d. H. Verarbeitet Statuswort-Register + vielleicht GPR) und startet die Interrupt-Wartungsroutine. Nachdem der ISR beendet ist, lädt er den Status des Programms, das unterbrochen wurde, zurück, damit es fortgesetzt werden kann.

  1. Woher weiß die CPU, welches Programm zu unterbrechen ist?

  2. Bleiben alle laufenden Programme während der Ausführung des IRS stehen? Oder laufen alle anderen Prozesse weiter, d. h. laufen sie gleichzeitig mit dem IRS in der Warteschlange?

Antwort

1

Wie weiß die CPU, welches Programm

Die CPU nicht weiß, zu unterbrechen oder müssen. Wenn eine CPU einen Interrupt empfängt, wird immer Thread derzeit auf diesem Kern ausgeführt ausgeführt. Mit einem richtig entworfenen ISR ist dem Thread, der unterbrochen wurde, völlig unbekannt, dass die Ausführung jemals gestoppt wurde *. Im Allgemeinen werden Interrupts an einen bestimmten Kern gesendet. Die Interrupts versuchen nicht, einen bestimmten Prozess oder Thread zu unterbrechen, es sei denn, die Software hat die Affinität so eingestellt, dass sie mit der Unterbrechung des Kerns übereinstimmt, und der Thread läuft gerade. In diesem Sinne ist ein Teil des effizienten OS-Designs auf Multicore-Systemen die Konfiguration der Hardware, um die Unterbrechungsquellen auf verschiedene Kerne zu verteilen, so dass ein Kern nicht ständig unterbrochen wird.

* Die Erkennung eines Interrupts während der Ausführung eines Programms ist kompliziert und Sie sind oft darauf angewiesen, zu wissen, wie lange die Ausführung ununterbrochen abläuft. In dem Fall, dass viele falsche Interrupts auftreten (false positive für das Fehlen einer besseren Phrase), ist ein Nebeneffekt, dass ein Programm merklich langsamer läuft.

Werden alle laufenden Programme während der Ausführung des IRS angehalten? Oder laufen alle anderen Prozesse weiter, d. h. läuft gleichzeitig mit dem IRS-Include in der Warteschlange?

Interrupts sind in der Regel Ereignisse, die sofort gewartet werden müssen. Wenn man sie einplante, würde das den Zweck besiegen. Daher werden ISRs nicht zu den Scheduler-Warteschlangen hinzugefügt. Was den Scheduler an erster Stelle dazu veranlasst, an erster Stelle ausgeführt zu werden, ist ein Interrupt von einem Hardware-Timer. In Multicore-Systemen werden die Threads, die nicht unterbrochen wurden, weiterhin ausgeführt, wenn ein Core einen Interrupt bereitstellt.

Was viele Interrupts möglicherweise tun, ist ein Semaphor auszulösen, um einen Thread zum Entsperren und Beginn der Ausführung wegen eines Ereignisses zu verursachen. Dies ist eine gängige Art, einem Thread zu signalisieren, dass Daten für die Verarbeitung von einer SATA- oder Netzwerkkarte bereit sind. Typischerweise wird dies getan, weil zum Beispiel das Parsing eines Pakets langsam ist. ISR müssen schnell sein, damit sie die langsame CPU-intensive Arbeit einfach auf einen Thread laden.