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


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

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

Ответы:


19

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

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

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

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

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

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

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


3
Интересно, знает ли ОП достаточно для того, чтобы его мозг был взорван микроядрами? Я не включил его в мои правки, потому что думал, что это будет отвлекать, во всяком случае.
new123456

4
Один из способов восприятия ядра подобен гигантской библиотеке с точками входа (системные вызовы), которые просят ее сделать что-то от вашего имени. Еще одно дополнительное представление состоит в том, что он ожидает обработки событий, будь то системный вызов от пользователя или аппаратное прерывание (например, поступил новый сетевой пакет). Некоторые вещи требуют времени для обработки, поэтому ядро ​​просто отправляет работу внутренним потокам и возвращает тому, кто вызвал.
vonbrand

15

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

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

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


1

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

Linux - к лучшему или к худшему - не является системой с микроядром.


1

Нет, это не так ... Ядро (и расширения ядра) загружаются непосредственно в память. Если в ядре есть небезопасный код, между ним и большими проблемами ничего не стоит.

Кроме того, ядро ​​в основном выполняет / переключается между процессами. Очевидно, что то, что на самом деле запускает процессы, не будет самим процессом.

(tl; dr 1. no 2. часть ядра / его расширение)


0

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

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


0

Переключение контекста

❖ Процессы управляются общим фрагментом кода ОС, называемого ядром

▪ The kernel is not a separate process, but rather runs as part of a user process

Переключение контекста передает поток управления от одного процесса другому и выполняется с использованием кода ядра

Источник: https://courses.cs.washington.edu/courses/cse351/19su/lectures/18/CSE351-L18-processes_19su.pdf , стр. 36.

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