Gerade in der heutigen Zeit müssen Be­triebs­sys­te­me Nutzern nicht nur den höchst­mög­li­chen Komfort, sondern auch maximale Sta­bi­li­tät und Si­cher­heit bieten. Die Ent­wick­ler von Systemen wie Linux oder Windows sind daher u. a. darum bemüht, das Risiko po­ten­zi­el­ler Sys­tem­kom­pli­ka­tio­nen infolge von ver­se­hent­li­chem Ei­gen­ver­schul­den oder gezielten Angriffen von außen so gering wie möglich zu halten. Eine der wich­tigs­ten Maßnahmen, die zu diesem Zweck getroffen wurden, ist die strikte Trennung von Be­triebs­sys­tem­kern (Kernel) und An­wen­dungs­pro­gram­men bzw. Be­nut­zer­pro­zes­sen. Diese hat zur Folge, dass Programme und Prozesse, die nicht zum System gehören, keinen direkten Zugriff auf CPU und Speicher haben, sondern auf so­ge­nann­te System Calls (dt. Sys­tem­auf­ruf) an­ge­wie­sen sind.

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

Was ist ein System Call (Syscall)?

Ein System Call (dt. Sys­tem­auf­ruf) oder kurz Syscall ist eine von An­wen­dungs­pro­gram­men ein­ge­setz­te Methode zur Kom­mu­ni­ka­ti­on mit dem Sys­tem­kern. In modernen Be­triebs­sys­te­men kommt diese Methode zum Einsatz, wenn eine Be­nut­zer­an­wen­dung bzw. ein -prozess In­for­ma­tio­nen an die Hardware, andere Prozesse oder den Kernel selbst über­mit­teln bzw. In­for­ma­tio­nen aus diesen Quellen lesen muss. Damit ist ein solcher Aufruf das Bin­de­glied zwischen Be­nut­zer­mo­dus (User-Mode) und Ker­nel­mo­dus (Kernel-Mode), den beiden ent­schei­den­den Pri­vi­le­gie­rungs- und Si­cher­heits­mo­di zur Ver­ar­bei­tung von CPU-Befehlen in Com­pu­ter­sys­te­men.

Bis ein System Call be­ar­bei­tet und die ent­spre­chen­den Daten über­mit­telt bzw. erhalten wurden, übernimmt der Sys­tem­kern die Kontrolle über das Programm bzw. den Prozess. Die Aus­füh­rung ist in diesem Zeitraum un­ter­bro­chen. Sobald die von einem Sys­tem­auf­ruf an­ge­for­der­te Aktion durch­ge­führt wurde, gibt der Kernel die Kontrolle wieder ab und der Pro­gramm­code wird an der Stelle fort­ge­führt, an der zuvor der Syscall gestartet wurde.

Hinweis

Ein Großteil der modernen Be­triebs­sys­te­me stellt bestimmte System Calls in Form von Bi­blio­theks­funk­tio­nen zur Verfügung, die sich über eine ebenfalls be­reit­ge­stell­te Pro­gram­mier­schnitt­stel­le ausführen lassen. Das er­leich­tert Software-Ent­wick­lern die Arbeit enorm, da in der Folge kein genaueres Wissen über die interne Funk­ti­ons­wei­se der je­wei­li­gen Sys­tem­soft­ware benötigt wird.

Wofür werden System Calls benötigt?

Die Not­wen­dig­keit von Sys­tem­auf­ru­fen ist eng an das moderne Be­triebs­sys­tem­mo­dell mit Be­nut­zer­mo­dus und Ker­nel­mo­dus gebunden, das als Antwort auf die steigende Zahl an gleich­zei­tig ab­lau­fen­den Prozessen im Haupt­spei­cher (Ar­beits­spei­cher) von Rechnern ein­ge­führt wurde. So besitzt jeder einzelne Prozess eigene Daten mit spe­zi­el­len Zu­griffs­be­rech­ti­gun­gen und nur bei einer fairen Auf­tei­lung der Res­sour­cen ist eine ord­nungs­ge­mä­ße Aus­füh­rung von System und An­wen­dungs­pro­gram­men möglich.

