Systemrufe

Systemrufe sind Funktionen, die unser Betriebssystem den Prozessen zur Verfügung stellt, um bestimmte Aktionen auszuführen, die der Prozess nicht selbst implementieren soll. Bspw. Prozesserstellung mittels fork() oder Dateilesen mittels read. Es gibt einige Möglichkeiten Systemrufe zu implementieren.

Aufruf mittels Interrupt

Zu DOS-Zeiten üblich, und auch bis heute im Linux-Kern ist die Möglichkeit Systemrufe mittels Intterrupts zu rufen. Dabei setzen wir im Prozess bestimmte Registerwerte, sodass genau der Systemruf gerufen wird, mit den Parametern, die wir wollen, und rufen dann einen Software-Interrupt, mit einer bestimmten Nummer. Die CPU erhält den Interrupt, behandelt ihn, dh. springt in die Interrupt Service Routine des Betriebssystems, und anhand der Registerwerte kann das Betriebssystem bestimmte Aktionen vornehmen. Ist die Interrupt Service Routine fertig ausgeführt worden, wird zurück in unseren Prozesscode gesprungen, der unterbrochen wurde (interrupted).

Variante: ''syscall''-Befehl

Auf einem X86 mit AMD64 Erweiterung besteht jetzt auch die Möglichkeit direkt syscall als Befehl zu rufen, der an und für sich ähnlich dem Interrupt funktioniert. Dh. anhand von bestimmten Registerwerten wird dem Betriebssystem mitgeteilt, welche Aktion mit welchen Parametern ausgeführt werden soll.

Funktionsruf

Manche Funktionen bedürfen keinem Kontextwechsel und können evtl. sogar im virtuellen Adressraum des Prozesses ausgeführt werden, dh. wir können Systemrufe als Funktion anbieten. Wird die Funktion gerufen, wird an eine bestimmte Adresse im virtuellen Adressraum des Prozesses gesprungen, der den Code für genau den Systemruf enthält.

Dieser Code liegt lediglich einmal im Speicher und wird in den virtuellen Adressraum aller Prozesse eingeblendet (siehe virtueller Speicher / Speicherverwaltung).