Являются ли потоки ядра процессами и демонами?


10

Из архитектуры ядра Linux Mauerer,

Потоки ядра - это процессы, запускаемые непосредственно самим ядром. Они делегируют функцию ядра отдельному процессу и выполняют ее там «параллельно» с другими процессами в системе (и, фактически, параллельно с выполнением самого ядра). Потоки ядра часто называют (ядро) демонами . Они используются для выполнения, например, следующих задач:

  • Периодически синхронизировать измененные страницы памяти с блочным устройством, из которого исходят страницы (например, файлы, отображенные с использованием mmap).
  • Для записи страниц памяти в область подкачки, если они используются редко.
  • Управлять отложенными действиями.
  • Для реализации журналов транзакций для файловых систем.

По сути, существует два типа потоков ядра:

  • Тип 1 - поток запускается и ожидает, пока ядро ​​не запросит выполнение определенного действия.
  • Тип 2 - После запуска поток запускается с периодическими интервалами, проверяет использование определенного ресурса и предпринимает действия, когда использование превышает или падает ниже установленного предельного значения. Ядро использует этот тип потока для задач непрерывного мониторинга.
  1. Поскольку в книге Моерера говорится, что потоки ядра являются процессами, я думаю, что они должны работать в пользовательском режиме, а не в режиме ядра. (или я не прав? Может ли процесс работать в режиме пользователя или в режиме ядра в разное время или только в одном режиме?)

    Но в «Понимании ядра Linux» Bovet говорится, что потоки ядра работают только в режиме ядра (см. Цитату ниже). Являются ли понятия «нить ядра» в двух книгах одним и тем же понятием?

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

    • Потоки ядра работают только в режиме ядра, тогда как обычные процессы попеременно работают в режиме ядра и в режиме пользователя.
    • Поскольку потоки ядра работают только в режиме ядра, они используют только линейные адреса, превышающие PAGE_OFFSET. Обычные процессы, с другой стороны, используют все четыре гигабайта линейных адресов в режиме пользователя или в режиме ядра.
  2. В книге Маурера говорится, что потоки ядра запускаются непосредственно ядром, и, похоже, также говорится, что демоны являются синонимами потоков ядра. Поэтому я думаю, что демоны должны запускаться непосредственно ядром.

    Но https://unix.stackexchange.com/a/193918/674 говорит, что screenдемон запускается через screenпользовательский интерфейс (см. Цитату ниже). Я думаю, что screenпользовательский интерфейс - это процесс, а не ядро. Являются ли понятия daemonв книге Морера и в связанном ответе одним и тем же понятием?

    При первом запуске screenвы фактически запускаете пользовательский интерфейс (пользовательский интерфейс), который по умолчанию создает демона (менеджер сеансов).

  3. В общем, как вы понимаете понятия «потоки ядра», «процесс» и «демон», их отношения и различия?


Тим, ух ты, ты проводишь большие исследования, потому что я слежу за тобой несколько дней.
rɑːdʒɑ

Ответы:


10

Первый: кредит идет /programming/15983872/difference-between-user-level-and-kernel-supported-threads

Пользовательские потоки и потоки ядра одинаковы. (Вы можете посмотреть, посмотрев в / proc / и увидев, что там тоже есть потоки ядра.)

Пользовательский поток - тот, который выполняет код пользовательского пространства. Но он может вызвать пространство ядра в любое время. Он по-прежнему считается «пользовательским» потоком, хотя он выполняет код ядра с повышенными уровнями безопасности.

Поток ядра - это тот, который выполняет только код ядра и не связан с процессом в пользовательском пространстве. Они похожи на «демоны UNIX», за исключением того, что они являются демонами только для ядра. Таким образом, вы можете сказать, что ядро ​​является многопоточной программой. Например, есть ветка ядра для свопинга. Это заставляет все проблемы подкачки «сериализоваться» в один поток.

Если пользовательскому потоку что-то нужно, он вызовет ядро, которое помечает этот поток как спящий. Позже поток подкачки находит данные, поэтому он помечает пользовательский поток как работоспособный. Еще позже «пользовательский поток» возвращается из ядра обратно в пользовательскую область, как будто ничего не произошло.

Фактически все потоки начинаются в пространстве ядра, потому что операция clone () происходит в пространстве ядра. (И еще нужно учесть ядро, прежде чем вы сможете «вернуться» к новому процессу в пространстве пользователя.)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.