Was versteht man unter Interrupts im Kontext von Betriebssystemen?

9

Ich habe beschlossen, im Sommer Betriebssystemkonzepte von Silberschatz, Galvin Gagne (8. Auflage) zu lesen . Ich bin zu einem Thema gekommen, das mich verwirrt - Interrupts und ihre Rolle in Bezug auf Betriebssysteme.

Der Text besagt, dass ein Betriebssystem einen ersten Prozess wie "init" startet und dann auf das Auftreten eines "Ereignisses" wartet. Dieses Ereignis wird normalerweise durch einen Interrupt signalisiert. Der Text sagt auch, dass der Interrupt entweder von der Hardware oder der Software kommen kann. Wie funktioniert das etwas detaillierter? Wird das Betriebssystem von Interrupts gesteuert?

Ich bin nur auf der Suche nach einem umfassenden Verständnis.

Ockham
quelle

Antworten:

8

Wenn das Betriebssystem einen Prozess wie "init" ausführt, hat es Signale an andere Subsysteme / Geräte-Manager usw. gesendet, wie z. B. den Speicher, E / A-Geräte usw. Der Interrupt ist nur eine Möglichkeit, dem Prozessor oder dem zu sagen Betriebssystem, dass es bereit ist oder neue Eingaben usw. hat. Irgendwann während der Initialisierung wartet das Betriebssystem darauf, dass Subsysteme bereit sind, und ein Interrupt von diesen Subsystemen würde genau dies anzeigen. Darauf bezieht sich das "Ereignis".

In Bezug auf Hardware- oder Software-Interrupts sind Hardware-Interrupts diejenigen, die von der Hardware stammen. Z.B. E / A-Geräte wie Tastatur usw. Ein Hardware-Interrupt bewirkt, dass der Prozessor seinen Status speichert und mit der Ausführung des Interrupt-Handlers beginnt. Andererseits sind Software-Interrupts Anweisungen im Befehlssatz, die den Prozessor veranlassen, seine Berechtigungsstufe vom Benutzer-Supervisor, auch als Kontextwechsel bezeichnet, zu ändern. Diese Details werden später im Lehrbuch behandelt.

Chaos
quelle
4

Durch Interrupts kann das Betriebssystem ein externes Ereignis wie einen Mausklick zur Kenntnis nehmen. Software-Interrupts, besser bekannt als Ausnahmen, ermöglichen es dem Betriebssystem, ungewöhnliche Ereignisse wie Fehler beim Teilen durch Null zu verarbeiten, die bei der Codeausführung auftreten.

Die Reihenfolge der Ereignisse ist normalerweise wie folgt:

  1. Hardware signalisiert dem Prozessor einen Interrupt
  2. Der Prozessor bemerkt den Interrupt und setzt die aktuell ausgeführte Software aus
  3. Der Prozessor springt zur passenden Interrupt-Handler-Funktion im Betriebssystem
  4. Der Interrupt-Handler führt seinen Kurs aus und kehrt vom Interrupt zurück
  5. Der Prozessor wird dort fortgesetzt, wo er in der zuvor ausgeführten Software aufgehört hat

Der wichtigste Interrupt für das Betriebssystem ist der Timer-Tick-Interrupt. Der Timer-Tic-Interrupt ermöglicht es dem Betriebssystem, die Kontrolle über den aktuell ausgeführten Benutzerprozess regelmäßig wiederzugewinnen. Das Betriebssystem kann dann entscheiden, einen anderen Prozess zu planen, zum selben Prozess zurückzukehren, die Verwaltung durchzuführen usw. Der Timer-Tick-Interrupt bildet die Grundlage für das Konzept des präventiven Multitasking.


quelle
4

Ein Interrupt ist ein "ungewöhnliches" Ereignis, das sofort verarbeitet werden muss , unabhängig davon, was sonst noch vor sich geht. Ich sage "ungewöhnlich" in Anführungszeichen, weil sie nicht unbedingt unerwartet oder schlecht sind, sondern "ungewöhnlich" aus Sicht der CPU, weil sie "einfach passieren", während sie damit beschäftigt sind, Code auszuführen, der möglicherweise nicht in Beziehung steht.

Die CPU verfügt über einen Mechanismus zum Abhören von Interrupts und eine Möglichkeit zum Konfigurieren der Vorgehensweise, wenn Interrupts verschiedener Art auftreten. Auf diese Weise kann das Betriebssystem festlegen, dass es benachrichtigt wird, wenn Hardwaregeräte Dinge tun (einschließlich der wichtigen Hardware-Uhr, die einfach in regelmäßigen Abständen Interrupts generiert). Durch die Interrupt-Handling-Konfiguration der CPU erhält der im Betriebssystem festgelegte Code die Kontrolle, wenn Interrupts auftreten.

