Menu
CoddyTech

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:

ZadanieCzy CPU może wykonać je samodzielnie?Czy potrzebne jest wywołanie systemowe?
Dodawanie dwóch liczbTakNie
Przenoszenie danych między rejestramiTakNie
Wyświetlanie tekstu na ekranieNieTak
Odczytywanie danych z klawiaturyNieTak
Zamykanie programuNieTak
Otwieranie plikuNieTak

Jak działa wywołanie systemowe:

  1. Umieszczasz numer wywołania systemowego w rax (informuje system operacyjny, czego chcesz)
  2. Umieszczasz argumenty w innych rejestrach (rdi, rsi, rdx itd.)
  3. Wykonujesz instrukcję syscall
  1. Procesor przechodzi do jądra systemu operacyjnego
  2. System operacyjny wykonuje żądanie
  3. System operacyjny przekazuje sterowanie z powrotem do twojego programu

Analogia:

Pomyśl o wywołaniu systemowym jak o kontakcie z urzędem:

KrokAnalogiaW asemblerze
1Zdecyduj, jakiej usługi potrzebujeszWybierz numer wywołania systemowego (wpisz go do rax)
2Wypełnij formularzeUmieść argumenty w rejestrach
3Złóż wniosekWykonaj syscall
4Urząd go rozpatrujeJądro systemu operacyjnego wykonuje pracę
5Odbierz wynikProgram działa dalej

Wywołania systemowe, których nauczysz się w tym kursie:

Wywołanie systemoweNumerCo robiRozdział
exit60Kończy programRozdział 4
write1Wyświetla tekst na ekranieRozdział 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 programu

Spróbuj swoich sił

Ta lekcja nie zawiera wyzwania z kodem.

quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Edytor online Assembly