O Torvalds Linus

Сайт о *nix системах и всем что с ними связано

Linux использует много других потоков ядра. Другие создаются “по требованию”, когда ядро должно выполнить задачу, для которой оптимальным является собственный контекст ядра.

Примерами потоков ядра (помимо процесса 0 и процесса 1) являются:

keventd (также называемый events) —выполняет функции из рабочей очереди keventd_wq (см. главу 4)\

kapmd —обрабатывает события, имеющие отношение к усовершенствованному управлению питанием (АРМ, Advanced Power Management);

pdflush —сбрасывает грязные”буферы на диск, чтобы утилизировать память;

kblockd —выполняет функции из рабочей очереди kblockd_workqueue. На практике этот поток ядра периодически активизирует драйверы блочных устройств, как описано в разд. ksoftirqd —выполняет тасклеты. У каждого процессора в системе есть один такой поток ядра.

Уничтожение процессов

Большинство процессов умирает”в том смысле, что они прекращают выполнять свой код. Память, открытые файлы и прочие вещи, упоминаемые в этой книге, например, семафоры.

Обычно, чтобы закончить свою работу, процесс вызывает библиотечную функцию exit (), которая освобождает ресурсы, выделенные библиотекой С, выполняет все функции, зарегистрированные программистом, и под конец делает системный вызов, удаляющий процесс из системы. Библиотечная функция exit о может быть вызвана программистом явно. Кроме того, компиляторе всегда ставит вызов exit о сразу после последнего оператора функции main ().

Завершение процесса

В Linux 2.6 существуют два системных вызова, которые прекращают выполнение приложения, работающего в пользовательском режиме:

системный вызов exit group, который завершает выполнение всей группы потоков, т. е. целое многопоточное приложение. Основная функция

ядра, реализующая этот системный вызов, называется do group exit(). Этот системный вызов должен быть сделан библиотечной функцией

exit ();

системный вызов exit (), который завершает выполнение одного процесса, независимо от других процессов, входящих в ту же группу, что и жертва. Основная функция ядра, реализующая этот системный вызов, называется do exito. Этот системный вызов делается, например, функцией pthread exit () из библиотеки LinuxThreads.

Add A Comment