Der Computer befindet sich in einem sehr unangenehmen Zustand (für einen Anwendungsprogrammierer), wenn ein Interrupt-Handler gestartet wird. Die Maschine war damit beschäftigt, etwas anderes zu tun (was alles sein könnte ), und jetzt wurde dem Betriebssystem mitgeteilt, dass "etwas passiert ist". Es muss alle anderen Informationen sammeln, die erforderlich sind, um den Interrupt tatsächlich von der Stelle in der Maschine aus zu handhaben, an der er herumliegen sollte, und die erforderliche Verarbeitung ausführen, ohne zu stören, dass "alles sein könnte", was auf der CPU ausgeführt wurde. Wenn das Betriebssystem wechseln möchte, welcher Anwendungsprozess gerade ausgeführt wird, muss es genügend Kontext speichern, um ihn später wiederherstellen zu können (erneut, ohne diesen Kontext zu stören), dann einen anderen Kontext laden und die CPU wieder normal arbeiten lassen Ausführung in diesem Zusammenhang.

Wie bereits erwähnt, werden Interrupts verwendet, um Benachrichtigungen von Hardwaregeräten abzurufen (die einzige Alternative wäre, sie regelmäßig zu überprüfen), die Zeit zu verfolgen und die garantierte Möglichkeit zu erhalten, die Kontrolle über einen Anwendungsprozess zurückzugewinnen (um zu wechseln, welche Anwendung ausgeführt wird). Wiederherstellen von Anwendungsprozessen, die ungültige Anweisungen ausführen, und Ermöglichen, dass Anwendungen Anforderungen an das Betriebssystem stellen. Diese letzten werden als Systemaufrufe bezeichnet. Um zu verhindern, dass die Anwendungen die Maschine und einander durcheinander bringen, werden sie normalerweise mit der Maschine im "Benutzermodus" ausgeführt, wodurch verhindert wird, dass die Anwendung im Grunde nichts anderes tut als den ihr bereits zugewiesenen (virtuellen) Speicher zu lesen und zu schreiben. Dies bedeutet, dass alles zu tunAndernfalls (Lesen / Schreiben von Dateien, Anfordern von mehr Speicher, Zugreifen auf Geräte usw.) muss die Anwendung einen Systemaufruf ausführen. Dies geschieht im Grunde genommen, indem einige Informationen darüber, was es tun möchte, an einem Ort hinterlassen werden, von dem es weiß, dass das Betriebssystem danach sucht, und dann ein CPU-Befehl ausgeführt wird, der einen Interrupt der richtigen Art verursacht. Das Betriebssystem kann dann sehen, was die Anwendung versucht hat, und bestimmen, ob diese Anforderung ausgeführt werden soll. Diese Garantie, dass das Betriebssystem an dem Versuch eines Prozesses beteiligt ist, alles zu tun, was sich auf etwas außerhalb des Prozesses auswirkt, ist die einzige Möglichkeit, Zugriffsrichtlinien durchzusetzen.

Ja, das Betriebssystem wird also im Wesentlichen von Interrupts gesteuert. Ein "abstraktes" Betriebssystem bootet den Computer in einen "normalen Betriebszustand" und übergibt irgendwann die Kontrolle an einen "normalen" Prozess. Unter normalen Umständen gewinnt das Betriebssystem dann nur durch die Behandlung von Interrupts die Kontrolle zurück. Da jedoch ohne Unterbrechung so ziemlich nichts Interessantes passiert, hat das Betriebssystem im Grunde immer die Kontrolle über alles.

Ben
quelle
3

Das Betriebssystem wird durch Interrupts gesteuert. Dies bedeutet, dass:

Wenn keine Prozesse ausgeführt werden müssen, keine E / A-Geräte gewartet werden müssen und keine Benutzer, auf die reagiert werden soll, sitzt ein Betriebssystem ruhig und wartet darauf, dass etwas passiert. Ereignisse werden fast immer durch das Auftreten eines Interrupts oder eines Traps signalisiert. Ein Trap ist ein Hardware-Interrupt, der generiert wird, wenn eine ungültige Anweisung gegeben wird, und dann die Steuerung an das Betriebssystem zurückgibt.

Ein Beispiel für eine ungültige Anweisung ist, wenn ein Programm versucht, ohne Berechtigung auf den Speicherplatz eines anderen Programms zuzugreifen.

Peter Mortensen
quelle
Interrupts müssen nicht immer etwas Schlechtes oder Ungültiges sein, wie Sie beschrieben haben
Ich habe den Trap-Interrupt beschrieben, soweit ich weiß, dass er aufgrund eines Fehlers oder ungültiger Anweisungen generiert wurde. Danke für die Benachrichtigung