В данной главе были рассмотрены
системные функции, предназначенные
для работы с контекстом процесса и
для управления выполнением
процесса. Системная функция fork
создает новый процесс, копируя для
него содержимое всех областей,
подключенных к родительскому
процессу. Особенность реализации
функции fork состоит в том, что она
выполняет инициализацию
сохраненного регистрового
контекста порожденного процесса,
таким образом этот процесс
начинает выполняться, не дожидаясь
завершения функции, и уже в теле
функции начинает осознавать свою
предназначение как потомка. Все
процессы завершают свое выполнение
вызовом функции exit, которая
отсоединяет области процесса и
посылает его родителю сигнал
"гибель потомка".
Процесс-родитель может совместить
момент продолжения своего
выполнения с моментом завершения
процесса-потомка, используя
системную функцию wait. Системная
функция exec дает процессу
возможность запускать на
выполнение другие программы,
накладывая содержимое
исполняемого файла на свое
адресное пространство. Ядро
отсоединяет области, ранее
занимаемые процессом, и назначает
процессу новые области в
соответствии с потребностями
исполняемого файла. Совместное
использование областей команд и
наличие режима "sticky-bit" дают
возможность более рационально
использовать память и экономить
время, затрачиваемое на подготовку
к запуску программ. Простым
пользователям предоставляется
возможность получать привилегии
других пользователей, даже
суперпользователя, благодаря
обращению к услугам системной
функции setuid и setuid-программ. С
помощью функции brk процесс может
изменять размер своей области
данных. Функция signal дает процессам
возможность управлять своей
реакцией на поступающие сигналы.
При получении сигнала производится
обращение к специальной функции
обработки сигнала с внесением
соответствующих изменений в стек
задачи и в сохраненный регистровый
контекст задачи. Процессы могут
сами посылать сигналы, используя
системную функцию kill, они могут
также контролировать получение
сигналов, предназначенных группе
процессов, прибегая к услугам
функции setpgrp. Командный процессор shell и процесс
начальной загрузки init используют
стандартные обращения к системным
функциям, производя набор операций,
в других системах обычно
выполняемых ядром. Shell
интерпретирует команды
пользователя, переназначает
стандартные файлы ввода-вывода
данных и выдачи ошибок, порождает
процессы, организует каналы между
порожденными процессами,
синхронизирует свое выполнение с
этими процессами и формирует коды,
возвращаемые командами. Процесс init
тоже порождает различные процессы,
в частности, управляющие работой
пользователя за терминалом. Когда
такой процесс завершается, init может
породить для выполнения той же
самой функции еще один процесс,
если это вытекает из информации
файла "/etc/inittab". Предыдущая
глава || Оглавление
|| Следующая глава
7.10 ВЫВОДЫ