алгоритм exec входная информация: (1) имя файла (2) список параметров (3) список переменных среды выходная информация: отсутствует { получить индекс файла (алгоритм namei); проверить, является ли файл исполнимым и имеет ли поль- зователь право на его исполнение; прочитать информацию из заголовков файла и проверить, является ли он загрузочным модулем; скопировать параметры, переданные функции, из старого адресного пространства в системное пространство; для (каждой области, присоединенной к процессу) отсоединить все старые области (алгоритм detachreg); для (каждой области, определенной в загрузочном модуле) { выделить новые области (алгоритм allocreg); присоединить области (алгоритм attachreg); загрузить область в память по готовности (алгоритм loadreg); } скопировать параметры, переданные функции, в новую об- ласть стека задачи; специальная обработка для setuid-программ, трассировка; проинициализировать область сохранения регистров задачи (в рамках подготовки к возвращению в режим задачи); освободить индекс файла (алгоритм iput); } |
На Рисунке 7.19 представлен алгоритм выполнения системной функции exec. Сначала функция обращается к файлу по алгоритму namei, проверяя, является ли файл исполнимым и отличным от каталога, а также проверяя наличие у пользователя права исполнять программу. Затем ядро, считывая заголовок файла, определяет размещение информации в файле (формат файла).
На Рисунке 7.20 изображен логический формат исполняемого файла в файловой системе, обычно генерируемый транслятором или загрузчиком. Он разбивается на четыре части: