Системный вызов в ОС (Operating System): что такое, типы и примеры

⚡ Умное резюме

Системный вызов — это управляемый интерфейс, используемый процессом для запроса служб ядра, таких как доступ к файлам, управление процессом и связь с устройствами, обеспечивающий безопасное переключение ЦП из пользовательского режима в привилегированный режим ядра.

  • 🔑 Определение: Единственная точка входа, через которую пользовательские программы получают доступ к службам операционной системы.
  • 🔄 Как это работает: Процесс перехватывается ядром, которое выполняет запрос и возвращается в пользовательский режим.
  • 🇧🇷 Типы: Управление технологическими процессами, файловая система, устройства, ведение информации и связь.
  • ⚙️ Примеры: fork(), exec(), wait(), exit(), open(), read() и write().
  • 🤖 Под углом к ​​искусственному интеллекту: Сканирование системных вызовов с помощью машинного обучения traces для обнаружения вторжений; Copilot ускоряет кодирование системных вызовов.

Системный вызов Operaтинг система

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

A системный вызов — это механизм, обеспечивающий интерфейс между процессом и операционной системой. Это программный метод, при котором компьютерная программа запрашивает услугу у ядра ОС.

Системный вызов предлагает услуги операционной системы пользовательским программам через API (интерфейс прикладного программирования). Системные вызовы — единственные точки входа в систему ядра.

Системные вызовы в Operaтинг система

Системные вызовы в Operaтинг система

Пример системного вызова

Например, чтобы написать программу, которая считывает данные из одного файла и копирует их в другой, программе сначала нужны имена этих двух файлов: входного и выходного.

В интерактивной системе выполнение программ такого типа требует определенных системных вызовов со стороны операционной системы.

  • Первый шаг — вывести на экран подсказку.
  • Второй способ — прочитать с клавиатуры символы, определяющие эти два файла.

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

Вот шаги для выполнения системного вызова в операционной системе:

Системный вызов работает

Archiтектура системного вызова

Archiтектура системного вызова

Как видно на приведенной выше диаграмме системных вызовов:

Шаг 1) Эти процессы выполняются в пользовательском режиме до тех пор, пока их не прервет системный вызов.

Шаг 2) После этого системный вызов выполняется в режиме ядра в приоритетном порядке.

Шаг 3) После завершения выполнения системного вызова управление возвращается в пользовательский режим.

Шаг 4) Выполнение пользовательских процессов возобновляется, происходит переход между пользовательским режимом и режим ядра как требуется.

Зачем вам нужны системные вызовы в ОС?

Ниже перечислены ситуации, в которых необходимы системные вызовы в операционной системе:

  • Чтение и запись файлов требуют системных вызовов.
  • Если файловая система хочет создавать или удалять файлы, необходимы системные вызовы.
  • Системные вызовы используются для создания и управления новыми процессами.
  • Сетевым соединениям необходимы системные вызовы для отправки и получения пакетов.
  • Для доступа к аппаратным устройствам, таким как сканер или принтер, требуется системный вызов.

Типы системных вызовов

Вот пять типов системных вызовов в ОС:

  • Контроль над процессом
  • Управление файлами
  • Управление устройством
  • Информационное обслуживание
  • Коммуникация

Типы системных вызовов

Типы системных вызовов в ОС

Контроль над процессом

Эти системные вызовы выполняют задачи создания процессов, завершения процессов и т. д.

Функции:

  • Завершить и прервать
  • Загрузить и выполнить
  • Создать процесс и завершить процесс
  • Подожди и Signal События
  • Выделение и освобождение памяти

Управление файлами

Вызовы системы управления файлами обрабатывают такие задачи по манипуляции файлами, как создание файла, чтение, запись и т. д.

Функции:

  • Создать файл
  • Удалить файл
  • Открыть и закрыть файл
  • Читать, писать и перемещать
  • Получить и установить атрибуты файла

Управление устройством

Управление устройствами выполняет работу по манипулированию устройствами, например чтение из буферов устройств, запись в буферы устройств и т. д.

Функции:

  • Запросить и освободить устройство
  • Логическое подключение или отключение устройств
  • Получение и установка атрибутов устройства.

Информационное обслуживание

Он обрабатывает информацию и ее передачу между ОС и пользовательской программой.

Функции:

  • Получить или установить время и дату
  • Получить атрибуты процесса и устройства

Коммуникация

Эти типы системных вызовов используются специально для межпроцессного взаимодействия.

Функции:

  • Создание и удаление коммуникационных соединений
  • Отправка и получение сообщений
  • Помощь в передаче информации о состоянии операционной системы.
  • Подключение или отключение удаленных устройств

Правила передачи параметров для системного вызова

Вот общие правила передачи параметров системному вызову:

  • Параметры должны быть помещены в стек или извлечены из него операционной системой.
  • Параметры можно передавать в регистрах.
  • Если параметров больше, чем регистров, их следует хранить в блоке, а адрес блока передавать в регистре.

Важные системные вызовы, используемые в ОС

ждать()

В некоторых системах процесс должен ждать завершения другого процесса. Это происходит, когда родительский процесс создает дочерний процесс, и родительский процесс остается приостановленным до тех пор, пока дочерний процесс не завершится.

Приостановка работы родительского процесса происходит автоматически с помощью системного вызова wait(). Когда дочерний процесс завершается, управление возвращается к родительскому процессу.

вилка ()

Процессы используют этот системный вызов для создания процессов, являющихся их копиями. С помощью функции fork() родительский процесс создает дочерний процесс, и родительский процесс приостанавливается до тех пор, пока не будет выполнен дочерний процесс.

exec ()

Этот системный вызов запускает исполняемый файл внутри уже запущенного процесса, заменяя старый. Исходный идентификатор процесса сохраняется, поскольку новый процесс не создается, но стек, данные, куча и т. д. заменяются новым процессом.

убийство()

Системный вызов kill() используется операционной системой для отправки сигналу завершения процессу, побуждая его завершить работу. Однако системный вызов kill() не обязательно означает завершение процесса и может иметь различное значение.

Выход()

Системный вызов exit() используется для завершения выполнения программы. Особенно в многопоточной среде этот вызов означает, что выполнение потока завершено. После вызова exit() операционная система освобождает ресурсы, использованные процессом.

Часто задаваемые вопросы (FAQ)

API — это набор функций, вызываемых приложениями. Системный вызов — это низкоуровневый запрос, поступающий в ядро.

Библиотечная функция выполняется в пользовательском пространстве; системный вызов входит в ядро. Вызовы типа fopen() часто вызывают функцию open() внутри себя.

Нет. Функция printf() — это библиотечная функция языка C, которая форматирует и буферизует текст. Она вызывает функцию write() только тогда, когда буфер очищается.

Пользовательский режим ограничивает доступ к оборудованию и памяти; режим ядра предоставляет полные привилегии. Системный вызов позволяет безопасно переключаться между ними.

Windows Использует функции CreateProcess(), ReadFile() и WriteFile(). В Linux используются функции fork(), read() и write(). Обе охватывают службы обработки процессов, файлов, устройств и связи.

Да. Системный вызов переключает систему в режим ядра, что приводит к дополнительным накладным расходам. Обычные вызовы функций остаются в пользовательском пространстве и выполняются быстрее.

Инструменты обеспечения безопасности применяют машинное обучение к системным вызовам. traces, выявляя вредоносное ПО и вторжения, которые часто пропускают сканеры сигнатур.

Да. GitHub Copilot может предложить синтаксис для вызовов таких функций, как fork(), read() и write(). Разработчикам по-прежнему необходимо проверять обработку ошибок.

Подведем итог этой публикации следующим образом: