Wie kann das Betriebssystem auf demselben Chip ausgeführt werden, den es verwalten soll?


17

Durch meine Lektüre über Betriebssysteme (Lesen des Grundmaterials auf Wikipedia, technischen Websites usw.) habe ich erfahren, dass das Betriebssystem ein Programm ist, mit dem Programme und Anwendungen auf effiziente und sichere Weise mit der Hardware interagieren können.

Ich bin jedoch verwirrt darüber, wie das Betriebssystem den Betrieb des Computers überwacht, wenn er selbst betrieben werden muss.

Was meine ich? Nun, so wie ich mir ein Betriebssystem vorstellen würde, würde es auf einem Computer zwei CPUs geben. Eines, auf dem das Betriebssystem ständig ausgeführt wird, und eines, auf dem das Betriebssystem den Computer ausführt. Es stellt sich jedoch heraus, dass das Betriebssystem auf derselben CPU wie die anderen Prozesse ausgeführt wird. Dies ist so, als müsste ein Manager an der gleichen Produktionslinie wie seine Mitarbeiter arbeiten und die Elektrowerkzeuge nur benutzen, wenn ein anderer Mitarbeiter damit fertig ist. Er wäre kein sehr effektiver Manager, da er nicht in der Lage wäre, Befehle zu erteilen, wenn sein Mitarbeiter sogar ein wenig undiszipliniert wäre.

Wie kann es also sein, dass das Betriebssystem nur einen Teil der Zeit auf derselben CPU läuft, die von allen anderen Prozessen gemeinsam genutzt werden muss? Wie funktioniert das?


1
Ein Manager sollte nicht die Elektrowerkzeuge seiner Angestellten benutzen! Stattdessen muss er sicherstellen, dass die Mitarbeiter über funktionierende Elektrowerkzeuge verfügen.
MSalters

Antworten:


15

Moderne CPUs kennen das Betriebssystem bis zu einem gewissen Grad. Sie bieten einige "Elektrowerkzeuge" für den ersten, der sie beansprucht. In der Regel ist dies der Bootloader, der die Steuerung dann an das Betriebssystem übergibt. Man spricht normalerweise von "Kernel-Modus" vs "Benutzermodus" oder "Ring 0" vs "Ring 3" , um zwischen dem einen Prozess mit den zusätzlichen Rechten und dem anderen zu unterscheiden.

Diese "Elektrowerkzeuge" sind bestimmte Berechtigungen für die Ressourcenverwaltung: Steuern Sie den Speicher, den Zugriff auf die Hardware und wie lange Code auf Benutzerebene ohne Unterbrechung ausgeführt werden kann.

Die CPU führt das Betriebssystem mit ihren speziellen Berechtigungen aus, wenn eines der folgenden Ereignisse eintritt:

  1. Ein Benutzermodusprozess übergibt die Steuerung explizit an den Kernelmodusprozess. Dies wird als Syscall bezeichnet .
  2. Der Kernel-Modus-Prozess kann seine speziellen Berechtigungen verwenden, um sich für bestimmte Ereignisse zu registrieren (z. B. sendet externe Hardware ein spezielles Signal an die CPU oder ein User-Space-Prozess versucht, auf eine reservierte Ressource zuzugreifen). Wenn ein solches Ereignis eintritt, stoppt die CPU sofort den Benutzermodus und übergibt die Steuerung an den Kernelmodus. Normalerweise spricht man von einem Interrupt .

Das Betriebssystem kann also auf demselben Chip ausgeführt werden, da der Chip dafür entwickelt wurde. Es kann sich Sonderprivilegien vorbehalten. Die CPU kann alle anderen Codeteile ohne diese speziellen Berechtigungen jederzeit unterbrechen und die Steuerung an das Betriebssystem übergeben.

Einige Chips mit sehr eingeschränkter Unterstützung (z. B. ein Mikrocontroller ) unterstützen diesen speziellen privilegierten Code nicht. Diese Chips laufen normalerweise ohne Betriebssystem. Es wird nur ein großes Programm ausgeführt, das direkt auf die Hardware zugreifen kann, auf die Hardware-Interrupts reagieren muss und jederzeit auf alle Ressourcen zugreifen kann. Wenn dieses Programm einen Fehler macht, stürzt normalerweise das Ganze ab.


17

