Обробка переривань з переключенням на нову задачу.


Зовсім інакше здійснюється обробка переривань у випадку, якщо дескриптором переривань є комутатор задачі. Формат комутатора задачі (task gate) відрізняється від комутаторів interrupt gate і trap gate, насамперед, тим, що в ньому замість селектора сегмента коду, на який передається керування, указується селектор сегмента стану задачі (TSS). Це ілюструється за допомогою мал. 3.14. У результаті здійснюється процедура переходу на нову задачу з повною зміною контексту, тому що сегмент стану задачі цілком визначає новий віртуальний простір і адресу початку програми, а поточний стан задачі, що переривається, апаратно (по мікропрограмі мікропроцесора) зберігається в її власному TSS.

Рис. 8.3Схема передачі керування при перериванні з переключенням на нову задачу.

При цьому відбувається повне переключення на нову задачу з вкладенням, тобто виконуються наступні дії:

1. Зберігаються всі робочі регістри процесора в поточному сегменті TSS, базова адреса цього сегмента береться в регістрі TR.

2. Поточна задача відзначається як зайнята.

3. По селекторі з Task Gate вибирається новий TSS (поле селектора міститься в регістр TR) і завантажується стан нової задачі. Нагадаємо, що завантажуються значення регістра LDTR, EFLAGS, вісім регістрів загального призначення, покажчик команди регістр EIP і шість сегментних регістрів.

4. Установлюється біт NT (next task).

5. У поле зворотного зв'язку TSS міститься селектор перерваної задачі.

6. Значення CS:IP, узяті з нового TSS, дозволяють знайти і виконати першу команду оброблювача переривання.

Таким чином, комутатор task gate дає вказівку процесору зробити переключення задачі, і обробка переривання здійснюється під контролем окремої зовнішньої задачі. У кожнім сегменті TSS є селектор локальної дескрипторної таблиці LDT, тому при переключенні задачі процесор завантажує в регістр LDTR нове значення. Це дозволяє звернутися до сегментів коду, що абсолютно не перетинаються із сегментами коду будь-яких інших задач, оскільки саме локальні дескрипторні таблиці забезпечують ефективне ізолювання віртуальних адресних просторів. Нова задача починає своє виконання на рівні привілеїв, обумовленому полем RPL нового вмісту регістра CS, що завантажується із сегмента TSS. Перевагою цього комутатора є те, що він дозволяє зберегти всі регістри процесора за допомогою механізму переключення задач, тоді як комутатори trap gate і interrupt gate зберігають тільки вміст регістрів IFLAGS, CS і IP і збереження інших регістрів покладається на програміста, що розробляє відповідну програму обробки переривання.

Заради справедливості варто визнати, що, незважаючи на можливості комутатора task gate, розробники сучасних операційних систем досить рідко його використовують, оскільки переключення на іншу задачу вимагає істотно великих витрат часу, а повне збереження всіх робочих регістрів часто і не потрібно. В основному обробку переривань здійснюють у контексті поточної задачі, тому що це приводить до менших накладних витрат і підвищує швидкодію системи.




Дата добавления: 2016-07-27; просмотров: 1667;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.