Відповіді:
Режим ядра
Програма, що працює в цьому режимі, має повний доступ до базового обладнання. Він може виконати будь-яку інструкцію процесора, отримати доступ до будь-якої адреси пам'яті і по суті робити все, що завгодно.
Код режиму користувача, що виконується в цьому режимі, обмежується модифікацією обладнання через API OS. Він не може отримати доступ до обладнання безпосередньо на всіх .
Цікавим є те, що у загальних архітектурах це застосовується за допомогою апаратних засобів - не лише ОС. Зокрема, архітектура x86 має захисні кільця .
Великою перевагою подібного поділу є те, що коли програма виходить з ладу, що працює в режимі користувача, це не завжди є фатальним. Насправді в сучасних системах зазвичай це не так.
Ознайомтеся з підписом Джеффа . Це його звичайні хороші речі.
Коротка відповідь така: вона просто говорить вам, де програми проводять свій час.
Для більш тривалої відповіді я поясню це в два кроки. Спочатку:
1. Вхід у режим ядра
Кожен звичайний код, який ви пишете, працює в "режимі користувача".
Програми можуть використовувати бібліотеки для виконання загальних завдань для них. Це також код режиму користувача.
У якийсь момент програма може вимагати від системи основної функції. Наприклад:
Ця істотна - близька до апаратної - функціональність є частиною ядра. Це центральна програма, що стоїть на всьому комп'ютері. Він управляє всім необхідним для функціонування програм.
Для використання функції в ядрі шлях виконання програми буквально робить перехід з режиму користувача до коду ядра. Ядро виконує свою роботу і переносить шлях виконання в режим користувача.
Коли програма проводить багато часу в режимі ядра, це часто означає, що вона виконує багато апаратних заходів. Наприклад, пошук диска або потокове відео. Апаратне забезпечення також може бути несправним; робить обробку повільною і змушує програму проводити незвичайну кількість часу в просторі ядра.
2 різниця
Код у просторі ядра відрізняється високою ефективністю. Інші частини ядра можуть викликати його безпосередньо, і код має прямий доступ до кожного ресурсу системи, без будь-якої межі перевірки. Переключення між режимом ядра / користувача - також дорога операція, якої повністю уникнути, запустивши все в коді ядра.
Однак усередині ядра не так багато місця для перевірки безпеки, захисту від збоїв або запису на неправильні частини пам'яті. Це послуги, які ядро може надавати іншим програмам. Це хитрість програм, щоб повірити, що світ виглядає по-різному (програми живуть у віртуальному, пісочному / обмеженому середовищі), і тому все, що надходить / виходить із програм, може бути перекладено і захищено.
Ядро не може мати особливий захист, оскільки за ним немає нічого, щоб захистити його. Це серце системи, і коли це зупиняється, все закінчується. У вас виникає паніка ядра, або в Windows, знаменитий BSOD.
Це також ризик коду на основі ядра, і причина, що більше підсистем з низькими вимогами до продуктивності переміщується в область користувачів. Однак основні компоненти, пов'язані з обладнанням, зазвичай є кодом ядра, який не скоро зміниться.
Це різниця у тому, чи дозволяється виконуваному в даний час коду безпосередньо взаємодіяти з різними апаратними засобами. Код режиму ядра може записувати на шини пристроїв, змінювати відображення пам'яті, перемикати запущені процеси тощо. Користувацький режим може робити обчислення, і він може робити системні дзвінки в ядро, щоб взаємодіяти з рештою світу.