Следующий отрывок из книги Роберта Лава по разработке ядра Linux (LKD).
Эти контексты представляют широту деятельности ядра. В
Дело в том, что в Linux мы можем обобщить, что каждый процессор делает именно
одна из трех вещей в любой момент:
- В пользовательском пространстве выполнение пользовательского кода в процессе
- В пространстве ядра, в контексте процесса, выполнение от имени определенного процесса
- В пространстве ядра, в контексте прерываний, не связанных с процессом, обрабатывающим прерывание
Этот список является исчерпывающим. Даже угловые шкафы вписываются в один из этих трех
действия: Например, в режиме ожидания получается, что ядро
выполнение бездействующего процесса в контексте процесса в ядре.
Что я понял выше, так это то, что в Kernel-пространстве существует только два контекста (по словам Любящего, он включающий), то есть контекст процесса и контекст прерывания. Насколько я понимаю, ядро входит в контекст процесса, когда процесс вызывает системный вызов (например, read (), write () и т. Д.), Тогда как контекст прерывания происходит, когда ядро обрабатывает прерывание.
Но в ядре гораздо больше других функций, например, есть потоки ядра, запланированные для выполнения рутинных работ (например, восстановление памяти), и даже сам планировщик не вызывается ни системным вызовом, ни прерыванием.
Так что мне интересно, почему в тексте говорится, что в ядре всего два контекста ...?