Der höher pri­vi­le­gier­te Ker­nel­mo­dus ist hierbei die ent­schei­den­de Steu­er­in­stanz, denn in ihm werden – wie bereits an­ge­deu­tet – nicht nur alle Dienste und Prozesse des Systems selbst aus­ge­führt, sondern auch sys­tem­kri­ti­sche Aktionen von An­wen­dungs­pro­gram­men, die im Be­nut­zer­mo­dus blockiert sind. Vor­aus­set­zung ist der passende System Call durch das jeweilige Programm, wobei es in den meisten Fällen ganz einfach um den Zugriff auf Re­chen­leis­tung (CPU) oder die Spei­cher­struk­tu­ren (Ar­beits­spei­cher und Fest­plat­ten­spei­cher) geht. Benötigt eine Anwendung also bei­spiels­wei­se mehr Re­chen­power oder Spei­cher­platz oder wird eine an­wen­dungs­frem­de Datei (Öffnen, Lesen, Be­ar­bei­ten etc.) an­ge­for­dert, sind System Calls un­ver­zicht­bar.

Fazit

Ver­ein­facht lässt sich sagen, dass ein Sys­tem­auf­ruf überall dort benötigt wird, wo ein im Be­nut­zer­mo­dus laufender Prozess eine Funktion ausführen möchte, die nur im Ker­nel­mo­dus aus­führ­bar ist.

Welche Typen von System Calls gibt es?

Grund­sätz­lich lassen sich alle Sys­tem­auf­ru­fe wie bereits erwähnt als Steu­er­ein­hei­ten für die Kom­mu­ni­ka­ti­on zwischen An­wen­dungs­pro­zes­sen und dem Be­triebs­sys­tem bzw. der Hardware. Zu­sätz­lich lassen sich die eta­blier­ten System Calls aber auch in ver­schie­de­ne Ka­te­go­rien einordnen, wobei sich ins­be­son­de­re folgende fünf Ein­stu­fungs­ty­pen etabliert haben:

  • Pro­zess­kon­trol­le: Alle Prozesse eines Com­pu­ter­sys­tems müssen kon­trol­liert werden, damit sie jederzeit gestoppt oder von anderen Prozessen an­ge­steu­ert werden können. Zu diesem Zweck über­wa­chen System Calls dieser Kategorie bei­spiels­wei­se den Start bzw. die Aus­füh­rung oder das Stoppen bzw. Abbrechen von Prozessen.
  • Da­tei­ma­nage­ment: Sys­tem­auf­ru­fe dieses Typs werden von An­wen­dungs­pro­gram­men benötigt, um Zugriff auf die typischen Da­tei­ope­ra­tio­nen zu erhalten. Zu diesen Methoden zur Da­tei­ma­ni­pu­la­ti­on zählen u. a. „create“ (erstellen), „delete“ (löschen), „open“ (öffnen), „close“ (schließen), „write“ (schreiben) und „read“ (lesen).
  • Ge­rä­te­ma­nage­ment: Zur Kategorie „Ge­rä­te­ma­nage­ment“ zählen alle System Calls, die dem Zweck dienen, er­for­der­li­che Hardware-Res­sour­cen wie Re­chen­leis­tung oder Spei­cher­platz an­zu­for­dern bzw. zu verwalten.
  • In­for­ma­ti­ons­ver­wal­tung: Prozesse sind an eine Menge In­for­ma­tio­nen geknüpft, bei denen Ak­tua­li­tät und In­te­gri­tät eine wichtige Rolle spielen. Um diese aus­zu­tau­schen oder ein­zu­for­dern, verwenden An­wen­dungs­pro­gram­me System Calls zur In­for­ma­ti­ons­ver­wal­tung bzw. -in­stand­hal­tung.
  • In­ter­pro­zess­kom­mu­ni­ka­ti­on: Ein rei­bungs­lo­ses Zu­sam­men­spiel zwischen Be­triebs­sys­tem und den ver­schie­de­nen aktiven An­wen­dungs­pro­gram­men ist nur ge­währ­leis­tet, wenn die einzelnen Prozesse gut auf­ein­an­der ab­ge­stimmt sind. Zu diesem Zweck ist eine Kom­mu­ni­ka­ti­on über ent­spre­chen­de System Calls un­ver­zicht­bar.

