Thursday, Sep 09th

Last update09:09:00 PM GMT

Вы находитесь на: FreeBSD Запуск и выключение Инициализация потоков и процессов ядра

Инициализация потоков и процессов ядра

Есть несколько процессов ядра, которые устанавливаются во время загрузки и которые нужны всегда при работе ядра. Процессы 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 лишь создается, но не запускается.

Сейчас 20 гостей онлайн

Реклама на сайте:

Найдем! Здесь подходящая по цене куплю женскую обувь оптом. Куплю женскую обувь оптом ВАО.