Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция-2.pptx
Скачиваний:
13
Добавлен:
01.10.2022
Размер:
454.57 Кб
Скачать

Диаграмма состояний процесса в UNIX

Создание нового процесса

fork() – создает процесс, являющийся копией текущей задачи.

Отличия от родительского процесса:

PID

PPID

Сигналы

Статистика использования ресурсов

exec() – загружает исполняемый файл в адресное пространство процесса и передает ему управление.

COW (copy-on-write)

P1

RESOURCE

После вызова fork() и exec()

 

P1

P2

RESOURCE

 

P2 пытается изменить часть

данных RESOURCE

P1

RESOURCE

CHANGED

RESOURCE P2

DATA

Функция fork()

fork() clone()

do_fork(

)

copy_proces s()

Функция copy_process()

1.Вызывается функция dup_task_struct(), которая создает новый стек ядра, структуры thread_info и task_struct для нового процесса, причем все значения указанных структур данных идентичны для родительского и дочернего процессов. На этом этапе дескрипторы родительского и дочернего процессов идентичны.

2.Проверяется, не будет ли при создании нового процесса исчерпан лимит на количество процессов для данного пользователя.

Функция copy_process()

3. Теперь необходимо сделать так, чтобы дочерний процесс отличался от родительского. При этом различные поля дескриптора дочернего процесса очищаются или устанавливаются в начальные значения. Не копируются только те поля, в которых содержатся в основном статистические данные использования системных ресурсов. Большая часть полей структуры task_struct не меняется.

4. Далее дочерний процесс переводится в состояние TASK_UNINTERRUPTIBLE, чтобы он случайно не начал выполняться.

Функция copy_process()

5.Из функции copy_process() вызывается функция copy_flags(), которая обновляет значение поля flags структуры task_struct. При этом сбрасывается флаг PF_SUPERPRIV, который определяет, имеет ли процесс права суперпользователя. Флаг PF_FORKNOEXEC, который указывает на то, что процесс не вызвал функцию exec(), — устанавливается.

6.Вызывается функция alloc_pid(), которая назначает новое значение идентификатора PID для новой задачи.

Функция copy_process()

7.В зависимости от значения флагов, переданных в функцию clone(), в функции copy_process() выполняется копирование или совместное использование открытых файлов, информации о файловой системе, обработчиков сигналов, адресного пространства процесса и пространства имен (namespace). Обычно эти ресурсы совместно используются потоками одного процесса. В противном случае они становятся уникальными и будут копироваться на этом этапе.

8.Наконец, в функции copy_process() выполняется окончательная зачистка структур данных и возвращается указатель на новый дочерний процесс.

Process, thread, task?

Для ОС UNIX условно:

process = thread = task

Process and threads

Другие

ОС

Process 1

PD

resource s

thread 1

thread 2

thread 3

resource s

resource s

resource s

Linu x

Process 1

Process 2

Process 3

Соседние файлы в предмете Операционные системы