Архитектура операционной системы 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 След. >|