Syscall

Aus Lowlevel

Wechseln zu: Navigation, Suche

Ein Syscall wird verwendet, um Programmen Zugriff auf Funktionen im Kernel zu gewähren. Da Programme in separaten Adressräumen untergebracht sind und nicht im Kernelmodus (d.h. im Ring 0 im Protected/Long-Mode) ausgeführt werden, ist es unmöglich für das Programm bestimmte Aktionen wie Interprozesskommunikation selbstständig auszuführen.

Inhaltsverzeichnis

Parameterübergabe

Der aufrufende Prozess füllt entweder die Syscall-Parameter in Prozessorregister oder legt sie auf den Stack. Meistens wird der Syscall, den der Prozess aufrufen will über eine Nummer als Parameter übergeben.

Anschließend löst der Prozess einen Syscall aus.

Auslösen des Syscalls

Meistens werden Syscalls mithilfe eines Software-Interrupts realisiert. Der auszulösende Softwareinterrupt hat normalerweise eine fest kodierte Nummer. Linux verwendet beispielsweise den Interrupt 0x80. In manchen Prozessoren sind spezielle Instruktionen für ein performanteres Auslösen von Syscalls vorgesehen. Beispielsweise unterstützen neuere x86 AMD Prozessoren die syscall Instruktion. Im Unterschied dazu unterstützen neuere Intel Prozessoren die sysenter Instruktion.

Anschließend befindet sich der Prozessor im Kernelmodus und der Kernel übernimmt die Behandlung des Syscalls.

Behandlung des Syscalls

Im Kernel wird dann ein Syscallhandler verwendet um die Funktion aufzulösen und die Parameter zu übergeben. Diese Funktion führt dann die vom Programm gewünschte Aktion aus (falls das Programm die benötigten Rechte dazu hat). Anschließend kehrt die Funktion zurück zu dem Programm (und gibt möglicherweise einen oder mehrere Rückgabewerte über Prozessorregister oder Stack zurück. Alternativ dazu kann das Programm auch geblockt werden, falls beispielsweise die Anfrage nach Daten von der Festplatte nicht sofort (über Caches) beantwortet werden kann, oder das Programm wird terminiert.

siehe auch

Persönliche Werkzeuge