Главная Случайная страница


Полезное:

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


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Системные вызовы, их основные виды.





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

Системные вызовы, доступные в интерфейсе, меняются от одной ОС к другой. Существует проблема выбора между (1) неопределенными обобщениями («ОС имеют системные вызовы для чтения файлов») и (2) какой-либо конкретной системой («в UNIX существует СВ для чтения с тремя параметрами: один для задания файла, второй — для того, чтобы указать, куда нужно поместить прочитанные данные, третий задает количество байтов, которое нужно прочитать»).

При втором способе следует проделать больше работы, но он обеспечивает лучшее понимание того, что в реальности происходит в ОС.

Обычно системные вызовы доступны как специальные ассемблерные команды, например, в IBM 360 ассемблерная команда svc 10 выполняет вызов супервизора (управляющей программы ОС) с номером системной функции 10.

Некоторые языки (C, C++, Java и др.) позволяют выполнять системные вызовы непосредственно, не "опускаясь" до ассемблерного уровня, с помощью вызовов специальных библиотечных функций (методов) типа System("cd my_dir").

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

· Передача параметров в регистрах; например, в IBM 360 системная макрокоманда GETMAIN выделения области основной памяти ожидает, что ей в регистре номер 1 передана длина требуемой области памяти, а сама макрокоманда в результате своего выполнения записывает также в первый регистр адрес выделенной области основной памяти. Очевидно, что подобный интерфейс не вполне надежен – слишком много не очевидных умолчаний. А вдруг программист по ошибке запишет длину области памяти не в первый, а во второй регистр? Об этой ошибке никто ему не подскажет, и результат будет бессмысленным.

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

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

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


Различаются следующие основные виды системных вызовов:

· Управление процессами; например, в UNIX системный вызов fork создает новый параллельный процесс с новым пространством виртуальных адресов.

· Управление файлами; например, в UNIX системный вызов open (f, "rw") осуществляет открытие заданного файла для чтения и записи.

· Управление устройствами; например, системный вызов rewind осуществляет перемотку (позиционирование) магнитной ленты на начало.

· Сопровождающая информация; например, системный вызов env выдает в стандартный вывод информацию о значениях переменных окружения – переменных с символьными значениями, например, PATH, задающими окружение исполняемого процесса;

· Коммуникации; например, системный вызов CreateSocket создает новый сокет – системную структуру для обмена информацией клиента с сервером через TCP/IP – сеть.







Date: 2016-07-25; view: 1280; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию