Атрибут | Наследование потомком ( | Сохранение при запуске программы ( |
---|---|---|
Сегмент кода (text) | Да, разделяемый | Нет |
Сегмент данных (data) | Да, копируется при записи (copy-on-write) | Нет |
Окружение | Да | Возможно |
Аргументы | Да | Возможно |
Идентификатор пользователя UID | Да | Да |
Идентификатор группы GID | Да | Да |
Эффективный идентификатор пользователя EUID | Да | Да (Нет, при вызове |
Эффективный идентификатор группы EGID | Да | Да (Нет, при вызове |
ID процесса (PID) | Нет | Да |
ID группы процессов | Да | Да |
ID родительского процесса (PPID) | Нет | Да |
Приоритет nice number | Да | Да |
Права доступа к создаваемому файлу | Да | Да |
Ограничение на размер файла | Да | Да |
Сигналы, обрабатываемые по умолчанию | Да | Да |
Игнорируемые сигналы | Да | Да |
Перехватываемые сигналы | Да | Нет |
Файловые дескрипторы | Да | Да, если для файлового дескриптора не установлен флаг FD_CLOEXEC (например, с помощью |
Файловые указатели | Да, разделяемые | Да, если для файлового дескриптора не установлен флаг FD_CLOEXEC (например, с помощью |
В общем случае вызов
□ Резервирует место в области свопинга для сегмента данных и стека процесса.
□ Размещает новую запись proc
в таблице процессов и присваивает процессу уникальный идентификатор PID.
□ Инициализирует структуру proc
(поля структуры proc подробно рассматривались в разделе "Структуры данных процесса").
□ Размещает карты отображения, необходимые для трансляции адреса.
□ Размещает u-area процесса и копирует ее содержимое с родительского.
□ Создает соответствующие области процесса, часть из которых совпадает с родительскими.
□ Инициализирует аппаратный контекст процесса, копируя его с родительского.
□ Устанавливает в ноль возвращаемое дочернему процессу вызовом
□ Устанавливает возвращаемое родительскому процессу вызовом
□ Помечает процесс готовым к запуску и помещает его в очередь на выполнение.
Системный вызов
Для решения данной проблемы используются два подхода. Первый из них, предложенный в UNIX System V, называется "копирование при записи" (copy-on-write или COW). Суть этого подхода заключается в том, что сегменты данных и стека родительского процесса помечаются доступными только для чтения, а дочерний процесс, хотя и получает собственные карты отображения, разделяет эти сегменты с родительским. Другими словами, сразу после создания процесса и родитель и потомок адресуют одни и те же страницы физической памяти. Если какой-либо из двух процессов попытается модифицировать данные или стек, возникнет страничная ошибка, поскольку страница открыта только для чтения, а не для записи. При этом будет запущен обработчик ошибки ядра, который создаст для процесса копию этой страницы, доступную для записи. Таким образом, фактическому копированию подлежат только модифицируемые страницы, а не все адресное пространство процесса. Если дочерний процесс делает системный вызов
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии