| Zeile 1: | Zeile 1: | ||
| − | ''' | + | 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 [[IPC | Interprozesskommunikation]] selbstständig auszuführen. |
== Parameterübergabe == | == Parameterübergabe == | ||
| Zeile 9: | Zeile 9: | ||
Meistens werden Syscalls mithilfe eines Software-[[Interrupt]]s 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. | Meistens werden Syscalls mithilfe eines Software-[[Interrupt]]s 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 | + | Anschließend befindet sich der Prozessor im Kernelmodus und der Kernel übernimmt [[Syscall#Behandlung des Syscalls | die Behandlung des Syscalls]]. |
== 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. | 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. | ||