Запуск новой программы

Запуск новой программы

Запуск новой программы осуществляется с помощью системного вызова exec(2). Напомним, что при этом создается не новый процесс, а новое адресное пространство процесса, которое загружается содержимым новой программы. Если процесс был создан вызовом vfork(2), старое адресное пространство возвращается родителю, в противном случае оно просто уничтожается. После возврата из вызова exec(2) процесс продолжает выполнение кода новой программы.

Операционная система UNIX обычно поддерживает несколько форматов исполняемых файлов. Старейший из них — a.out, в разделе "Форматы исполняемых файлов" главы 2 также были рассмотрены форматы COFF и ELF. В любом случае исполняемый файл содержит заголовок, позволяющий ядру правильно разместить адресное пространство процесса и загрузить в него соответствующие фрагменты исполняемого файла.

Перечислим ряд действий, которые выполняет exec(2) для запуска новой программы:

? Производит трансляцию имени файла. В результате возвращается индексный дескриптор, с помощью которого осуществляется доступ к файлу. При этом проверяются права доступа.

? Считывает заголовок файла и проверяет, является ли файл исполняемым. Вызов exec(2) также распознает скрипты, о которых говорилось в главе 1. При этом он анализирует первую строку скрипта, которая обычно имеет вид #!shellname. В этом случае exec(2) запускает программу, указанную shellname, передавая ей в качестве аргумента имя скрипта. Если исполняемый файл (т.е. файл с установленным атрибутом x) не является бинарным и не содержит в первой строке названия интерпретатора, exec(2) запускает интерпретатор по умолчанию (/bin/sh, /usr/bin/sh, или /usr/bin/ksh, как предписывает стандарт XPG4), передавая ему содержимое файла в качестве ввода.

? Если исполняемый файл имеет атрибуты SUID или SGID, exec(2) соответствующим образом изменяет эффективные идентификаторы UID и GID для этого процесса.[40]

? Сохраняет аргументы вызова exec(2) и переменные окружения в адресном пространстве ядра, поскольку адресное пространство процесса будет уничтожено.

? Резервирует место в области свопинга для сегмента данных и стека.

? Освобождает старые области процесса и соответствующие области свопинга. Если процесс был создан вызовом vfork(2), старое адресное пространство возвращается родителю.

? Размещает и инициализирует карты отображения для новых сегментов кода, данных и стека. Если сегмент кода является активным, например, какой-либо процесс уже выполняет эту программу, данная область используется совместно. В противном случае область заполняется содержимым соответствующего раздела исполняемого файла или инициализируется нулями для неинициализированных данных. Поскольку управление памятью процесса построено на механизме страничного замещения по требованию, копирование происходит постранично и только тогда, когда процесс обращается к страницам, отсутствующим в памяти.

? Копирует сохраненные аргументы и переменные окружения в новый стек процесса.

? Устанавливает обработку всех сигналов на умалчиваемые значения, поскольку процесс теперь не имеет требуемых обработчиков. Установки для игнорируемых и заблокированных сигналов не изменяются.

? Инициализирует аппаратный контекст процесса. В частности, после этого указатель инструкций адресует точку входа новой программы.

В случае, когда программа использует динамические библиотеки, соответствующий раздел исполняемого файла (для файла формата ELF данный раздел имеет тип INTERP) содержит имя редактора связей динамической библиотеки. В этом случае редактор связей должен быть запущен до начала выполнения основной программы для связывания с программами требуемых динамических библиотек. Таким образом точка входа в программу устанавливается на точку входа в редактор связей. После завершения своей работы редактор связей, в свою очередь, запускает программу самостоятельно, анализируя заголовок исполняемого файла. Стадии запуска новой программы проиллюстрированы на рис. 3.16.

Рис. 3.16. Запуск новой программы: а) Адресное пространство процесса до вызова exec(2); б) Уничтожение старого адресного пространства; в) Новое адресное пространство процесса; г) Новое адресное пространство процесса при использовании динамических библиотек

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Первый запуск программы. Интерфейс ICQ

Из книги Мир общения: ICQ автора Леонтьев Виталий Петрович

Первый запуск программы. Интерфейс ICQ После установки ICQ и перезагрузки компьютера в правом углу вашей панели задач появится скромный цветок с бледными лепестками – ICQ Netdetect Agent.  Значок ICQВ момент вашего входа в Интернет лепестки цветка должны окраситься в ярко-зеленый


Глава 23. Запуск программы

Из книги Секреты сканирования на ПК автора Леонтьев Б К

Глава 23. Запуск программы После установки приложение FineReader будет добавлено в вашу операционную систему, а именно — в меню Пуск, при этом в подменю Программы вы увидите программную группу FineReader.Для запуска программы просто выберите команду ABBYY FineReader Pro ( Office) из меню Пуск к


Установка и запуск программы

Из книги Компьютер + мобильник: эффективное взаимодействие автора Гольцман Виктор Иосифович

Установка и запуск программы Перед первым подключением телефона запустим программу установки Setup.exe. При этом последовательно появятся обычные для любых программ установки окна с предложением прочитать и принять пользовательское соглашение, а затем выбрать папку для


