Що означає, коли код виконується в режимі [kernel | user]?


14

Що означає, коли код виконується в режимі ядра або користувача?

Відповіді:


15

Режим ядра

Програма, що працює в цьому режимі, має повний доступ до базового обладнання. Він може виконати будь-яку інструкцію процесора, отримати доступ до будь-якої адреси пам'яті і по суті робити все, що завгодно.

Код режиму користувача, що виконується в цьому режимі, обмежується модифікацією обладнання через API OS. Він не може отримати доступ до обладнання безпосередньо на всіх .

Цікавим є те, що у загальних архітектурах це застосовується за допомогою апаратних засобів - не лише ОС. Зокрема, архітектура x86 має захисні кільця .

Великою перевагою подібного поділу є те, що коли програма виходить з ладу, що працює в режимі користувача, це не завжди є фатальним. Насправді в сучасних системах зазвичай це не так.

Ознайомтеся з підписом Джеффа . Це його звичайні хороші речі.


3

Коротка відповідь така: вона просто говорить вам, де програми проводять свій час.

Для більш тривалої відповіді я поясню це в два кроки. Спочатку:

1. Вхід у режим ядра

Кожен звичайний код, який ви пишете, працює в "режимі користувача".

Програми можуть використовувати бібліотеки для виконання загальних завдань для них. Це також код режиму користувача.

У якийсь момент програма може вимагати від системи основної функції. Наприклад:

  • доступ до вмісту файлів з диска
  • зберігаючи частину вільної пам'яті
  • отримання відеокадру від драйвера веб-камери
  • відправлення графічних даних на відеокарту.
  • відправлення мережевого пакету.

Ця істотна - близька до апаратної - функціональність є частиною ядра. Це центральна програма, що стоїть на всьому комп'ютері. Він управляє всім необхідним для функціонування програм.

Для використання функції в ядрі шлях виконання програми буквально робить перехід з режиму користувача до коду ядра. Ядро виконує свою роботу і переносить шлях виконання в режим користувача.

Коли програма проводить багато часу в режимі ядра, це часто означає, що вона виконує багато апаратних заходів. Наприклад, пошук диска або потокове відео. Апаратне забезпечення також може бути несправним; робить обробку повільною і змушує програму проводити незвичайну кількість часу в просторі ядра.


2 різниця

Код у просторі ядра відрізняється високою ефективністю. Інші частини ядра можуть викликати його безпосередньо, і код має прямий доступ до кожного ресурсу системи, без будь-якої межі перевірки. Переключення між режимом ядра / користувача - також дорога операція, якої повністю уникнути, запустивши все в коді ядра.

Однак усередині ядра не так багато місця для перевірки безпеки, захисту від збоїв або запису на неправильні частини пам'яті. Це послуги, які ядро ​​може надавати іншим програмам. Це хитрість програм, щоб повірити, що світ виглядає по-різному (програми живуть у віртуальному, пісочному / обмеженому середовищі), і тому все, що надходить / виходить із програм, може бути перекладено і захищено.

Ядро не може мати особливий захист, оскільки за ним немає нічого, щоб захистити його. Це серце системи, і коли це зупиняється, все закінчується. У вас виникає паніка ядра, або в Windows, знаменитий BSOD.

Це також ризик коду на основі ядра, і причина, що більше підсистем з низькими вимогами до продуктивності переміщується в область користувачів. Однак основні компоненти, пов'язані з обладнанням, зазвичай є кодом ядра, який не скоро зміниться.


2

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

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