
- •Практичне заняття 8 Організація уведення-виведення в unix. Файли пристроїв. Апаратні переривання
- •Операції над файловими системами. Монтування файлових систем
- •Блокові, символьні пристрої. Поняття драйвера. Блокові, символьні драйвери, драйвери низького рівня. Файловий інтерфейс
- •Апаратні переривання (interrupt), виключення (exception), програмні переривання (trap, software interrupt). Їх обробка
- •Поняття сигналу. Способи виникнення сигналів і види їх обробки
- •Поняття групи процесів, сеансу, лідера групи, лідера сеансу, управляючого терміналу сеансу. Системні виклики getpgrp(), setpgrp(), getpgid(), setpgid(), getsid(), setsid()
- •Системний виклик kill() і команда kill
- •Вивчення особливостей отримання термінальних сигналів поточною і фоновою групою процесів
- •Системний виклик signal(). Установка власного обробника сигналу
- •Прогін програми, що ігнорує сигнал sigint
- •Прогін програми з призначеною для користувача обробкою сигналу sigint
- •Відновлення попередньої реакції на сигнал
- •Сигнали sigusr1 і sigusr2. Використовування сигналів для синхронізації процесів
- •Завершення породженого процесу. Системний виклик waitpid(). Сигнал sigchld
- •Прогін програми для ілюстрації обробки сигналу sigchld
- •Виникнення сигналу sigpipe при спробі запису в pipe або fifo, який ніхто не збирається читати
- •Поняття про надійність сигналів. Posix функції для роботи з сигналами
- •Питання до захисту роботи
Апаратні переривання (interrupt), виключення (exception), програмні переривання (trap, software interrupt). Їх обробка
В лекції 13 (розділ "Опит пристроїв і переривання. Виняткові ситуації і системні виклики") вже вводилися поняття апаратного переривання, виключення і програмного переривання. Стисло нагадаємо сказане.
Після видачі запиту уведення-виведення у процесора існує два способи дізнатися про те, що обробка запиту пристроєм завершена. Перший спосіб полягає в регулярній перевірці процесором біта зайнятості в регістрі стану контроллера відповідного пристрою (polling). Другий спосіб полягає у використовуванні переривань. При другому способі процесор має спеціальний вхід, на який пристрої уведення-виведення, використовуючи контроллер переривань або безпосередньо, виставляють сигнал запиту переривання (interrupt request) при завершенні операції уведення-виведення. За наявності такого сигналу процесор після виконання поточної команди не виконує наступну, а, зберігши стан ряду регістрів і, можливо, завантаживши в частину регістрів нові значення, переходить до виконання команд, розташованих за деякими фіксованими адресами. Після закінчення обробки переривання можна відновити стан процесора і продовжити його роботу з команди, виконання якої було відкладено.
Аналогічний механізм часто використовується при обробці виняткових ситуацій (exception), що виникають при виконанні команди процесором (неправильна адреса в команді, захист пам'яті, розподіл на нуль і т.д.). В цьому випадку процесор не завершує виконання команди, а поступає, як і при перериванні, зберігаючи свій стан до моменту початку її виконання.
Цим же механізмом часто користуються і для реалізації так званих програмних переривань (software interrupt, trap), вживаних, наприклад, для перемикання процесора з режиму користувача в режим ядра усередині системних викликів. Для виконання дій, аналогічних діям по обробці переривання, процесор в цьому випадку повинен виконати спеціальну команду.
Необхідно чітко уявляти собі різницю між цими трьома поняттями, для чого не зайвим буде в черговий раз звернутися до лекцій (лекція 13, розділ "Опит пристроїв і переривання. Виняткові ситуації і системні виклики").
Як правило, обробку апаратних переривань від пристроїв уведення-виведення проводить сама операційна система, не довіряючи роботу з системними ресурсами процесам користувача. Обробка ж виняткових ситуацій і деяких програмних переривань цілком може бути покладена на призначений для користувача процес через механізм сигналів.
Поняття сигналу. Способи виникнення сигналів і види їх обробки
З погляду користувача отримання процесом сигналу виглядає як виникнення переривання. Процес припиняє регулярне виконання, і управління передається механізму обробки сигналу. Після закінчення обробки сигналу процес може відновити регулярне виконання. Типи сигналів (їх прийнято задавати номерами, як правило, в діапазоні від 1 до 31 включно або спеціальними символьними позначеннями) і способи їх виникнення в системі жорстко регламентовані.
Процес може одержати сигнал від:
hardware (при виникненні виняткової ситуації);
іншого процесу, що виконав системний виклик передачі сигналу;
операційної системи (при настанні деяких подій);
терміналу (при натисненні певної комбінації клавіш);
системи управління завданнями (при виконанні команди kill – ми розглянемо її пізніше).
Передачу сигналів процесу у випадках його генерації джерелами 2, 3 і 5, тобто, кінець кінцем, яким-небудь іншим процесом, можна розглядати як реалізацію в UNIX сигнальних засобів зв'язку, про які розказувалося в лекції 4.
Існує три варіанти реакції процесу на сигнал:
Примусово проігнорувати сигнал.
Провести обробку за умовчанням: проігнорувати, зупинити процес (перевести в стан очікування до отримання іншого спеціального сигналу), або завершити роботу з утворенням core файлу або без нього.
Виконати обробку сигналу, специфіковану користувачем.
Змінити реакцію процесу на сигнал можна за допомогою спеціальних системних викликів, які ми розглянемо пізніше. Реакція на деякі сигнали не допускає зміни, і вони можуть бути оброблені тільки за умовчанням. Так, наприклад, сигнал з номером 9 – SIGKILL обробляється тільки за умовчанням і завжди приводить до завершення процесу.
Важливим питанням при програмуванні з використанням сигналів є питання про збереження реакції на них при породженні нового процесу або заміні його призначеного для користувача контексту. При системному виклику fork() всі встановлені реакції на сигнали успадковується породженим процесом.
При системному виклику exec() зберігаються реакції тільки для тих сигналів, які ігнорувалися або оброблялися за умовчанням. Отримання будь-якого сигналу, який до виклику exec() оброблявся користувачем, приведе до завершення процесу.
Перш ніж продовжити тему сигналів, нам доведеться докладніше зупинитися на ієрархії процесів в операційній системі.