Чи потрібно процес ядра щось економити при переході в режим користувача? [зачинено]


6

За словами мого професора,

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

Він прав? Чи не в процесі ядра є що зберегти?


Добре запитання, але я не знаю, чи це найкращий сайт. Я думаю, що програмісти.stackexchange.com можуть отримати кращу відповідь. Ви можете позначити власне питання модератору, і він може перенести це питання на вас.
Скотт Чемберлен

Повинно бути на StackOverflow.
Мехрдад

Він до речі говорив про певну ОС? Я думаю, що це залежить від ОС ... можна написати ОС, для якої потрібно зберегти деякі речі, я думаю.
Мехрдад

1
Це питання не має нічого спільного з програмуванням, і, таким чином, пропонування міграції програмістам та переповнення стека - не правильний спосіб вирішити це питання; він більше лежить на комп'ютерах і внутрішніх справах , я б не сказав, що це тема на Super User, і це майже як cs.stackexchange.com або cstheory.stackexchange.com . Але добре, давайте подивимось, що громада вирішує з цим зробити ...
Тамара Війсман

Це більше інформатика, ніж усе інше, голосування за закриття не пропонує бета-сайт як варіант.
Тог

Відповіді:


5

Це краще зрозуміти, якщо ми розберемо вашу історію та спробуємо використати кращу термінологію:

  • під час переходу з режиму користувача в режим ядра

    Це також називається перемикачем режиму.

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

    Що таке рутина ? Це фрагмент коду, який обробляє виклик / переривання.

  • статус користувальницького процесу повинен бути збережений повністю.

    Точно, так як ядро буде працювати під управління ядром рутину ми повинні тимчасово зберегти статус призначеного для користувача процесу , який був запущений.

  • Але при переході з режиму ядра в режим користувача нічого не потрібно зберігати

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

    Натомість відбувається те, що статус користувальницького процесу потрібно знову завантажити, щоб продовжити виконання користувальницького процесу.

Отже, у нас є дві різні речі:

  • користувацький процес , який потрібно продовжувати виконувати за допомогою перемикача режиму, щоб його стан зберігався.

  • порядок роботи ядра , який виконується за допомогою перемикача режиму, тому його статус розпоряджається.

Щодо відповіді на ваше запитання " Чи не може процес ядра зберегти? "; насправді не запущений процес ядра, це просто шим, який містить пам'ять ядра, підпрограми та деякі інші магії.


1
Переключення між режимом ядра та режимом користувача називається "переключення режиму". "Переключення контексту" змінюється від одного процесу до іншого. Люди часто використовують "контекстний перемикач", коли вони посилаються на зміну режиму, але це не правильно.
Патрік Сеймур

@PatrickS: Ви помиляєтесь, коли заявляєте, що це невірно, контекст завдання має еквівалентне відношення до стану процесу. Що відбувається при "перемиканні контексту", це те, що ви завантажуєте або зберігаєте контекст (і, таким чином, статус процесу), саме це і відбувається, коли ви робите "перемикач режимів". Тому твердження "контекстний перемикач відбувається, коли процесор робить перемикач режимів", який я розширив далі в нижній частині моєї відповіді, є істинним.
Тамара Війсман

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

@PatrickS: Комутація контексту змінює контексти, а не процеси; повні технологічні комутатори не мають значення.
Тамара Війсман

Зміна контекстів для того, щоб ....?
Патрік Сеймур

1

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

Це як у звичайній програмі: Якщо у вас є функція, hypotі вона викликає sqrt, система має зберегти hypotлокальні змінні та точку повернення (лічильник програми / покажчик інструкцій, з якого sqrtвикликався). Але коли sqrtповернеться і hypotвідновиться, sqrtрамку стека можна відкинути.


1

Це здається, що це в контексті випереджальної багатозадачності .

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


Ні, ОС / ядро ​​"не завжди працює". Також немає інших програм (потоків). Більшість ниток проводять більшу частину свого часу в очікуванні. Коли вони чекають, вони не бігають. Більшість ОС / ядра є купою процедур, які отримують виклик з коду програми - коли такий дзвінок не виконується, ці підпрограми не «працюють». Деякі ОС / ядро ​​запускаються у відповідь на переривання, але як тільки переривання обробляється, також не виконується порядок служби переривання.
Джеймі Ханрахан

1

Професор частково правильний.

Дані, що зберігаються при переході з користувальницького режиму в режим ядра - це стан процесора , а не процес. Режим користувача та режим ядра пов'язані з процесором, а не з процесом. Коли ядро ​​виконує якусь функцію від імені користувача, стан ЦП заздалегідь зберігається. Тобто стан процесора при виконанні коду режиму користувача. Потім ядро ​​виконує свою дію на основі запиту коду режиму користувача. Нарешті, ядро ​​відновлює стан процесора до раніше збереженого стану. Ядро може повернути ЦП у режим користувача, залежно від ядра.

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

Компоненти операційної системи зазвичай працюють у режимі ядра, також називається Ring 0 на процесорах x86. Користувацький режим містить програми та іноді його називають Кільцем 3.

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