Menu
Coddy logo textTech

Что такое системный вызов?

Часть раздела Основы путешествия по Assembly на Coddy — урок 31 из 45.

Вы писали инструкции ассемблера, такие как mov и lea. Эти инструкции выполняются непосредственно на процессоре. Но что, если вам нужно сделать что-то, что процессор не может сделать сам по себе — например, вывести текст на экран, прочитать данные с клавиатуры или завершить программу?

Для этих задач вам понадобится операционная система (Linux в этом курсе).

Что такое syscall?

Syscall (системный вызов) — это запрос вашей программы к операционной системе. Это способ, с помощью которого вы просите ОС выполнить какое-либо действие для вас.

Зачем нужны системные вызовы (syscalls):

ЗадачаМожет ли процессор сделать это сам?Нужен системный вызов (syscall)?
Сложить два числаДаНет
Переместить данные между регистрамиДаНет
Вывести текст на экранНетДа
Прочитать ввод с клавиатурыНетДа
Завершить программуНетДа
Открыть файлНетДа

Как работает системный вызов:

  1. Вы помещаете номер системного вызова в rax (сообщает ОС, что вы хотите сделать)
  2. Вы помещаете аргументы в другие регистры (rdi, rsi, rdx и т. д.)
  3. Вы выполняете инструкцию syscall
  1. Процессор переходит в ядро ОС
  2. ОС выполняет запрос
  3. ОС возвращает управление вашей программе

Аналогия:

Представьте системный вызов (syscall) как обращение в государственное учреждение:

ШагАналогияВ ассемблере
1Решите, какая услуга вам нужнаВыберите номер системного вызова (поместите в rax)
2Заполните формыПоместите аргументы в регистры
3Отправьте запросВыполните syscall
4Государство обрабатывает егоЯдро ОС выполняет работу
5Получите результатПрограмма продолжается

Системные вызовы, которые вы изучите в этом курсе:

Системный вызовНомерЧто он делаетГлава
exit60Завершает программуГлава 4
write1Выводит текст на экранГлава 5

Самый важный системный вызов на данный момент: <strong>exit</strong>

Без exit ваша программа будет работать вечно или завершится с ошибкой. Каждая программа, которую вы пишете, должна заканчиваться системным вызовом exit.

mov rax, 60    ; номер системного вызова для выхода
mov rdi, 0     ; код выхода (0 = успех)
syscall        ; запрос к ОС на выход

Попробуйте сами

В этом уроке нет задания по программированию.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы