System calls Flashcards
Wo befindet sich die System call Schnittstelle?
Zwischen Kernel- und User Space
Was ist ein Systemcall
System Calls sind Teil der Programmierschnittstelle, die ein Betriebssystem Anwendungsprogrammen anbietet, um dessen Services zu nutzen.
erfordern einen Wechsel aus dem User Mode in den Kernel Mode. Dieser Wechsel wird durch eine Trap Instruction ausgelöst
System call ablauf
- Anwendung ruft eine Systemfunktion auf.
- Parameter werden vorbereitet.
- Wechsel in den Kernel-Modus.
- Der Kernel identifiziert und überprüft den Systemaufruf.
- Berechtigungen werden überprüft.
- Der Kernel führt den Systemaufruf aus.
- Ergebnisse oder Fehlercodes werden zurückgegeben.
- Die Anwendung setzt ihre Ausführung fort und verarbeitet Ergebnisse oder Fehler.
Dies ermöglicht Anwendungen, auf Betriebssystemressourcen zuzugreifen und privilegierte Operationen sicher auszuführen.
Beispiele für System Calls, die Prozesse verwalten
- fork(2) erzeugt eine Kopie des aktuellen Prozesses.
- wait(2) wartet auf die Zustandsänderung eines Kindprozesses.
- execve(2) ersetzt das Prozessabbild des aktuellen Prozesses durch ein anderes Programm.
- kill(2) sendet ein Signal an einen anderen Prozess.
fork()
Es erzeugt ein exaktes Duplikat des laufenden Prozesses:
- Return Value im Parent ist PID des Kindes.
- Return Value im Child ist 0.
- Damit können Parent und Child unterschieden werden.
Parent und Child laufen voneinander entkoppelt weiter. Parent kann Ausführung des Kindes mit wait(2) abwarten.
System calls für Filemanagement
- stat(2) liefert Zustandsinformationen (z.B. Typ, Größe, Owner) zu einer Datei.
- open(2) und close(2) öffnen bzw. schließen eine Datei.
- read(2) und write(2) lesen bzw. schreiben eine geöffnete Datei.
- mkdir(2) und rmdir(2) erstellen bzw. löschen ein Verzeichnis.
- link(2) und unlink(2) erstellen bzw. löschen einen Hard Link.
- mount(2) und unmount(2) mounten bzw. unmounten ein Dateisystem.
- chmod(2) ändert die Berechtigungen einer Datei.
- chown(2) ändert den Besitzer einer Datei.
- chdir(2) wechselt das Arbeitsverzeichnis.
- time(2) fragt die aktuelle Systemzeit ab.
Unterschied zwischen User Mode und Kernel Mode
User mode:
- Eingeschränkter Befehlssatz
- kann nicht auf alle Speicherbereiche und auch nicht auf alle Betriebsmittel zugegriffen
- Durch ein Steuer- oder Kontrollregister auf der CPU wird der User-Mode angezeigt.
- Anwendungsprogramme arbeiten üblicherweise im User-Mode. Diese haben damit nur sehr eingeschränkte Möglichkeiten, das soll auch so sein.
Kernel Mode:
- Jeder beliebige Befehl zur Ausführung
zugelassen. - kann auf sämtliche Speicherbereiche für Daten- und Programmtext, sowie auf alle Betriebsmittel zugreifen.
- Das Betriebssystem arbeitet üblicherweise im Kernel-Mode und hat somit alle Möglichkeiten, seine definierten Aufgaben zu erfüllen.
Warum existieren verschiedene Betriebsmodi (CPU) ?
In modernen Betriebssystemen sind Anwendungen und das Betriebssystem voneinander getrennt.
Das Betriebssystem läuft im Kernelmodus mit umfassendem System- und Hardwarezugriff, während Anwendungen im Benutzermodus agieren, eingeschränkten Zugriff auf Systemressourcen haben und dafür kontrollierte APIs verwenden.
Wie findet der Übergang vom User in Kernel Modus statt?
Der Wechsel vom Kernel-Mode zum User-Mode ist unproblematisch, da die Rechte eingeschränkt werden, ohne Sicherheitsbedenken. Das Betriebssystem initiiert diesen Übergang, wenn es der Anwendungsprozess CPU-Zeit zuweist.
Im Gegensatz dazu ist der Übergang vom User-Mode zum Kernel-Mode kritischer. Ein Anwendungsprozess darf nicht direkt auf Kernel-Rechte zugreifen, sondern benötigt dazu einen Systemaufruf (System Call).