Aus Hardware-Sicht haben Sie recht, dass alle CPUs "Anweisungen ausführen" nacheinander ausführen. In einem (vielleicht leicht vereinfachten) Sinne ist das alles, was vor sich geht.
Wenn Sie eine bestimmte Rechenaufgabe ausführen müssten, könnten Sie tatsächlich einen geeigneten Strom von Anweisungen schreiben, damit Sie Ihre Hardware einschalten, Ihre Anweisungen ausführen und dann anhalten oder herunterfahren oder was auch immer. So wurden sehr frühe Computer tatsächlich betrieben.
Allerdings ist diese Art des Betriebs eines Computers extrem unhandlich und skaliert überhaupt nicht, da es erfordert, dass ein einziger Bediener die Verantwortung alles übernehmen und dabei alle Arten von Rädern neu erfinden. Das ist, wo das Konzept eines Betriebssystems ins Spiel kommt: Das Betriebssystem ist eine bestimmte Art von Befehlsstrom, der beim Start geladen wird, der wiederum laden und andere Bits Anweisungen ausführen kann, dynamisch. Diese Unterteilung ermöglicht die Wiederverwendung der Kernfunktionalität (Gerätetreiber) und die dynamische Anpassung der Funktionalität der Maschine (d. H. Während sie läuft, im Gegensatz zur Neuprogrammierung und Rücksetzung). Darüber hinaus ermöglicht es, dass die Teile der Anweisungen, die dynamisch geladen werden, von verschiedenen Personen erstellt werden, so dass wir eine einzige Plattform haben, die "benutzerdefinierte Anweisungen" ausführen kann, d. H.was wir üblicherweise als "Programm" verstehen.
So, jetzt haben wir alle Teile: Der Code, den die CPU beim Einschalten ausführt, ist das Betriebssystem, und das Betriebssystem verwaltet dynamisch die Ausführung von weiterem Code. Die meisten dieser Ausführungseinheiten heißen Prozesse. (Aber nicht jeder Code ist so. Zum Beispiel werden ladbare Kernel-Module in Linux dynamisch geladen, stellen aber keinen Prozess dar.) Das heißt, ein Prozess ist ein abstraktes Konzept im Betriebssystem, das zwischen dem eigenen Code des Betriebssystems abgrenzt und der "gehostete" Code, den er auf Anfrage ausführt.
Abhängig von der Art des Betriebssystems kann die Ausführung von Prozessen interessante Funktionen wie virtuellen Speicher (jeder Prozess sieht eigenen, separaten Speicher) und Schutz haben (kein Prozess kann den Betrieb des Betriebssystems oder anderer Prozesse beeinträchtigen) . Betriebssysteme implementieren solche Features, indem sie CPU-Features verwenden: eine Speichermanagereinheit, die Adressumsetzung bereitstellt, und Schutzringe, die die für eine Ausführung verfügbaren Befehle begrenzen. Nicht alle Betriebssysteme tun dies jedoch; In DOS beispielsweise hat jeder Prozess vollen Zugriff auf den physischen Speicher und damit auf den Zustand des Betriebssystems. Ungeachtet dessen stellt ein OS typischerweise eine API für Prozesse (z. B. "Systemaufrufe") bereit, die wiederum Hardwarefunktionen (Unterbrechungen oder spezielle Systemaufrufbefehle) verwenden, und Benutzercode interagiert im Allgemeinen mit der Umgebung über diese API, anstatt mit Peripheriegeräten direkt zu sprechen. Dies bedeutet beispielsweise, dass Hardwaretreiber nur vom Betriebssystem implementiert werden und Benutzercode undurchsichtige "Druckausgabe" -Aufrufe ausführen kann, ohne die Details der verfügbaren Ausgabegeräte kennen zu müssen.
Beispiel: Vielleicht ist es sinnvoll, zu veranschaulichen, welche Prozesse auf dem beliebten Linux-Betriebssystem ist, auf x86-Hardware ausgeführt werden: Ein neuer Prozess gestartet wird, wenn ein bestehender Prozess (zB eine Schale oder init
) ruft den clone
Systemaufruf , indem der Interrupt 128 ausgelöst wird. Der Interrupt veranlaßt die CPU, die Steuerung an die Interrupt-Handler-Routine zu übertragen, die vom Betriebssystem während des Hochfahrens eingerichtet wurde. Wenn der Interrupt-Handler eingegeben wird, wechselt die CPU zu Ring 0, privilegierter Modus. Der Interrupt-Handler veranlasst den Kernel, den neuen Prozess zu erstellen, und überträgt die Kontrolle dann zurück an den aufrufenden Prozess (was bedeutet, dass er zu Schutzring 3 wechselt, nicht privilegiert; Prozesse werden nur in Ring 3 ausgeführt). Zur Erstellung des neuen Prozesses legt der Kernel die relevanten internen Buchhaltungsstrukturen an, richtet neue Seitentabellen in der MMU ein und übergibt dann die Kontrolle an den Einstiegspunkt für den Aufruf clone
, ähnlich wie der ursprüngliche Aufruf zurückkehrt. (Ich beschönige hier alle Aspekte der Planung; es findet nur eine Kontrolle statt, und die anderen werden später geplant.) Die Tatsache, dass jetzt ein neuer Prozess existiert, spiegelt sich nur in den internen Buchhaltungsdaten des Kernels wider . Die CPU weiß nichts darüber; Alles was es sieht ist, dass Interrupts gefeuert werden und Seitentabellen regelmäßig geändert werden.
Eine Frage pro Frage! –
Die Antwort lautet Nein, keine CPU kennt Prozesse. Geschützter Modus sandboxiert nur eine Folge von Anweisungen. Es wurde entwickelt, um das Betriebssystem bei der Isolierung von Prozessen zu unterstützen, es ist jedoch vollständig orthogonal dazu. Sie können das Intel-Handbuch 3 für eine detaillierte Erklärung lesen. –
@RobertColumbia Ich habe meine Frage so bearbeitet, dass sie in Ihre Box passt. – Izzo