Запуск программы

Из книги AutoCAD 2009 автора Орлов Андрей Александрович

Запуск программы Как и любое приложение, разработанное для операционной системы Windows, программу AutoCAD можно запустить несколькими способами. Давайте рассмотрим наиболее распространенные из них.• Использование меню Пуск. Для запуска программы нужно выполнить команду


Первый запуск программы Premiere Pro

Из книги Видеосамоучитель монтажа домашнего видео в Adobe Premiere Pro CS3 автора Днепров Александр Г

Первый запуск программы Premiere Pro Установка программы Premiere Pro на компьютер производится с помощью пошагового мастера. Нужно просто следовать указаниям на экране.Запустим программу Premiere Pro и создадим новый проект, чтобы далее познакомиться с интерфейсом программы.1. Нажмите


1.2. Запуск программы Microsoft Word

Из книги Word 2007.Популярный самоучитель автора Краинский И

1.2. Запуск программы Microsoft Word Запустить программу Microsoft Word можно несколькими способами:• выполнить команду Пуск ? Программы ? Microsoft Office ? Microsoft Office Word 2007;• щелкнуть на ярлыке Word на панели быстрого запуска;• дважды щелкнуть на ярлыке Word на Рабочем столе. Внимание! Ярлыки на


4.3 Запуск программы разметки

Из книги Руководство по переходу на Ubuntu 10.04 LTS «Lucid Lynx» автора Неворотин Вадим

4.3 Запуск программы разметки Вообще говоря, вы можете использовать любую программу разметки, например, Partition Magic или Acronis Disk Director Suite, однако я буду рассказывать про входящую в состав Ubuntu утилиту Gparted.Надеюсь, вы ещё не вышли из запущенной с LiveCD Ubuntu. Если это не так, то снова


3.2.5. Запуск программы с правами администратора

Из книги Первые шаги с Windows 7. Руководство для начинающих автора Колисниченко Денис Н.

3.2.5. Запуск программы с правами администратора Почему Windows XP была настоящим раем для вирусописателя? Иногда полчаса, проведенные в Интернете без антивируса и брандмауэра, заканчивались «поселением» на компьютере с десятка вирусов и шпионских программ. А все из-за того,


Урок № 3. Запуск программы

Из книги 1С: Бухгалтерия 8 с нуля. 100 уроков для начинающих автора Гладкий Алексей Анатольевич

Урок № 3. Запуск программы После того как программа установлена, в меню Пуск будет создана ее программная группа. Для запуска программы предназначена команда 1С Предприятие. Рекомендуется для удобства работы вывести ярлык запуска на рабочий стол, используя для этого


9.1.4. Запуск новой программы: семейство exec()

Из книги Linux программирование в примерах автора Роббинс Арнольд

9.1.4. Запуск новой программы: семейство exec() После запуска нового процесса (посредством fork()) следующим шагом является запуск в процессе другой программы. Имеется несколько функций, которые служат различным целям:#include <unistd.h> /* POSIX */int execve(const char *filename, /* Системный вызов */char


Запуск программы mmc.exe

Из книги Недокументированные и малоизвестные возможности Windows XP автора Клименко Роман Александрович

Запуск программы mmc.exe На уровне файловой системы, как оказывается, ничего интересного не происходит — по умолчанию консоль управления Microsoft не ведет журнал и не записывает события ни в один из журналов системы. Единственное, что можно отметить, так это запуск библиотеки


Запуск программы

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

Запуск программы Мы запустили эхо-сервер SCTP без аргументов командной строки на компьютере, работающем под управлением FreeBSD. Клиенту при запуске необходимо указать IP-адрес сервера.freebsd4% sctpclient01 10.1.1.5[0]Hello                                     Отправка сообщения по потоку


Запуск программы

Из книги автора

Запуск программы Мы запустили клиент и сервер на разных компьютерах с FreeBSD, между которыми был установлен настраиваемый маршрутизатор (рис. 10.4). Маршрутизатор может создавать задержку и сбрасывать часть пакетов. Сначала мы запускаем программу без сброса пакетов на


Запуск измененной программы

Из книги автора

Запуск измененной программы Запустив сервер и измененный клиент, мы получаем следующий результат:freebsd4% sctpclient01 10.1.4.1 echoEchoing messages to all streamsHelloFrom str:0 seq:0 (assoc:0xc99e15a0):Hello.msg.0 1From str:0 seq:1 (assoc:0xc99e15a0):Hello.msg.0 2From str:1 seq:0 (assoc:0xc99e15a0):Hello.msg.1 1From str:4 seq:0 (assoc:0xc99e15a0):Hello.msg.4 1From str:5 seq:0 (assoc:0xc99e15a0):Hello.msg.5


Запуск программы

Из книги автора

Запуск программы Мы запускаем клиент и отправляем одно сообщение.FreeBSD-lap: ./sctpclient01 10.1.1.5[0]HelloFrom str:1 seq:0 (assoc:c99e15a0):[0]HelloControl-DFreeBSD-lap:Сервер отображает сообщения обо всех происходящих событиях (приеме входящего соединения, получении сообщения, завершении