Системные вызовы: Что такое системные вызовы и зачем они нужны?

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

Что именно включают в себя эти вызовы и какие существуют их виды?

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

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

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

Примечание

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

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

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

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

Резюме

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

Какие существуют виды системных вызовов?

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

  • Управление процессами: Все процессы в компьютерной системе должны контролироваться, чтобы они могли быть остановлены в любой момент или управляться другими процессами. По этой причине системные вызовы этой категории контролируют запуск и выполнение или прерывание процессов.
  • Управление файлами: Этот вид системных вызовов необходим прикладным программам для получения доступа к типичным файловым операциям. К таким методам работы с файлами относятся «создание», «удаление», «открытие», «закрытие», «запись» и «чтение».
  • Управление устройствами: В эту категорию входят все системные вызовы, которые запрашивают или управляют аппаратными ресурсами, такими как вычислительная мощность или пространство для хранения данных.
  • Обслуживание информации: Процессы связаны с большим количеством информации, которая должна быть актуальной и корректной. Чтобы обмениваться или требовать эту информацию, прикладные программы используют системные вызовы для управления и поддержания информации.
  • Межпроцессное взаимодействие: Операционная система и различные активные прикладные программы могут взаимодействовать гладко только в том случае, если отдельные процессы хорошо согласованы друг с другом. По этой причине взаимодействие через соответствующие системные вызовы является необходимым.

Windows и Linux: Обзор системных вызовов

То, в какой степени перечисленные виды системных вызовов могут быть сделаны и реализованы, зависит в первую очередь от используемого оборудования и архитектуры системы, а также от используемой операционной системы. В Linux, например, системные вызовы хранятся непосредственно в ядре Linux в «таблице системных вызовов». Каждой записи в этой таблице присваивается уникальный номер и определенная функция, которая должна быть запущена в режиме ядра. Чтобы выполнить любой желаемый системный вызов Linux, соответствующий номер загружается в память процессора, а затем загружается программное прерывание 128 (подсказка для подфункции операционной системы, которая прерывает работу программы, запущенной в пользовательском режиме).

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

Процесс аналогичен в системах Windows, где системный вызов всегда сначала преобразуется внутри системы: Из библиотечной функции в Windows API (WinAPI или сокращенно) автоматически делается системный вызов, который может быть прочитан операционной системой, с уникальным номером, который ссылается на нужную функцию в режиме ядра.

Примеры конкретных системных вызовов Windows и Linux можно найти в следующей таблице:

Тип системного вызова Функция Linux Windows
Управление процессом Создать процесс fork() CreateProcess()
Управление процессом Завершить процесс exit() ExitProcess()
Управление файлами Создание/открытие файла open() CreateFile()
Управление файлами Чтение файла прочитать() ReadFile()
Управление файлами Редактирование файла записать() WriteFile()
Управление файлами Закрыть файл закрыть() CloseHandle()
Управление устройством Открыть устройство прочитать() ReadConsole()
Управление устройством Закрыть устройство закрыть() Закрыть консоль()
Информационное обслуживание Установите определенный интервал времени тревога() SetTimer()
Информационное обслуживание Приостановить (например, процесс) sleep() Sleep()
Коммуникация Создание трубы (буфера для потока данных между двумя процессами) pipe() CreatePipe()
Коммуникация Создание общей памяти shmget() CreateFileMapping()
Совет

Вы ищете высокопроизводительное оборудование для обработки процессов ваших приложений? Решения VPS от IONOS предоставят вам самый современный облачный сервер по фантастической цене — с возможностью выбора операционной системы Windows или Linux.

Оцените статью
cdelat.ru
Добавить комментарий