Настройка и работа в Linux
adb5321d

Демоны Ядра


  • 8.1 Настройка
  • 8.2 Упражнения
  • 8.3 Дополнительные сведения

  • Когда вы используете команду ps aux, вы видите нечто вроде приведенного ниже:

    USER PID %CPU %MEM SIZE RSS TTY STAT START TIME COMMAND root 1 0.1 8.0 1284 536 ? S 07:37 0:04 init [2] root 2 0.0 0.0 0 0 ? SW 07:37 0:00 (kflushd) root 3 0.0 0.0 0 0 ? SW 07:37 0:00 (kupdate) root 4 0.0 0.0 0 0 ? SW 07:37 0:00 (kpiod) root 5 0.0 0.0 0 0 ? SW 07:37 0:00 (kswapd) root 52 0.0 10.7 1552 716 ? S 07:38 0:01 syslogd -m 0 root 54 0.0 7.1 1276 480 ? S 07:38 0:00 klogd root 56 0.3 17.3 2232 1156 1 S 07:38 0:13 -bash root 57 0.0 7.1 1272 480 2 S 07:38 0:01 /sbin/agetty 38400 tt root 64 0.1 7.2 1272 484 S1 S 08:16 0:01 /sbin/agetty -L ttyS1 root 70 0.0 10.6 1472 708 1 R Sep 11 0:01 ps aux

    Это список процессов, выполняющихся в системе. Информация берется из файловой системы /proc, описанной в предыдущем разделе. Заметьте, что init всегда имеет номер один. Процессами номер 2, 3, 4 и 5 являются kflushd, kupdate, kpiod и kswapd. Есть в них нечто странное: в обеих колонках виртуального размера (SIZE) и реального размера (RSS) стоят нули. Как процесс может не использовать память?

    Эти процессы являются демонами ядра. Большая часть функций ядра не проявляется в списке процессов, и вы можете оценить объем потребляемой ядром памяти только путем вычитания доступной памяти из общего размера памяти компьютера. Демоны ядра стартуют после init и, следовательно, получают номера подобно другим процессам. Но их код и данные остаются в памяти, принадлежащей ядру.

    Имена этих процессов заключены в скобки, поскольку файловая система /proc не имеет информации о командах, которыми эти процессы были запущены.

    Так для чего нужны демоны ядра? Предыдущие версии документа содержали просьбу о помощи, так как я очень мало знал о демонах ядра. Последующее изложение было собрано из нескольких разных откликов на эту просьбу, за которые я весьма признателен. Приветствуются и будущие советы, ссылки и исправления!

    Ввод и вывод выполняются через расположенные в памяти буферы. Это позволяет программам выполняться быстрее. То, что программа записывает может быть сохранено в памяти, в буфере, и записано на диск позднее, более крупной и эффективной порцией. Эта работа выполняется демонами kflushd и kupdate: kupdate выполняется периодически (5 секунд?) проверяя существование "грязных" буферов. Если таковые присутствуют, он командует kflushd записать их на диск.

    Процессы часто остаются без работы, а некоторым нет необходимости держать весь свой код и данные в памяти. Это значит, что мы могли бы использовать память лучшим образом, перемещая неиспользуемые части программ в своп-раздел(ы) на жестком диске. Работа по перемещению данных и кода из памяти на диск и обратно выполняется демонами kpiod и kswapd. Каждую секунду или около того kswapd просыпается чтобы проверить обстановку в памяти и, если что-либо требуется загрузить из свопа в память или не хватает свободной памяти он вызывает kpiod.

    Если вы настроили использование автоматического управления питанием (APM), здесь будет присутствовать и демон kapmd.



    Содержание раздела