Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Узагальнена процедура обробки переривання.

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

1. У стек поміщається регістр флагів PSW.

2. Флаг включення/вимикання переривань IF і флаг трасування TF, що знаходяться в регістрі PSW, обнуляются для блокування інших маскованих переривань і виключення покрокового режиму виконання команд.

3. Значення регістрів CS і IP зберігаються в стеці слідом за PSW.

4. Обчислюється адреса вектора переривання, і з вектора, який відповідає номеру переривання, завантажуються нові значення IP і CS.

Коли системна підпрограма приймає керування, вона може знову дозволити масковані переривання командою STI (set interrupt flag, установити флаг переривань), що переводить флаг IF у стан 1, що дозволяє мікропроцесору знову реагувати на переривання, ініціалізовані зовнішніми пристроями, оскільки стекова організація дозволяє вкладення переривань одне в одного.

Закінчивши роботу, підпрограма обробки переривання повинна виконати інструкцію IRET (interrupt return), що витягає зі стека три 16-бітових значення і завантажує їх у покажчик команд IP, регістр сегмента команд CS і регістр PSW відповідно. Таким чином, процесор зможе продовжити роботу з того місця, де він був перерваний.

У випадку зовнішніх переривань процедура переходу на підпрограму обробки переривання доповнюється наступними кроками:

1. Контролер переривань одержує заявку від визначеного периферійного
пристрою і, дотримуючи схеми пріоритетів, генерує сигнал INTR (interrupt request), що є вхідним для мікропроцесора.

2.Мікропроцесор перевіряє флаг IF у регістрі PSW. Якщо він встановлений у 1, то переходимо до кроку 3. У противному випадку робота процесора не переривається. Часто говорять, що переривання замасковані, хоча вірніше говорити, що вони відключені. Маскуються (забороняються) окремі лінії запиту на переривання за допомогою програмування контролера переривань.

3.Мікропроцесор генерує сигнал INTA (підтвердження переривання). У відповідь на цей сигнал контролер переривання посилає по шині даних номер переривання. Після цього виконується описана нами раніше процедура передачі керування відповідній програмі обробки переривання.

Номер переривання і його пріоритет установлюються на етапі ініціалізації системи. Після запуску ОС користувач, як ми уже відзначали, може змінити таблицю векторів переривання, оскільки вона йому доступна.

5. Робота системи переривань у захищеному режимі роботи процесора.

У захищеному режимі роботи система переривань діє зовсім інакше. Насамперед, система переривань мікропроцесора i80x86 при роботі в захищеному режимі замість таблиці векторів, про яку ми говорили вище, має справу з таблицею дескрипторів переривань(IDT, interrupt descriptor table). Справа тут не стільки в назві таблиці, скільки в тім, що таблиця IDT являє собою не таблицю з адресами оброблювачів переривань, а таблицю зі спеціальними системними структурами даних (дескрипторами), доступ до якої з боку користувацьких (прикладних) програм неможливий. Тільки сам мікропроцесор (його система переривань) і код операційної системи можуть одержати доступ до цієї таблиці, що являє собою спеціальний сегмент, адреса і довжина якого містяться в регістрі IDTR (див. мал. 3.2). Цей регістр аналогічний регістру GDTR у тім відношенні, що він ініціалізується один раз при завантаженні системи. Цікаво помітити, що в реальному режимі роботи регістр IDTR так само вказує адресу таблиці переривань, але при цьому, як і в процесорі і8086, кожен елемент таблиці переривань (вектор) займає всього 4 байти і містить 32-бітну адресу у форматі селектор:зсув (CS:IP). Початкове значення цього регістра дорівнює нулю, але в нього можна занести й інше значення. У цьому випадку таблиця векторів переривань буде знаходитися в іншому місці оперативної пам'яті. Природньо, що перед тим, як це зробити (занести в регістр IDTR нове значення), необхідно підготувати саму таблицю векторів. У захищеному режимі роботи завантаження регістра IDTR може зробити тільки код з максимальним рівнем привілеїв.Кожен елемент у таблиці дескрипторів переривань, про яку ми говоримо вже в захищеному режимі, являє собою 8-байтову структуру, більш схожу на дескриптор шлюзу (gate), ніж на дескриптор сегмента. Як ми вже знаємо, у залежності від причини переривання процесор автоматично індексує таблицю переривань і вибирає відповідний елемент, за допомогою якого і здійснюється перенапрямок у виконанні коду, тобто передача керування на оброблювач переривання. Однак таблиця IDT містить тільки шлюзи, а не дескриптори сегментів коду, тому фактично виходить непряма адресація, але з використанням розглянутого раніше механізму захисту за допомогою рівнів привілею. Завдяки цьому користувачі вже не можуть самі змінити обробку переривань, що визначається системним програмним забезпеченням.

