Was ist ein Syscall?
Teil des Abschnitts Grundlagen der Assembly-Journey von Coddy. Lektion 31 von 45.
Du hast Assemblerbefehle wie mov und lea geschrieben. Diese Befehle werden direkt auf der CPU ausgeführt. Aber was ist, wenn du etwas tun musst, was die CPU nicht selbst kann, etwa etwas auf dem Bildschirm ausgeben, von der Tastatur lesen oder ein Programm beenden?
Für diese Aufgaben benötigst du das Betriebssystem (in diesem Kurs Linux).
Was ist ein Systemaufruf?
Ein Systemaufruf (syscall) ist eine Anfrage deines Programms an das Betriebssystem. So bittest du das Betriebssystem, etwas für dich zu erledigen.
Warum du Systemaufrufe brauchst:
| Aufgabe | Kann die CPU das allein erledigen? | Systemaufruf erforderlich? |
|---|---|---|
| Zwei Zahlen addieren | Ja | Nein |
| Daten zwischen Registern verschieben | Ja | Nein |
| Text auf dem Bildschirm ausgeben | Nein | Ja |
| Tastatureingabe lesen | Nein | Ja |
| Ein Programm beenden | Nein | Ja |
| Eine Datei öffnen | Nein | Ja |
So funktioniert ein Systemaufruf:
- Du legst eine Systemaufrufnummer in
raxab (sie teilt dem Betriebssystem mit, was du möchtest) - Du legst Argumente in anderen Registern ab (
rdi,rsi,rdxusw.) - Du führst die Anweisung
syscallaus
- Die CPU springt in den Betriebssystemkernel
- Das Betriebssystem führt die Anfrage aus
- Das Betriebssystem gibt die Kontrolle an dein Programm zurück
Analogie:
Stell dir einen Systemaufruf wie den Besuch bei einer Behörde vor:
| Schritt | Analogie | In Assembly |
|---|---|---|
| 1 | Entscheide, welchen Dienst du benötigst | Wähle die Nummer des Systemaufrufs (in rax eintragen) |
| 2 | Fülle die Formulare aus | Lege die Argumente in den Registern ab |
| 3 | Reiche den Antrag ein | Führe syscall aus |
| 4 | Die Behörde bearbeitet den Antrag | Der Betriebssystemkernel erledigt die Arbeit |
| 5 | Erhalte dein Ergebnis zurück | Das Programm wird fortgesetzt |
Systemaufrufe, die du in diesem Kurs kennenlernen wirst:
| Systemaufruf | Nummer | Funktion | Kapitel |
|---|---|---|---|
exit | 60 | Beendet das Programm | Kapitel 4 |
write | 1 | Gibt Text auf dem Bildschirm aus | Kapitel 5 |
Der wichtigste Systemaufruf vorerst: exit
Ohne exit würde dein Programm für immer weiterlaufen oder abstürzen. Jedes Programm, das du schreibst, muss mit einem exit-Systemaufruf enden.
mov rax, 60 ; Syscall-Nummer für exit
mov rdi, 0 ; Exit-Code (0 = Erfolg)
syscall ; das Betriebssystem zum Beenden auffordernProbier es selbst
Diese Lektion enthält keine Programmieraufgabe.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
1Die Maschine
Was ist eine CPUSpeicherRegister vs. SpeicherWie Befehle funktionierenZwei-Dateien-MusterDie x86-64 ArchitekturÜbe selbstständig: Assembly-Playground