Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
практична робота 8.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
232.96 Кб
Скачать

Апаратні переривання (interrupt), виключення (exception), програмні переривання (trap, software interrupt). Їх обробка

В лекції 13 (розділ "Опит пристроїв і переривання. Виняткові ситуації і системні виклики") вже вводилися поняття апаратного переривання, виключення і програмного переривання. Стисло нагадаємо сказане.

Після видачі запиту уведення-виведення у процесора існує два способи дізнатися про те, що обробка запиту пристроєм завершена. Перший спосіб полягає в регулярній перевірці процесором біта зайнятості в регістрі стану контроллера відповідного пристрою (polling). Другий спосіб полягає у використовуванні переривань. При другому способі процесор має спеціальний вхід, на який пристрої уведення-виведення, використовуючи контроллер переривань або безпосередньо, виставляють сигнал запиту переривання (interrupt request) при завершенні операції уведення-виведення. За наявності такого сигналу процесор після виконання поточної команди не виконує наступну, а, зберігши стан ряду регістрів і, можливо, завантаживши в частину регістрів нові значення, переходить до виконання команд, розташованих за деякими фіксованими адресами. Після закінчення обробки переривання можна відновити стан процесора і продовжити його роботу з команди, виконання якої було відкладено.

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

Цим же механізмом часто користуються і для реалізації так званих програмних переривань (software interrupt, trap), вживаних, наприклад, для перемикання процесора з режиму користувача в режим ядра усередині системних викликів. Для виконання дій, аналогічних діям по обробці переривання, процесор в цьому випадку повинен виконати спеціальну команду.

Необхідно чітко уявляти собі різницю між цими трьома поняттями, для чого не зайвим буде в черговий раз звернутися до лекцій (лекція 13, розділ "Опит пристроїв і переривання. Виняткові ситуації і системні виклики").

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

Поняття сигналу. Способи виникнення сигналів і види їх обробки

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

Процес може одержати сигнал від:

  1. hardware (при виникненні виняткової ситуації);

  2. іншого процесу, що виконав системний виклик передачі сигналу;

  3. операційної системи (при настанні деяких подій);

  4. терміналу (при натисненні певної комбінації клавіш);

  5. системи управління завданнями (при виконанні команди kill – ми розглянемо її пізніше).

Передачу сигналів процесу у випадках його генерації джерелами 2, 3 і 5, тобто, кінець кінцем, яким-небудь іншим процесом, можна розглядати як реалізацію в UNIX сигнальних засобів зв'язку, про які розказувалося в лекції 4.

Існує три варіанти реакції процесу на сигнал:

  1. Примусово проігнорувати сигнал.

  2. Провести обробку за умовчанням: проігнорувати, зупинити процес (перевести в стан очікування до отримання іншого спеціального сигналу), або завершити роботу з утворенням core файлу або без нього.

  3. Виконати обробку сигналу, специфіковану користувачем.

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

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

При системному виклику exec() зберігаються реакції тільки для тих сигналів, які ігнорувалися або оброблялися за умовчанням. Отримання будь-якого сигналу, який до виклику exec() оброблявся користувачем, приведе до завершення процесу.

Перш ніж продовжити тему сигналів, нам доведеться докладніше зупинитися на ієрархії процесів в операційній системі.