Czym jest syscall?
Część sekcji Podstawy ścieżki Assembly w Coddy. Lekcja 31 z 45.
Napisano już instrukcje asemblera, takie jak mov i lea. Instrukcje te są wykonywane bezpośrednio przez procesor. Ale co zrobić, gdy trzeba wykonać coś, czego procesor nie potrafi zrobić samodzielnie, na przykład wypisać coś na ekranie, odczytać dane z klawiatury lub zakończyć program?
Do tych zadań potrzebujesz systemu operacyjnego (w tym kursie jest to Linux).
Czym jest wywołanie systemowe?
Wywołanie systemowe (system call) to żądanie wysyłane przez Twój program do systemu operacyjnego. W ten sposób prosisz system operacyjny o wykonanie czegoś za Ciebie.
Dlaczego potrzebujesz wywołań systemowych:
| Zadanie | Czy CPU może wykonać je samodzielnie? | Czy potrzebne jest wywołanie systemowe? |
|---|---|---|
| Dodawanie dwóch liczb | Tak | Nie |
| Przenoszenie danych między rejestrami | Tak | Nie |
| Wyświetlanie tekstu na ekranie | Nie | Tak |
| Odczytywanie danych z klawiatury | Nie | Tak |
| Zamykanie programu | Nie | Tak |
| Otwieranie pliku | Nie | Tak |
Jak działa wywołanie systemowe:
- Umieszczasz numer wywołania systemowego w
rax(informuje system operacyjny, czego chcesz) - Umieszczasz argumenty w innych rejestrach (
rdi,rsi,rdxitd.) - Wykonujesz instrukcję
syscall
- Procesor przechodzi do jądra systemu operacyjnego
- System operacyjny wykonuje żądanie
- System operacyjny przekazuje sterowanie z powrotem do twojego programu
Analogia:
Pomyśl o wywołaniu systemowym jak o kontakcie z urzędem:
| Krok | Analogia | W asemblerze |
|---|---|---|
| 1 | Zdecyduj, jakiej usługi potrzebujesz | Wybierz numer wywołania systemowego (wpisz go do rax) |
| 2 | Wypełnij formularze | Umieść argumenty w rejestrach |
| 3 | Złóż wniosek | Wykonaj syscall |
| 4 | Urząd go rozpatruje | Jądro systemu operacyjnego wykonuje pracę |
| 5 | Odbierz wynik | Program działa dalej |
Wywołania systemowe, których nauczysz się w tym kursie:
| Wywołanie systemowe | Numer | Co robi | Rozdział |
|---|---|---|---|
exit | 60 | Kończy program | Rozdział 4 |
write | 1 | Wyświetla tekst na ekranie | Rozdział 5 |
Na razie najważniejsze wywołanie systemowe: exit
Bez exit Twój program działałby w nieskończoność albo uległ awarii. Każdy napisany przez Ciebie program musi kończyć się wywołaniem systemowym exit.
mov rax, 60 ; numer wywołania systemowego dla exit
mov rdi, 0 ; kod zakończenia (0 = sukces)
syscall ; poproś system operacyjny o zakończenie programuSpróbuj swoich sił
Ta lekcja nie zawiera wyzwania z kodem.
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy
1Maszyna
Czym jest CPUPamięćRejestry a pamięćJak działają instrukcjeWzorzec dwóch plikówArchitektura x86-642Systemy liczbowe
Dlaczego system binarny?Liczby binarneZamiana z systemu dziesiętnego na binarnyDlaczego system szesnastkowy?Zamiana z systemu szesnastkowego na dziesiętnyZamiana z systemu dziesiętnego na szesnastkowyASCII i system szesnastkowy5Wywołanie systemowe zakończenia
Czym jest syscall?Wywołanie systemowe zakończenia (60)Kody zakończeniaPodsumowanie: prawidłowe zakończeniePoćwicz samodzielnie: Edytor online Assembly