Есть несколько процессов ядра, которые устанавливаются во время загрузки и которые нужны всегда при работе ядра. Процессы swapper, init и idle устанавливаются после инициализации процессора, но они не планируются на исполнение.
Ни один поток или процесс ядра не выполняется до тех пор, пока не будут инициализированы все модули ядра.
Модули и процессы ядра
|
Модуль |
Первая процедура |
|
SI_SUB_INTRINSIC |
proc0_init() |
|
SI_SUB_VM_CONF |
vminitlimitsf() |
|
SI_SUB_RUN_QUEUE |
runq_init() |
|
SI_SUB_K.TRACE |
ktrace_init() |
|
SI_SUB_CREATE_INIT |
create_init() |
|
SISUBSCHEDJDLE |
idlesetup() |
Когда ядро работает, все новые процессы создаются путем разветвления существующего процесса. Однако, поскольку при первом запуске системы нет ни одного процесса, код запуска должен создать первый процесс. Планировщик подкачки (swapper) всегда является первым процессом и получает PID 0. Создание процесса подкачки началось в момент запуска на языке ассемблера, но теперь в системе работает достаточно служб для того, чтобы почти завершить создание подкачки процесса ядра.
Процедура proc0_init() не только устанавливает процесс 0, но также инициализирует все глобальные структуры данных для управления потоками и процессами ядра, таблицу дескрипторов файлов и структуры ограничений. Процедура proc0_init() создает также прототип отображения виртуальной памяти, которая будет прообразом для всех других процессов ядра, которые в конечном счете будут созданы.
После того как были инициализированы структуры данных для процесса swapper, система создает процесс init, вызвав процедуру create_init(). Процесс init устанавливается непосредственно после процесса swapper таким образом, что у него всегда будет PID 1. Поскольку привилегированные пользователи взаимодействуют с процессом init, посылая ему сигналы, обеспечение наличия у него хорошо известного PID означает, что пользователям не придется сначала искать его, чтобы иметь возможность взаимодействия с ним.
У каждого процессора в системе есть процесс idle. Именно процесс idle отвечает за то, чтобы остановить процессор, когда для него нет работы. После установки процессов ядра - swapper и init , инициализирует для каждого процессора в системе процесс idle. Если в системе есть лишь один процессор, тогда создается лишь один процесс ядра - idle. Подобно всем другим процессам ядра, в этот момент процесс idle лишь создается, но не запускается.