Выход из программы осуществляется с помощью системного вызова exit()
wait4()
[9], который заставляет один процесс ожидать завершения другого. Когда процесс завершается, он переходит в специальное состояние wait()
или waitpid()
.Иное название для процесса —
Дескриптор процесса и структура task structure
Ядро хранит информацию о всех процессах в двухсвязном списке, который называется
struct task_struct
, которая описана в файле include/linux/sched.h
. Дескриптор процесса содержит всю информацию об определенном процессе.Структура task_struct
Рис. 3.1
. Дескриптор процесса и список задачВыделение дескриптора процесса
Память для структуры task_struct
task_struct
хранилась в конце стека ядра каждого процесса. Это позволяет для аппаратных платформ, у которых достаточно мало регистров процессора (как, например, платформа x86), вычислять местоположение дескриптора процесса, только зная значение регистра thread_info
, которая хранится в области дна стека (для платформ, у которых стек растет в сторону уменьшения значения адреса памяти) или в области вершины стека (для платформ, у которых стек растет в сторону увеличения значения адреса памяти)[11] (рис. 3.2.).Рис 3.2
. Дескриптор процесса и стек ядраСтруктура struct thread_info
в следующем виде.struct thread_info {
struct task_struct *task;
struct exec_domain *exec_domain;
unsigned long flags;
unsigned long status;
__u32 cpu;
__s32 preempt_count;
mm_segment_t addr_limit;
struct restart_block restart_block;
unsigned long previous_esp;
__u8 supervisor_stack[0];
};
Для каждой задачи ее структура thread_info
thread_info
с именем task
является указателем на структуру task_struct
этой задачи.Хранение дескриптора процесса
Система идентифицирует процессы с помощью уникального значения, которое называется
PID
— это целое число, представленное с помощью скрытого типа pid_t
[12] , который обычно соответствует знаковому целому— int
.Однако, для обратной совместимости со старыми версиями ОС Unix и Linux максимальное значение этого параметра по умолчанию составляет всего лишь 32768 (что соответствует типу данных short int
pid
дескриптора процесса.