Kontextschalter

Im Computer, a Kontextschalter ist der Prozess der Speicherung des Zustands von a Prozess oder Faden, damit es wiederhergestellt und wieder aufgenommen werden kann Hinrichtung Zu einem späteren Zeitpunkt und dann einen anderen, zuvor gespeicherten Zustand wiederhergestellt.[1] Dadurch können mehrere Prozesse eine einzelne teilen Zentrale Verarbeitungseinheit (CPU) und ist ein wesentliches Merkmal von a Multitasking -Betriebssystem.

Die genaue Bedeutung des Ausdrucks "Kontextschalter" variiert. In einem Multitasking -Kontext bezieht es sich auf den Prozess der Speicherung des Systemstatus für eine Aufgabe, sodass diese Aufgabe angehalten und eine andere Aufgabe wieder aufgenommen werden kann. Ein Kontextschalter kann auch als Ergebnis eines auftreten unterbrechen, wie z. B. wenn eine Aufgabe zugreifen muss FestplattenspeicherCPU -Zeit für andere Aufgaben befreien. Einige Betriebssysteme erfordern auch einen Kontextschalter, um sich zwischen zu bewegen Benutzermodus und Kernelmodus Aufgaben. Der Prozess des Kontextwechsels kann sich negativ auf die Systemleistung auswirken.[2]: 28

Kosten

Kontextschalter sind in der Regel rechenintensiv, und ein Großteil des Designs von Betriebssystemen besteht darin, die Verwendung von Kontextschalter zu optimieren. Wenn Sie von einem Prozess zum anderen wechseln, müssen Sie eine gewisse Zeit für die Verwaltung - Speichern und Laden von Registern und Speicherkarten, Aktualisierung verschiedener Tabellen und Listen usw. erfordert. Was tatsächlich an einem Kontextschalter beteiligt ist Die Anzahl der gemeinsam genutzten Ressourcen (Threads, die zu demselben Prozess gehören, teilen viele Ressourcen im Vergleich zu nicht verwandten nicht kooperierenden Prozessen).

Zum Beispiel in der Linux KernelDas Kontextschalter beinhaltet das Laden des entsprechenden Ladens Prozesssteuerungsblock (PCB) in der PCB -Tabelle im Kernel -Stapel gespeichert, um Informationen über den Status des neuen Prozesses abzurufen. CPU -Staatsinformationen einschließlich der Register, Stapelzeiger, und Programm zähler sowie Speicherverwaltungsinformationen wie Segmentierungstabellen und Seitentabellen (Es sei denn, der alte Prozess teilt den Speicher mit dem neuen) werden für den neuen Prozess aus der Leiterplatte geladen. Um eine falsche Adressübersetzung im Fall der vorherigen und aktuellen Prozesse mit unterschiedlichem Speicher zu vermeiden, ist die Übersetzungs -Lookaside -Puffer (TLB) muss gespült werden. Dies wirkt sich negativ auf die Leistung aus, da jeder Speicherreferenz auf das TLB ein Fehlschlag ist, da sie nach den meisten Kontextschaltern leer ist.[3][4]

Darüber hinaus tritt eine analoge Kontextschaltung auf Benutzerfaden, vor allem grüne Fädenund ist oft sehr leicht, sparen und restaurieren minimalen Kontext. In extremen Fällen, wie z. B. das Wechsel zwischen Goroutinen in gehen, ein Kontextschalter entspricht a Coroutine Ertrag, der nur geringfügig teurer ist als a Subroutine Anruf.

Wechselfälle

Es gibt drei potenzielle Auslöser für einen Kontextschalter:

Multitasking

Am häufigsten innerhalb einiger Planung Schema, ein Prozess muss aus der CPU ausgeschaltet werden, damit ein anderer Prozess ausgeführt werden kann. Dieser Kontextschalter kann durch den Prozess ausgelöst werden I/o oder Synchronisation Betrieb zu vervollständigen. Auf einen Präventives Multitasking System, der Scheduler kann auch Prozesse ausschalten, die weiterhin ausgeführt werden können. Um zu verhindern, dass andere Prozesse von der CPU-Zeit ausgehungert werden, konfigurieren präventive Scheduler häufig einen Timer-Interrupt, wenn ein Prozess seinen Prozess überschreitet Zeitscheibe. Dieser Interrupt stellt sicher, dass der Scheduler die Kontrolle erhält, um einen Kontextschalter auszuführen.

Interrupt -Handhabung

Moderne Architekturen sind unterbrechen Gefahren. Dies bedeutet, dass wenn die CPU beispielsweise Daten von einer Festplatte anfordert, dies nicht muss Beschäftigt bis die Lektüre vorbei ist; Es kann die Anfrage (an das E/A -Gerät) ausstellen und mit einer anderen Aufgabe fortgesetzt werden. Wenn die Lektüre vorbei ist, kann die CPU sein unterbrochen (In diesem Fall durch eine Hardware, die die Interrupt -Anfrage an sendet Bild) und präsentiert mit dem Lesen. Für Interrupts namens ein Programm namens ein Interrupt Handler ist installiert und ist der Interrupt -Handler, der den Interrupt von der Scheibe abwickelt.

