O Torvalds Linus

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

Операционная система Unix позволяет процессу опрашивать ядро на предмет идентификатора процесса родителя или состояния любого своего потомка. Например, процесс может создать процесс – потомок для решения конкретной задачи, а затем вызвать какую-нибудь wait ()подобную библиотечную функцию, чтобы проверить, завершилось ли выполнение потомка. Если завершилось, код завершения позволит родителю судить об успешности решения задачи.

Чтобы не возникло противоречий с такими возможностями, ядрам Unix не разрешается уничтожать данные, содержащиеся в дескрипторе процесса, сразу после завершения процесса. Им можно сделать это только после того, как процесс – родитель сделает wait ()подобный системный вызов в отношении завершившегося процесса. Именно поэтому было введено состояние exit zombie: хотя в техническом смысле процесса больше нет, его дескриптор хранится, пока процесс – родитель не будет уведомлен.

Read the rest of this entry »

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

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

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

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

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

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

Read the rest of this entry »

Потоки ядра

Mar-22-2012 By root

В традиционных Unix – системах некоторые критические задачи делегируются перемежающимся процессам. Сюда входят сброс дисковых кэшей, выгрузка неиспользуемых страниц, обслуживание сетевых соединений и другие задачи. В самом деле, выполнять эти задачи в строго линейной последовательности неэффективно; их функции и процессы конечного пользователя будут иметь лучшее время отклика, если такие действия выполняются в фоновом режиме. Поскольку некоторые системные процессы работают только в режиме ядра, современные операционные системы делегируют их функции потокам ядра, не обремененным ненужным контекстом пользовательского режима. В Linux потоки ядра отличаются от обычных процессов по следующим пунктам:

? потоки ядра работают только в режиме ядра, а обычные процессы выполняются попеременно то в режиме ядра, то в пользовательском режиме;

? поскольку потоки ядра работают только в режиме ядра, они обращаются только к линейным адресам, большим чем page offset; обычные же процессы пользуются всеми четырьмя гигабайтами линейных адресов, будь то в режиме пользователя или в режиме ядра.

Read the rest of this entry »

Содержимое регистров с плавающей точкой не восстанавливается сразу после того, как возобновляется выполнение процесса next. Однако флаг ts в

регистре его был установлен макросом uniazy_fpu (), поэтому, как только процесс next попытается выполнить инструкцию ESCAPE, MMX или SSE/SSE2, управляющий блок возбудит исключение “Устройство недоступно”, а ядро (точнее, обработчик этого исключения) вызовет функцию math state restore (). В этом обработчике процесс next идентифицируется как current.

Read the rest of this entry »

Начиная с Intel 80486DX, блок операций с плавающей точкой (Floating Point Unit, FPU) интегрирован в процессор. Тем не менее название математический сопроцессор используется по-прежнему и напоминает о тех днях, когда вычисления с плавающей точкой выполнялись дорогим специализированным чипом. Для поддержки совместимости со старыми моделями арифметические функции выполняются при помощи ESCAPE – инструкций, т. е. инструкций с префиксным байтом, имеющим значение от 0xd8 до Oxdf. Эти инструкции работают с набором процессорных регистров для операций с плавающей точкой. Очевидно, что если процесс использует ESCAPE – инструкции, то содержимое регистров с плавающей точкой является частью его аппаратного контекста и должно быть сохранено. Впоследствии компания Intel встроила в свои микропроцессоры Pentium новый набор ассемблерных инструкций. Они получили название MMX – инструкций и были задуманы для ускорения работы мультимедийных приложений. MMX – инструкции используют регистры блока операций с плавающей точкой (блока FPU).

Read the rest of this entry »

Тесная связь между структурой thread info и стеком режима ядра, описанная в предыдущем разделе, предлагает эффективное решение: ядро может легко вычислить адрес структуры thread info текущего процесса по значению регистра esp. В самом деле, если структура thread union имеет длину 8 Кбайт (213 байт), то ядро маскирует 13 младших битов регистра esp, чтобы получить базовый адрес структуры thread info. С другой стороны, если структура thread union имеет длину 4 Кбайт, ядро маскирует 12 младших битов регистра esp. Это делается с помощью функции current thread info (), которая выполняет примерно следующие ассемблерные инструкции:

Read the rest of this entry »