Архитектура операционной системы UNIX   ::   Бах Морис Дж.

Страница: 264 из 715

44);

 запустить в ядре исполняемый код системной функции;

 if (во время выполнения функции произошла ошибка)  {

  установить номер ошибки в нулевом регистре сохраненного регистрового контекста задачи;

  включить бит переноса в регистре PS сохраненного регистрового контекста задачи;

 }

 else

  занести возвращаемые функцией значения в регистры 0 и 1 в сохраненном регистровом контексте задачи;

}

Рисунок 6.12. Алгоритм обращения к системным функциям

В качестве примера рассмотрим программу, которая создает файл с разрешением чтения и записи в него для всех пользователей (режим доступа 0666) и которая приведена в верхней части Рисунка 6.13. Далее на рисунке изображен отредактированный фрагмент сгенерированного кода программы после компиляции и дисассемблирования (создания по объектному коду эквивалентной программы на языке ассемблера) в системе Motorola 68000. На Рисунке 6.14 изображена конфигурация стека для системной функции создания. Компилятор генерирует программу помещения в стек задачи двух параметров, один из которых содержит установку прав доступа (0666), а другой — переменную «имя файла» [18] . Затем из адреса 64 процесс вызывает библиотечную функцию creat (адрес 7a), аналогичную соответствующей системной функции. Адрес точки возврата из функции 6a, этот адрес помещается процессом в стек. Библиотечная функция creat засылает в регистр 0 константу 8 и исполняет команду прерывания (trap), которая переключает процесс из режима задачи в режим ядра и заставляет его обратиться к системной функции.

|< Пред. 262 263 264 265 266 След. >|

Java книги

Контакты: [email protected]