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