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


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.