Чи є ядро ​​процесом?


30
  1. У Linux ми завжди кажемо, що перший процес - initpid == 1. Але чому не ядро ​​(запуск), яке налаштовує систему і створює initпроцес. Чи є ядро ​​процесом?
  2. Ми знаємо, що всі потоки користувальницького простору вкорінені в процесі init. Тоді як щодо планувальника та інших елементів ядра, наприклад управління пам'яттю?

В основному те, що мене бентежить, - це структура ядра. Якщо це процес, це єдиний процес, або він складається з декількох процесів?

Відповіді:


19

Короткі відповіді:

  1. Ні, це не процес
  2. Користувацькі потоки не вкорінюються в init.

Ініт - це лише перший процес; він не управляє жодними процесами чи потоками. Він створює деякі, використовуючи fork () і exec syscalls ядра.

Я думаю, ви маєте каламутне уявлення про те, що таке процес. це не означає лише трохи виконувати код. Так, ядро ​​виконується перед init (а завантажувач навіть перед цим). Але "процес" має конкретне визначення:

  • Працює в просторі користувача
  • Запускається з ідентифікатором процесу
  • Багато взаємодій потрібно пройти через ядро
  • Усі ресурси повинні надходити з ядра
  • Потрібно запланувати ядро

Отже, як тільки ядро ​​ініціалізується, воно запускає init, який потім породжує всі інші процеси, про які говорить його конфігурація.

Що стосується №2, то все ядро ​​є в ядрі. Подумайте про ядро ​​як про велику область коду. Знову ж таки, не процес, а велика крапка коду. Частини ядра стосуються управління пам'яттю, частини - з частинами планування самого себе (як драйвери тощо), а частини - з процесами планування.


3
Цікаво, чи знає ОП достатньо, щоб його розум був роздутий мікроядрами? Я не включив його до свого редагування, тому що думав, що це буде відволікати, у будь-якому випадку.
new123456

4
Один із способів мислення ядра - це як гігантська бібліотека, в якій входять точки входу (система дзвонить), щоб попросити його зробити щось від вашого імені. Інший, доповнюючий погляд, полягає в тому, що він сидить в очікуванні подій для обробки подій, будь то системний дзвінок від користувача або апаратне переривання (наприклад, прийшов новий мережевий пакет). Для деяких матеріалів потрібен час для обробки, тому ядро ​​просто відправляє роботу до внутрішніх потоків і повертається тому, хто зателефонував.
фонбранд

15

Ядро насправді не веде себе як процес. Він не планується, він або працює від імені процесу (так званий процес-контекст або користувальницький контекст), або запускається внаслідок переривання або винятку (так званий переривання-контекст).

Це означає, що ядро ​​Linux створює нитки ядра для виконання деяких завдань або для уникнення занадто довгого запуску чогось у контексті переривання (саме це робить потік ksoftirqd, уникаючи надмірних затримок, які можуть призвести, наприклад: до падіння аудіо, ...) .

Ви можете бачити потоки ядра на виході psкоманди. Їх легко ідентифікувати: їх ім’я - між дужками. Деякі з них запускають один екземпляр на процесор, процесор ідентифікується числом після косої риси, тому [ksoftirqd / 0] є екземпляром ksoftirqd в CPU 0.


1

Існують поняття в мікроядрах, де різні частини ядра справді є процесами з основним дозорним здебільшого просто керує IPC.

Linux - для кращого чи гіршого - не є системою мікроядер.


1

Ні, це не так ... Ядро (та розширення ядра) безпосередньо завантажуються в пам'ять. Якщо в ядрі є небезпечний код, між ним і великими неприємностями нічого не стоїть.

Якщо убік, ядро ​​в основному виконує / перемикається між процесами. Очевидно, те, що насправді запускає процеси, не буде самим процесом.

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


0

ninjalj написав: "Ядро насправді не веде себе як процес. Це не планується",

Ну, є непрацюючий процес (в основному 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-process_19su.pdf , сторінка 36

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.