System Calls: Was sind Systemaufrufe und wofür werden sie benötigt?

Gerade in der heutigen Zeit müssen Betriebssysteme Nutzern nicht nur den höchstmöglichen Komfort, sondern auch maximale Stabilität und Sicherheit bieten. Die Entwickler von Systemen wie Linux oder Windows sind daher u. a. darum bemüht, das Risiko potenzieller Systemkomplikationen infolge von versehentlichem Eigenverschulden oder gezielten Angriffen von außen so gering wie möglich zu halten. Eine der wichtigsten Maßnahmen, die zu diesem Zweck getroffen wurden, ist die strikte Trennung von Betriebssystemkern (Kernel) und Anwendungsprogrammen bzw. Benutzerprozessen. Diese hat zur Folge, dass Programme und Prozesse, die nicht zum System gehören, keinen direkten Zugriff auf CPU und Speicher haben, sondern auf sogenannte System Calls (dt. Systemaufruf) angewiesen sind.

Was genau steckt hinter diesen Aufrufen und welche Typen gibt es?

Was ist ein System Call (Syscall)?

Ein System Call (dt. Systemaufruf) oder kurz Syscall ist eine von Anwendungsprogrammen eingesetzte Methode zur Kommunikation mit dem Systemkern. In modernen Betriebssystemen kommt diese Methode zum Einsatz, wenn eine Benutzeranwendung bzw. ein -prozess Informationen an die Hardware, andere Prozesse oder den Kernel selbst übermitteln bzw. Informationen aus diesen Quellen lesen muss. Damit ist ein solcher Aufruf das Bindeglied zwischen Benutzermodus (User-Mode) und Kernelmodus (Kernel-Mode), den beiden entscheidenden Privilegierungs- und Sicherheitsmodi zur Verarbeitung von CPU-Befehlen in Computersystemen.

Bis ein System Call bearbeitet und die entsprechenden Daten übermittelt bzw. erhalten wurden, übernimmt der Systemkern die Kontrolle über das Programm bzw. den Prozess. Die Ausführung ist in diesem Zeitraum unterbrochen. Sobald die von einem Systemaufruf angeforderte Aktion durchgeführt wurde, gibt der Kernel die Kontrolle wieder ab und der Programmcode wird an der Stelle fortgeführt, an der zuvor der Syscall gestartet wurde.

Hinweis

Ein Großteil der modernen Betriebssysteme stellt bestimmte System Calls in Form von Bibliotheksfunktionen zur Verfügung, die sich über eine ebenfalls bereitgestellte Programmierschnittstelle ausführen lassen. Das erleichtert Software-Entwicklern die Arbeit enorm, da in der Folge kein genaueres Wissen über die interne Funktionsweise der jeweiligen Systemsoftware benötigt wird.

Wofür werden System Calls benötigt?

Die Notwendigkeit von Systemaufrufen ist eng an das moderne Betriebssystemmodell mit Benutzermodus und Kernelmodus gebunden, das als Antwort auf die steigende Zahl an gleichzeitig ablaufenden Prozessen im Hauptspeicher (Arbeitsspeicher) von Rechnern eingeführt wurde. So besitzt jeder einzelne Prozess eigene Daten mit speziellen Zugriffsberechtigungen und nur bei einer fairen Aufteilung der Ressourcen ist eine ordnungsgemäße Ausführung von System und Anwendungsprogrammen möglich.

Der höher privilegierte Kernelmodus ist hierbei die entscheidende Steuerinstanz, denn in ihm werden – wie bereits angedeutet – nicht nur alle Dienste und Prozesse des Systems selbst ausgeführt, sondern auch systemkritische Aktionen von Anwendungsprogrammen, die im Benutzermodus blockiert sind. Voraussetzung ist der passende System Call durch das jeweilige Programm, wobei es in den meisten Fällen ganz einfach um den Zugriff auf Rechenleistung (CPU) oder die Speicherstrukturen (Arbeitsspeicher und Festplattenspeicher) geht. Benötigt eine Anwendung also beispielsweise mehr Rechenpower oder Speicherplatz oder wird eine anwendungsfremde Datei (Öffnen, Lesen, Bearbeiten etc.) angefordert, sind System Calls unverzichtbar.

Fazit

Vereinfacht lässt sich sagen, dass ein Systemaufruf überall dort benötigt wird, wo ein im Benutzermodus laufender Prozess eine Funktion ausführen möchte, die nur im Kernelmodus ausführbar ist.

Welche Typen von System Calls gibt es?

Grundsätzlich lassen sich alle Systemaufrufe wie bereits erwähnt als Steuereinheiten für die Kommunikation zwischen Anwendungsprozessen und dem Betriebssystem bzw. der Hardware. Zusätzlich lassen sich die etablierten System Calls aber auch in verschiedene Kategorien einordnen, wobei sich insbesondere folgende fünf Einstufungstypen etabliert haben:

  • Prozesskontrolle: Alle Prozesse eines Computersystems müssen kontrolliert werden, damit sie jederzeit gestoppt oder von anderen Prozessen angesteuert werden können. Zu diesem Zweck überwachen System Calls dieser Kategorie beispielsweise den Start bzw. die Ausführung oder das Stoppen bzw. Abbrechen von Prozessen.
  • Dateimanagement: Systemaufrufe dieses Typs werden von Anwendungsprogrammen benötigt, um Zugriff auf die typischen Dateioperationen zu erhalten. Zu diesen Methoden zur Dateimanipulation zählen u. a. „create“ (erstellen), „delete“ (löschen), „open“ (öffnen), „close“ (schließen), „write“ (schreiben) und „read“ (lesen).
  • Gerätemanagement: Zur Kategorie „Gerätemanagement“ zählen alle System Calls, die dem Zweck dienen, erforderliche Hardware-Ressourcen wie Rechenleistung oder Speicherplatz anzufordern bzw. zu verwalten.
  • Informationsverwaltung: Prozesse sind an eine Menge Informationen geknüpft, bei denen Aktualität und Integrität eine wichtige Rolle spielen. Um diese auszutauschen oder einzufordern, verwenden Anwendungsprogramme System Calls zur Informationsverwaltung bzw. -instandhaltung.
  • Interprozesskommunikation: Ein reibungsloses Zusammenspiel zwischen Betriebssystem und den verschiedenen aktiven Anwendungsprogrammen ist nur gewährleistet, wenn die einzelnen Prozesse gut aufeinander abgestimmt sind. Zu diesem Zweck ist eine Kommunikation über entsprechende System Calls unverzichtbar.

Windows und Linux: System Calls im Überblick

Inwieweit die aufgezählten Typen von Systemaufrufen realisiert werden bzw. eingesetzt werden können, hängt in erster Linie von der verwendeten Hardware und Systemarchitektur, aber auch vom verwendeten Betriebssystem ab. In Linux sind System Calls beispielsweise direkt im Linux-Kernel in der „System Call Table“ gespeichert. Jedem Eintrag in dieser Tabelle ist dabei eine einzigartige Nummer sowie eine bestimmte Funktion, die im Kernelmodus auszuführen ist, zugeordnet. Zur Ausführung eines beliebigen Linux-System-Calls wird die jeweilige Nummer in den Speicher der CPU geladen und im Anschluss per Software-Interrupt 128 (Aufruf einer Unterfunktion des Betriebssystems, der die Programmausführung im Benutzermodus unterbricht) geladen.

Zur Anzeige dieses Videos sind Cookies von Drittanbietern erforderlich. Ihre Cookie-Einstellungen können Sie hier aufrufen und ändern.

Ähnlich ist die Funktionsweise in Windows-Systemen, wo ein System Call allerdings immer zunächst intern umgewandelt wird: Aus einer Bibliotheksfunktion der Windows-API (kurz WinAPI) wird so automatisch ein vom Betriebssystem lesbarer Systemaufruf inklusive einzigartiger Nummer, die auf die gewünschte Funktion im Kernelmodus verweist.

Einige Beispiele für konkrete Windows- und Linux-System-Calls finden Sie in der folgenden Tabelle:

Typ des System Calls Funktion Linux Windows
Prozesskontrolle Prozess erstellen fork() CreateProcess()
Prozesskontrolle Prozess beenden exit() ExitProcess()
Dateimanagement Datei erstellen/öffnen open() CreateFile()
Dateimanagement Datei lesen read() ReadFile()
Dateimanagement Datei bearbeiten write() WriteFile()
Dateimanagement Datei schließen close() CloseHandle()
Gerätemanagement Gerät öffnen read() ReadConsole()
Gerätemanagement Gerät schließen close() CloseConsole()
Informationsverwaltung Festlegen eines bestimmten Zeitintervalls alarm() SetTimer()
Informationsverwaltung Pausieren (z. B. eines Prozesses) sleep() Sleep()
Kommunikation Pipe erstellen (Puffer für Datenstrom zwischen zwei Prozessen) pipe() CreatePipe()
Kommunikation Anlegen eines gemeinsamen Speichers (Shared Memory) shmget() CreateFileMapping()

Eine vollständige Auflistung aller relevanten Linux-System-Calls inklusive der entsprechenden Nummern in x86- bzw. i386-Architekturen finden Sie auf Wikipedia.

Tipp

Sind Sie auf der Suche nach leistungsstarker Hardware zur Verarbeitung Ihrer Anwendungsprozesse? Die VPS-Lösungen von IONOS bieten Ihnen modernste Server auf Cloud-Basis zum Spitzenpreis – wahlweise mit Windows oder Linux als Betriebssystem.