Дескриптор переривань може належати до одного з трьох типів:

· комутатор переривання (interrupt gate);

· комутатор перехоплення (trap gate);

· комутатор задачі (task gate).

При виявленні запиту на переривання і за умови, що переривання зараз дозволені, процесор діє в залежності від типу дескриптора (комутатора), що відповідає номеру переривання. Перші два типи дескриптора переривань викликають перехід на відповідні сегменти коду, що належать віртуальному адресному простору поточного обчислювального процесу. Тому про них говорять, що обробка переривань по цих дескрипторах здійснюється під контролем поточної задачі. Останній тип дескриптора — комутатор задачі — викликає повне переключення процесора на нову задачу зі зміною всього контексту відповідно до сегмента стану задачі (TSS). Розглянемо ці варіанти.

Обробка переривань у контексті поточної задачі.

Розглянемо мал. 3.13, що пояснює обробку переривання в контексті поточної задачі. При виникненні переривання процесор по номеру перериванняіндексує таблицю IDT, тобто адреса відповідного комутатора визначається шляхом додавання вмісту поля адреси в регістрі IDTR і номера переривання, помноженого на 8 (праворуч до номера переривання додаються три нулі). Отриманий дескриптор аналізується, і якщо його тип відповідає комутатору trap gate чи комутатору interrupt gate, то виконуються наступні дії.

1.У стек на рівні привілеїв поточного сегмента коду поміщаються:

· значення SS і SP, якщо рівень привілеїв у комутаторі вище рівня привілеїв раніше виповнювався коду;

· регістр флагів EFLAGS;

· регістри CS і IP.

2. Якщо розглянутому перериванню відповідав комутатор interrupt gate, то забороняються переривання (флаг IF:=0 у регістрі EFLAGS). У випадку комутатора trap gate флаг переривань не скидається й обробка нових переривань на період обробки поточного переривання тим самим не забороняється.

3. Поле селектора з дескриптора переривань використовується для індексування таблиці дескрипторів задачі. Дескриптор сегмента заноситься в тіньовий регістр, а зсув відносно початку нового сегмента коду визначається полем зсуву з дескриптора переривання.

Мал. 8.2 Схема передачі управління при перериванні в контексті поточної задачі.

 

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


Читайте також:

  1. III. Процедура встановлення категорій об’єктам туристичної інфраструктури
  2. Бази даних як засіб зберігання й обробки інформації
  3. Банкрутство підприємства: причини, наслідки, процедура.
  4. Вибір режимів обробки заготовки різанням
  5. Виготовлення до обробки яєць
  6. Види оцінювання та процедура перевірки
  7. Види та процедура реструктуризації
  8. Визначення послідовності обробки поверхонь заготовки
  9. Вимоги до обробки кондитерських мішків
  10. Відповідальність суб’єктів містобудівної діяльності за порушення під час виконання будівельних робіт. Повноваження ДАБК та процедура накладення санкцій
  11. Джерела живлення установок електрохімічної обробки
  12. ЕЛЕКТРОКІНЕТИЧНІ МЕТОДИ ОБРОБКИ МАТЕРІАЛІВ.




Переглядів: 962

<== попередня сторінка | наступна сторінка ==>
Типи переривань. | Обробка переривань з переключенням на нову задачу.

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

  

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.018 сек.