Где task_struct инициализируется в ядре Linux? - PullRequest
1 голос
/ 11 апреля 2020

Есть ли функция, которая вызывается для инициализации (хотя бы некоторых) значений task_struct? Или есть какая-то другая функция, которая вызывается при создании задачи (в частности, процесса в пространстве пользователя)?

1 Ответ

2 голосов
/ 11 апреля 2020

Поскольку единственный способ создать новый процесс в Linux - это системный вызов clone() (или другие варианты, например fork()), реальной функции для «создания новой задачи» с нуля не существует, но есть Эта функция дублирует существующую задачу, применяя необходимые изменения. Для этого используется функция copy_process(), которая использует dup_task_struct() для дублирования ассоциированного struct task_struct.

Однако существует одно специальное исключение из этого правила. процесс init (первый процесс, созданный после загрузки) создается самим ядром (любой другой процесс затем создается init или каким-либо потомком init через clone() + execve()). task_struct для задачи инициализации статически определено во время компиляции ( см. Здесь ). Вы можете посмотреть этот другой ответ , если хотите узнать больше.

...