Подтвердить что ты не робот

В каком контексте Kernel Thread работает в Linux?

Я новичок в ядре Linux.
Я знаю, что есть два контекста 1. Контекст процесса, работающий в пользовательском пространстве или в пространстве ядра (например: как часть системного вызова)
2. Контекст прерывания

В каком контексте работает Kernel Thread (не связанный с какой-либо пользовательской нитью, например: задача flush)?

Есть ли другой контекст, отличный от контекста Process и Interrupt в ядре Linux?

4b9b3361

Ответ 1

Потоки ядра выполняются в контексте процесса в пространстве ядра. Хотя есть некоторые потоки ядра, которые также обрабатывают прерывания. Они называются обработчики прерываний с резьбой. Но они все еще работают в контексте процесса!

Здесь - отличное объяснение жизненной разницы между двумя контекстами!

Вот один из них, который поможет вам получить больше понимания!

В каком контексте выполняется код планировщика?

Насколько я знаю, процесс и прерывание - это только 2 контекста.

Ответ 2

Существует несколько состояний: некоторые могут быть специализациями других. Также см. http://www.kernel.org/doc/htmldocs/kernel-hacking.html.

  • Контекст NMI (in_nmi())
  • контекст жесткого прерывания (in_irq())
  • контекст мягкого прерывания (in_softirq())
  • (контекст, таймер и контекст работы)
  • атомный контекст (in_atomic()). Вероятно, входные пути, среди прочего, spin_lock.
  • Контекст RCU, введите rcu_read_lock например
  • контекст пользователя

Ответ 3

Ну есть определенные задачи, которые не вызываются через системный вызов или при обработке прерываний. Они обрабатываются как чистые контексты ядра, например, swapper, INIT_TASk и т.д., Которые не имеют соответствующего кода в пользовательском пространстве.