Czym jest syscall?
Część sekcji Podstawy ścieżki Assembly w Coddy. Lekcja 31 z 45.
Napisano już instrukcje asemblera, takie jak mov i lea. Te instrukcje są wykonywane bezpośrednio przez procesor. Ale co zrobić, jeśli trzeba wykonać coś, czego procesor nie potrafi samodzielnie, na przykład wyświetlić 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 syscall?
Syscall (wywołanie systemowe) to żądanie wysyłane przez program do systemu operacyjnego. W ten sposób prosisz system operacyjny o wykonanie czegoś za Ciebie.
Dlaczego potrzebujesz wywołań systemowych:
| Zadanie | Czy procesor 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 syscall:
- Umieszczasz numer syscalla 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 realizuje żądanie
- System operacyjny przekazuje sterowanie z powrotem do twojego programu
Analogia:
Wyobraź sobie wywołanie systemowe (syscall) jako kontakt z urzędem:
| Krok | Analogia | W asemblerze |
|---|---|---|
| 1 | Zdecyduj, jakiej usługi potrzebujesz | Wybierz numer wywołania systemowego (umieść go w 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: <strong>exit</strong>
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