In ihrer primitivsten Form verlassen sich Betriebssysteme darauf, dass sich Prozesse gut verhalten und die Steuerung von Zeit zu Zeit an das Betriebssystem zurückgeben. Wenn sich ein Prozess nicht gut verhält, kann es tatsächlich vorkommen, dass das Betriebssystem einfriert.

Die meisten CPUs haben jedoch Interrupts : Ein Interrupt unterbricht den aktuellen Prozess (preemption) und übergibt die Steuerung an das Betriebssystem. Sie können festlegen, dass Interrupts in bestimmten Intervallen auftreten oder extern ausgelöst werden (z. B. durch Drücken der Reset-Taste).

Grundsätzlich wechselt die CPU zwischen dem Ausführen des Betriebssystems und dem Ausführen von Prozessen mit einer rasanten Geschwindigkeit hin und her. Weiterhin haben CPUs "Benutzermodus" und "Kernelmodus". Prozesse werden im Benutzermodus und das Betriebssystem im Kernelmodus ausgeführt. Die Ausführung im Benutzermodus verhindert, dass ein Prozess eingeschränkte Befehle (z. B. E / A) ausführt. Wenn ein Prozess auf die Festplatte schreiben möchte, muss er das Betriebssystem dazu auffordern. Das Betriebssystem wechselt in den Kernel-Modus und schreibt im Namen des Prozesses (nachdem sichergestellt wurde, dass der Prozess über die erforderlichen Berechtigungen verfügt).


7
@Imray Nicht wirklich, für die CPU ist das Betriebssystem nur ein weiteres Stück Code. Die CPU verfügt jedoch über viele Funktionen, die von den Erstellern eines Betriebssystems verwendet werden können.
Tom van der Zanden

3
Ich weiß nicht, ob "Aware of" die richtige Terminologie ist, aber die CPU hat keinen Grund zu existieren, außer ein Betriebssystem auszuführen. Es ist definitiv nicht völlig unabhängig. Tatsächlich ist die CPU völlig auf das Betriebssystem angewiesen, um ihre verschiedenen Modi zu verwalten und ihr sonst mitzuteilen, was zu tun ist.
Mohair

2
@Mohair Es gibt viele Mikrocontroller, die überhaupt ohne Betriebssystem laufen, zählen diese als CPUs?
Tom van der Zanden

2
"Zählen diese als CPUs?" Natürlich tun sie das. Das Gleiche gilt für den 6502 in meinem ersten Computer, obwohl er keine eindeutigen Benutzer- und Kernelringe hat und Sie pokevon der Befehlszeile aus alle Arten von Unheil anrichten können.
dmckee

2
@TomvanderZanden wie genau geht das the CPU switches back and forth between running the OS and running processes? Was löst den Schalter aus?
Jnovacho

1

Sie benötigen keine zwei unterschiedlichen Prozessoren, damit der Mikroprozessor den Userspace- und den Kernel-Space-Code ausführt. Grundsätzlich funktioniert es auf diese Weise, wenn Sie Ihren Computer einschalten. Ihr BIOS lädt den Bootloader (512 KB-Code auf der Festplatte, der die Signatur des Bootloaders endet), um diesen zu rammen. Durch diesen Bootloader wird Ihr Kernel in den RAM geladen und läuft für immer, bis Sie Ihren Computer herunterfahren. Und Ihr Kernel verwaltet den Speicher und lässt nicht zu, dass Ihr Kernel-Code, der sich auf dem RAM befindet, nicht vom User-Space-Code überschrieben wird. Zu diesem Zweck gibt es Systemaufrufe, deren Userspace-Code mit diesen Systemaufrufen aufgerufen wird und die Ihren Userspace-Code zum RAM hinzufügen und mit dessen Ausführung beginnen. In Betriebssystemen wird dieses Konzept als Memory Management erforscht. Hier ist der Link, den Sie lesen können. Er ist sehr gut zum Starten https://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf


0

Um auf anderen Antworten aufzubauen, ist es einfacher zu verstehen, wenn Sie glauben, dass der Kernel selbst kein Prozess, sondern ein Verwaltungscode ist. Jeder Benutzerprozess kann vom Benutzermodus in den Kernelmodus wechseln und Kernelcode (privilegierte Anweisungen) ausführen, indem er einen Teil des Kernelspeichers verwendet. Anschließend kann der Prozess in den Benutzermodus zurückkehren und erneut im Benutzerbereich ausgeführt werden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.