O Torvalds Linus

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

Помимо слабой антивирусной защиты «из коробки» и нестабильности в работе у MS Windows есть и свои плюсы относительно бесплатной Linux OS. Приведем только лишь некоторые из них.

Плюс первый: разумное энергопотребление. Данная причина для перехода на Windows 7 или 8 в большей доле актуальна для владельцев так называемых нетбуков. По некоторым данным прирост «жизни» батареи под седьмым «Виндовс» составляетот от 30 до 40 процентов.
Read the rest of this entry »

Операционная система 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 »

Макрос switch__to

Mar-17-2012 By root

Второй шаг переключения процессов выполняется макросом switch to. Это одна из наиболее аппаратно – зависимых процедур ядра, и для понимания ее действий требуются некоторые усилия.

Во-первых, макрос принимает три параметра, prev, next и last. Нетрудно догадаться о назначении параметров prev и next: они играют ту же роль, что и локальные переменные prev и next, т. е. являются входными параметрами, задающими ячейки памяти, хранящие адреса дескрипторов замещаемого процесса и замещающего процесса соответственно.

Read the rest of this entry »

Следовательно, ядро должно уметь работать с несколькими процессами одновременно, и дескрипторы процессов хранятся в динамической памяти, а не в области, постоянно выделенной ядру. Для каждого процесса Linux помещает две разные структуры данных в одну область памяти, свою у каждого процесса. Это небольшая структура, связанная с дескриптором процесса (структура thread infо), и стек режима ядра для данного процесса. Размер этой области обычно равен 8192 байтам (двум страничным кадрам). По соображениям эффективности, ядро хранит 8 – килобайтовую область памяти в двух соседних страничных кадрах, причем первый из них выровнен по границе 213. Это может обернуться проблемой, если доступно мало динамической памяти, потому что свободная память может оказаться сильно фрагментированной. Поэтому в архитектуре 80×86 можно сконфигурировать ядро на этапе компиляции так, чтобы область памяти, включающая в себя стек и структуру thread info, занимала один страничный кадр (4096 байтов).

Read the rest of this entry »

Оно должно знать, например, приоритет процесса, выполняется ли он процессором или блокирован в ожидании какого-то события, какое ему присвоено адресное пространство, к каким файлам ему разрешено обращаться и т. д. Для этой цели служит дескриптор процесса, структура типа task struct, поля которой содержит всю информацию, касающуюся одного процесса. Помимо большого количества полей, содержащих атрибуты процесса, его дескриптор включает в себя несколько указателей на другие структуры, которые, в свою очередь, содержат указатели на третьи структуры.

Read the rest of this entry »