Является ли ядро ​​процессом?

Является ли ядро ​​процессом?
  1. В Linux мы всегда говорим, что первый процесс init(pid==1). Но почему ядро ​​(запуск) не является тем, которое настраивает систему и создает процесс init. Является ли ядро ​​процессом?
  2. Мы знаем, что все потоки пользовательского пространства коренятся в процессе init. А что насчет планировщика и других вещей ядра, таких как управление памятью?

В общем, меня смущает структура ядра. Если это процесс, то это один процесс или он состоит из нескольких процессов?

решение1

Короткие ответы:

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

Init — это всего лишь первый процесс; он не управляет никакими процессами или потоками. Он создает некоторые, используя системные вызовы ядра fork() и exec.

Я думаю, у вас смутное представление о том, что такое процесс. Это не просто кусок исполняемого кода. Да, ядро ​​выполняется до init (а загрузчик даже до него). Но у 'процесса' есть конкретное определение:

  • Работает в пространстве пользователя
  • Запускается с идентификатором процесса
  • Многие взаимодействия должны проходить через ядро.
  • Все ресурсы должны поступать из ядра
  • Необходимо запланировать ядром

Итак, как только ядро ​​инициализируется, оно запускает init, который затем запускает любые другие процессы, указанные в его конфигурации.

Что касается #2, то все, что касается ядра, находится, ну, в ядре. Представьте себе ядро ​​как большую область кода. Опять же, не процесс, а большой кусок кода. Части ядра занимаются управлением памятью, части — планированием частей самого себя (вроде драйверов и т. д.), а части — планированием процессов.

решение2

Ядро на самом деле не ведет себя как процесс вообще. Оно не планируется, оно либо запускается от имени процесса (так называемый контекст процесса или контекст пользователя), либо запускается в результате прерывания или исключения (так называемый контекст прерывания).

Тем не менее, ядро ​​Linux порождает потоки ядра для выполнения некоторых задач или для того, чтобы избежать слишком долгого выполнения чего-либо в контексте прерывания (именно это делает поток ksoftirqd, избегая чрезмерных задержек, которые могут привести, например, к потере звука и т. д.).

Вы можете увидеть потоки ядра в выводе команды ps. Их легко идентифицировать: их имя находится в скобках. Некоторые из них запускают один экземпляр на CPU, CPU идентифицируется номером после косой черты, поэтому [ksoftirqd/0] — это экземпляр ksoftirqd на CPU 0.

решение3

В микроядрах существуют концепции, в которых различные части ядра на самом деле являются процессами, а основной страж в основном просто управляет IPC.

Linux — хорошо это или плохо — не является микроядерной системой.

решение4

ninjalj написал: «Ядро на самом деле вообще не ведет себя как процесс. Оно не планируется»,

Ну, есть простаивающий процесс (по сути, pid 0, хотя он нигде не отображается), который запланирован и почти всегда находится в работоспособном состоянии.

Связанный контент