Книга: Разработка ядра Linux
Выделение дескриптора процесса
Выделение дескриптора процесса
Память для структуры task_struct
выделяется с помощью подсистемы выделения памяти, которая называется слябовый распределитель (slab allocator), для возможности повторного использования объектов и раскрашивания кэша (cache coloring) (см. главу 11, "Управление памятью"). В ядрах до серии 2.6 структура task_struct
хранилась в конце стека ядра каждого процесса. Это позволяет для аппаратных платформ, у которых достаточно мало регистров процессора (как, например, платформа x86), вычислять местоположение дескриптора процесса, только зная значение регистра указателя стека (stack pointer), без использования дополнительных регистров для хранения самого адреса этого местоположения. Так как теперь дескриптор процесса создается с помощью слябового распределителя, была введена новая структура thread_info
, которая хранится в области дна стека (для платформ, у которых стек растет в сторону уменьшения значения адреса памяти) или в области вершины стека (для платформ, у которых стек растет в сторону увеличения значения адреса памяти)[11] (рис. 3.2.).
Рис 3.2. Дескриптор процесса и стек ядра
Структура struct thread_info
для платформы x86 определена в файле <asm/thread_info.h>
в следующем виде.
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
этой задачи.
- Манипулирование текущим состоянием процесса
- Выделение дескриптора памяти
- Сущность процесса миграции
- V Совершенствование процесса
- Использование сервера Yaffil внутри процесса
- 3.2.1.2. Начальное выделение памяти: malloc()
- 4. Стадии бизнес-процесса взаимодействия с клиентами
- 2.2.2.2 Состояния процесса
- 1.2 Процесс, контекст процесса и потоки
- Вытеснение процесса
- При выключении не дождался конца процесса и отключил питание. Теперь при запуске компьютер начинает бесконечно обращатьс...
- Как просмотреть историю процесса загрузки Windows?