Обычно системные вызовы доступны как специальные ассемблерные команды, например, в IBM 360 ассемблерная команда svc 10выполняет вызов супервизора (управляющей программы ОС) с номером системной функции 10.
Некоторые языки (C, C++, Java и др.) позволяют выполнять системные вызовы непосредственно, не "опускаясь" до ассемблерного уровня, с помощью вызовов специальных библиотечных функций (методов) типа System("cd my_dir").
При системном вызове ОС из программы пользователя возникает проблема передачи параметров. Используются три основных способа передачи параметров исполняемой программой операционной системе:
Передача параметров в регистрах; например, в IBM 360 системная макрокоманда GETMAINвыделения области основной памяти ожидает, что ей в регистре номер 1 передана длина требуемой области памяти, а сама макрокоманда в результате своего выполнения записывает также в первый регистр адрес выделенной области основной памяти. Очевидно, что подобный интерфейс не вполне надежен – слишком много не очевидных умолчаний. А вдруг программист по ошибке запишет длину области памяти не в первый, а во второйрегистр? Об этой ошибке никто ему не подскажет, и результат будет бессмысленным. Запись параметров в таблицу, расположенную в памяти, и передача адреса этой таблицы в регистре. Этот способ немного лучше, но все равно он зависит от джентльменского соглашения между автором программы и авторами ОС относительно передачи через регистр, соблюдение которого фактически никем не проверяется. Запись (проталкивание) параметров в стекпрограммой и чтение (выталкивание) их из стека операционной системой. Такой способ гораздо лучше, так как он является стандартным способом передачи параметров при любом вызове процедуры или метода. На рис. 6.1 изображен способ передачи параметров при системном вызове через таблицу, адрес которой передается в регистре.
Рис. 6.1. Передача параметров системного вызова в таблице.
Различаются следующие основные виды системных вызовов:
Управление процессами; например, в UNIX системный вызов fork создает новый параллельный процесс с новым пространством виртуальных адресов. Управление файлами; например, в UNIX системный вызов open (f, "rw") осуществляет открытие заданного файла для чтения и записи. Управление устройствами; например, системный вызов rewind осуществляет перемотку (позиционирование) магнитной ленты на начало. Сопровождающая информация; например, системный вызов env выдает в стандартный вывод информацию о значениях переменных окружения –переменных с символьными значениями, например, PATH, задающими окружение исполняемого процесса; Коммуникации; например, системный вызов CreateSocket создает новый сокет –системную структуру для обмена информацией клиента с сервером через TCP/IP – сеть. Из примеров нетрудно видеть, что многие из этих возможностей ОС доступны также в виде выполняемых команд.