Wenn ein Interrupt auftritt, wechselt die Hardware automatisch einen Teil des Kontexts (zumindest genug, um dem Handler in den unterbrochenen Code zurückzukehren). Der Handler kann je nach Details der jeweiligen Hardware- und Softwaredesigns zusätzlichen Kontext sparen. Oft wird nur ein minimaler Teil des Kontexts geändert, um die Zeit, die der Interrupt zu behandeln, zu minimieren. Das Kernel Laichen oder planen Sie keinen speziellen Prozess, um Interrupts zu behandeln, sondern führt den Handler im (oft teilweisen) Kontext aus, der zu Beginn der Interrupt -Handhabung festgelegt wurde. Sobald die Interrupt -Wartung abgeschlossen ist, wird der kontextbezogene Kontext vor dem Auftreten des Interrupts wiederhergestellt, sodass der unterbrochene Prozess die Ausführung in seinem ordnungsgemäßen Zustand wieder aufnehmen kann.

Benutzer- und Kernelmoduswechsel

Wenn das System zwischen wechselt Benutzermodus und Kernelmodus, ein Kontextschalter ist nicht erforderlich; a Modusübergang ist nicht alleine ein Kontextschalter. Abhängig vom Betriebssystem kann jedoch auch ein Kontextschalter zu diesem Zeitpunkt stattfinden.

Schritte

Der Status des aktuell ausführenden Prozesses muss gespeichert werden, damit er beim erneuten Verschiebungen zur Ausführung wiederhergestellt werden kann.

Der Prozesszustand umfasst alle Register, die der Prozess verwendet, insbesondere die Programm zähler, plus alle anderen Betriebssystemspezifischen Daten, die möglicherweise erforderlich sind. Dies wird normalerweise in einer Datenstruktur gespeichert, die als a genannt wird Prozesssteuerungsblock (PCB) oder Switchframe.

Die PCB kann auf einem prozess aufbewahrt werden Stapel im Kernel-Speicher (im Gegensatz zum Benutzermodus Rufen Sie Stack an) oder es kann einige spezifische Betriebssystemstruktur für diese Informationen geben. EIN handhaben zur PCB wird zu einer Warteschlange von Prozessen hinzugefügt, die bereit sind zu laufen, oft als die genannt Bereitete Warteschlange.

Da das Betriebssystem die Ausführung eines Prozesses effektiv ausgesetzt hat, kann es den Kontext wechseln, indem ein Prozess aus der Ready -Warteschlange ausgewählt und der PCB wiederhergestellt wird. Dabei wird der Programmzähler aus der PCB geladen, und somit kann die Ausführung im gewählten Prozess fortgesetzt werden. Prozess- und Fadenpriorität kann beeinflussen, welcher Prozess aus der Ready -Warteschlange ausgewählt wird (d. H. Es kann a sein Prioritätswarteschlange).

Beispiel

Berücksichtigung einer allgemeinen arithmetischen Zusatzoperation A = B+1. Die Anweisung wird in der gespeichert Befehlsregister und die Programm zähler ist inkrementiert. A und B werden aus dem Gedächtnis gelesen und in Registern R1, R2, jeweils gespeichert. In diesem Fall wird B+1 als endgültige Antwort in R1 berechnet und geschrieben. Diese Operation, da es sequentielle Lesungen und Schreibvorgänge gibt, und es gibt keine Wartezeiten Funktionsaufrufe In diesem Fall findet in diesem Fall kein Kontextschalter/Warten statt.

Bestimmte besondere Anweisungen erfordern jedoch Systemaufrufe Das erfordern einen Kontextschalter zu Warte-/Schlafprozessen. Ein System -Call -Handler wird für den Kontextschalter auf verwendet Kernel Modus. Eine Anzeige- (Daten x) -Funktion benötigt möglicherweise Daten x von der Festplatte und einem Gerätetreiber im Kernelmodus. Daher wird die Funktion display () eingeschlafen und wartet auf dem Lesevorgang, um den Wert von x aus dem zu erhalten Scheibe, was das Programm wartet und darauf wartet Funktion Rufen Sie zum freigegebenen Einstellen der aktuellen Anweisung an, um schlafen zu gehen, und warten Sie, bis das System aufweckt. Aufrecht erhalten Parallelität Das Programm muss jedoch den neuen Wert und den Schlafprozess gemeinsam erneut ausführen.

Leistung

Der Kontextwechsel selbst hat eine Leistung im Bereich, da das Ausführen des Aufgabenplaner, TLB -Spülung und indirekt aufgrund des Teilens der Teile der CPU -Cache zwischen mehreren Aufgaben.[5] Das Schalten zwischen den Threads eines einzelnen Prozesses kann schneller sein als zwischen zwei separaten Prozessen, da Threads gleich teilen virtueller Speicher Karten, also ist ein TLB -Flush nicht erforderlich.[6]

Die Zeit, um zwischen zwei getrennten Prozessen zu wechseln, wird als die genannt Verfahrenswechsellatenz. Die Zeit, um zwischen zwei Threads desselben Prozesses zu wechseln, wird als die genannt Latenzschaltwechsellatenz. Die Zeit von einer Hardware -Unterbrechung wird generiert, wenn der Interrupt gewartet wird Latenz unterbrechen.

Wechsel zwischen zwei Prozessen in a einzelner Adressraum Betriebssystem Kann schneller sein als das Umschalten zwischen zwei Prozessen in einem Betriebssystem mit privaten Pro-Prozess-Adressräumen.[7]

Hardware vs. Software

Die Kontextschaltung kann hauptsächlich mit Software oder Hardware durchgeführt werden. Einige Prozessoren, wie die Intel 80386 und seine Nachfolger,[8] Lassen Sie die Hardware -Unterstützung für Kontextschalter erhalten, indem ein spezielles Datensegment verwendet wird Aufgabenstatussegment (TSS). Ein Aufgabenschalter kann mit einem Aufruf- oder JMP Globale Deskriptortabelle. Es kann implizit auftreten, wenn ein Interrupt oder eine Ausnahme ausgelöst wird, wenn es a Task -Tor in dem Interrupt Descriptor Tabelle (IDT). Wenn ein Aufgabenschalter auftritt, kann die CPU den neuen Status automatisch aus dem TSS laden.

Wie bei anderen in Hardware ausgeführten Aufgaben würde man erwarten, dass dies ziemlich schnell ist. Mainstream -Betriebssysteme, einschließlich jedoch Fenster und Linux,[9] Verwenden Sie diese Funktion nicht. Dies liegt hauptsächlich auf zwei Gründe:

  • Hardware-Kontext-Switching speichert nicht alle Register (nur allgemeine Register, nicht schwimmender Punkt Register - obwohl die Ts Bit wird automatisch in der eingeschaltet CR0 Steuerregister, was zu einem Fehler bei der Ausführung des Gleitkomma-Punktes führt Anweisungen und dem Betriebssystem die Möglichkeit geben, den Gleitkommazustand nach Bedarf zu retten und wiederherzustellen).
  • Zugehörige Leistungsprobleme, z. B. das Switching von Softwarekontexten, können selektiv sein und nur die Register speichern, die gespeichert werden müssen, während Hardware -Kontext -Schaltgeschäfte fast alle Register, unabhängig davon, ob sie erforderlich sind oder nicht.

Siehe auch

Verweise

  1. ^ Douglas Comer; Timmothy V. Fossum (1988). "4 Planung und Kontextwechsel". Betriebssystemdesign. Vol. I: Der Xinu -Ansatz (PC Edition). Prentice Hall. p. 67. ISBN 0-13-638180-4. Der Kontext -Switching liegt im Mittelpunkt des Prozesses Jonglieren des Prozesses. Es besteht darin, die aktuelle Berechnung zu stoppen, genügend Informationen zu speichern, damit sie später neu gestartet werden und einen anderen Prozess neu gestartet werden können.
  2. ^ Tanenbaum, Andrew S.; Bos, Herbert (20. März 2014). Modern Operating Systems (4. Aufl.). Pearson. ISBN 978-0133591620.
  3. ^ IA-64 Linux-Kernel: Design und Implementierung, 4.7 Schaltadressräume
  4. ^ Betriebssysteme, 5.6 Der Kontextschalter, p. 118
  5. ^ Chuanpeng li; Chen Ding; Kai Shen. "Quantifizierung der Kosten des Kontextschalters" (PDF). {{}}: Journal zitieren erfordert |journal= (Hilfe)
  6. ^ Ulrich Drepper (9. Oktober 2014). "Speicher Teil 3: Virtueller Speicher". Lwn.net.
  7. ^ D.L. Sims. "Mehrere und einzelne Adressräume: in Richtung eines Mittelweges". 1993.doi:10.1109/iwooos.1993.324906
  8. ^ "Kontextschalterdefinition". Linfo.org. Archiviert von das Original Am 2010-02-18. Abgerufen 2013-09-08.
  9. ^ Bovet, Daniel Pierre; Cesati, Marco (2006). Verständnis des Linux -Kernels, dritte Ausgabe. O'Reilly Media. p. 104. ISBN 978-0-596-00565-8. Abgerufen 2009-11-23.

Externe Links