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

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

5 ответов5

18

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

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

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

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

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

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

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

15

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

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

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

1

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

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

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

1

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

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

0

Ниндзяль писал: «Ядро не ведет себя как процесс вообще. Это не запланировано "

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .