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.