Windows und Linux: System Calls im Überblick

Inwieweit die auf­ge­zähl­ten Typen von Sys­tem­auf­ru­fen rea­li­siert werden bzw. ein­ge­setzt werden können, hängt in erster Linie von der ver­wen­de­ten Hardware und Sys­tem­ar­chi­tek­tur, aber auch vom ver­wen­de­ten Be­triebs­sys­tem ab. In Linux sind System Calls bei­spiels­wei­se direkt im Linux-Kernel in der „System Call Table“ ge­spei­chert. Jedem Eintrag in dieser Tabelle ist dabei eine ein­zig­ar­ti­ge Nummer sowie eine bestimmte Funktion, die im Ker­nel­mo­dus aus­zu­füh­ren ist, zu­ge­ord­net. Zur Aus­füh­rung eines be­lie­bi­gen Linux-System-Calls wird die jeweilige Nummer in den Speicher der CPU geladen und im Anschluss per Software-Interrupt 128 (Aufruf einer Un­ter­funk­ti­on des Be­triebs­sys­tems, der die Pro­gramm­aus­füh­rung im Be­nut­zer­mo­dus un­ter­bricht) geladen.

Ähnlich ist die Funk­ti­ons­wei­se in Windows-Systemen, wo ein System Call al­ler­dings immer zunächst intern um­ge­wan­delt wird: Aus einer Bi­blio­theks­funk­ti­on der Windows-API (kurz WinAPI) wird so au­to­ma­tisch ein vom Be­triebs­sys­tem lesbarer Sys­tem­auf­ruf inklusive ein­zig­ar­ti­ger Nummer, die auf die ge­wünsch­te Funktion im Ker­nel­mo­dus verweist.

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

Typ des System Calls Funktion Linux Windows
Pro­zess­kon­trol­le Prozess erstellen fork() Crea­tePro­cess()
Pro­zess­kon­trol­le Prozess beenden exit() ExitPro­cess()
Da­tei­ma­nage­ment Datei erstellen/öffnen open() Crea­teFi­le()
Da­tei­ma­nage­ment Datei lesen read() ReadFile()
Da­tei­ma­nage­ment Datei be­ar­bei­ten write() WriteFile()
Da­tei­ma­nage­ment Datei schließen close() Clo­se­Hand­le()
Ge­rä­te­ma­nage­ment Gerät öffnen read() Re­ad­Con­so­le()
Ge­rä­te­ma­nage­ment Gerät schließen close() Clo­se­Con­so­le()
In­for­ma­ti­ons­ver­wal­tung Festlegen eines be­stimm­ten Zeit­in­ter­valls alarm() SetTimer()
In­for­ma­ti­ons­ver­wal­tung Pausieren (z. B. eines Prozesses) sleep() Sleep()
Kom­mu­ni­ka­ti­on Pipe erstellen (Puffer für Da­ten­strom zwischen zwei Prozessen) pipe() Crea­tePi­pe()
Kom­mu­ni­ka­ti­on Anlegen eines ge­mein­sa­men Speichers (Shared Memory) shmget() Crea­teFi­le­Map­ping()

Eine voll­stän­di­ge Auf­lis­tung aller re­le­van­ten Linux-System-Calls inklusive der ent­spre­chen­den Nummern in x86- bzw. i386-Ar­chi­tek­tu­ren finden Sie auf Wikipedia.

Tipp

Sind Sie auf der Suche nach leis­tungs­star­ker Hardware zur Ver­ar­bei­tung Ihrer An­wen­dungs­pro­zes­se? Die VPS-Lösungen von IONOS bieten Ihnen modernste Server auf Cloud-Basis zum Spit­zen­preis – wahlweise mit Windows oder Linux als Be­triebs­sys­tem.

Zum Hauptmenü