Из архитектуры ядра Linux Mauerer,
Потоки ядра - это процессы, запускаемые непосредственно самим ядром. Они делегируют функцию ядра отдельному процессу и выполняют ее там «параллельно» с другими процессами в системе (и, фактически, параллельно с выполнением самого ядра). Потоки ядра часто называют (ядро) демонами . Они используются для выполнения, например, следующих задач:
- Периодически синхронизировать измененные страницы памяти с блочным устройством, из которого исходят страницы (например, файлы, отображенные с использованием mmap).
- Для записи страниц памяти в область подкачки, если они используются редко.
- Управлять отложенными действиями.
- Для реализации журналов транзакций для файловых систем.
По сути, существует два типа потоков ядра:
- Тип 1 - поток запускается и ожидает, пока ядро не запросит выполнение определенного действия.
- Тип 2 - После запуска поток запускается с периодическими интервалами, проверяет использование определенного ресурса и предпринимает действия, когда использование превышает или падает ниже установленного предельного значения. Ядро использует этот тип потока для задач непрерывного мониторинга.
Поскольку в книге Моерера говорится, что потоки ядра являются процессами, я думаю, что они должны работать в пользовательском режиме, а не в режиме ядра. (или я не прав? Может ли процесс работать в режиме пользователя или в режиме ядра в разное время или только в одном режиме?)
Но в «Понимании ядра Linux» Bovet говорится, что потоки ядра работают только в режиме ядра (см. Цитату ниже). Являются ли понятия «нить ядра» в двух книгах одним и тем же понятием?
Традиционные системы Unix делегируют некоторые критически важные задачи для периодически запускаемых процессов, включая очистку дискового кэша, выгрузку неиспользуемых страниц, обслуживание сетевых подключений и т. Д. Действительно, неэффективно выполнять эти задачи строго линейно; и их функции, и процессы конечного пользователя получают лучший отклик, если они запланированы в фоновом режиме. Поскольку некоторые системные процессы выполняются только в режиме ядра, современные операционные системы делегируют свои функции потокам ядра , которые не обременены ненужным контекстом режима пользователя. В Linux потоки ядра отличаются от обычных процессов следующими способами:
- Потоки ядра работают только в режиме ядра, тогда как обычные процессы попеременно работают в режиме ядра и в режиме пользователя.
- Поскольку потоки ядра работают только в режиме ядра, они используют только линейные адреса, превышающие PAGE_OFFSET. Обычные процессы, с другой стороны, используют все четыре гигабайта линейных адресов в режиме пользователя или в режиме ядра.
В книге Маурера говорится, что потоки ядра запускаются непосредственно ядром, и, похоже, также говорится, что демоны являются синонимами потоков ядра. Поэтому я думаю, что демоны должны запускаться непосредственно ядром.
Но https://unix.stackexchange.com/a/193918/674 говорит, что
screen
демон запускается черезscreen
пользовательский интерфейс (см. Цитату ниже). Я думаю, чтоscreen
пользовательский интерфейс - это процесс, а не ядро. Являются ли понятияdaemon
в книге Морера и в связанном ответе одним и тем же понятием?При первом запуске
screen
вы фактически запускаете пользовательский интерфейс (пользовательский интерфейс), который по умолчанию создает демона (менеджер сеансов).В общем, как вы понимаете понятия «потоки ядра», «процесс» и «демон», их отношения и различия?