Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ_Арх.doc
Скачиваний:
44
Добавлен:
20.02.2016
Размер:
1.27 Mб
Скачать

Лабораторна робота № 13 Тема: Фаза переривання основного циклу

Якщо в комп'ютері мається механізм роботи з перериваннями, можна так організувати обчислювальний процес, що процесор не буде простоювати під час виконання операцій вводу-виводу. Розглянемо потік керування, представлений на діаграмі мал. 7.3,6. Перший фрагмент програми в цьому випадку виконується так само, як і в попередньому. Далі програма знову викликає підпрограму WRITE, але сама ця підпрограма складається тільки з фрагмента підготовки і власне команди запуску сеансу обміну. Підпрограма завершує свою роботу і повертає керування основній програмі, як тільки відправить на зовнішній пристрій команду запуску сеансу. Сам же пристрій, одержавши необхідні дані і команду, приступає до самостійної роботи, зчитуючи дані з пам'яті і виводячи їх на печатку. Таким чином, операції вводу-виводу й обробки інформації сполучаються.

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

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

Для того щоб процесор міг відслідковувати сигнали переривання, до складу основного циклу обробки команди вводиться фаза переривання (мал. 7.6). На цій фазі процесор перевіряє, чи не надійшов сигнал запиту переривання. Якщо такий відсутній, процесор завершує поточний цикл і починає фазу витягу чергового циклу — зчитує наступну команду поточної програми.

Якщо ж виявлений сигнал запиту переривання, процесор виконує такі операції.

    1. Запам'ятовує інформацію про поточний стан виконуваної програми, адресу наступної команди (вміст PC) і всі дані, що стосуються поточного стану вузлів процесора і можуть вплинути на виконання наступної команди.

    2. У лічильник команд записується початкова адреса оброблювача переривання (підпрограми обробки переривання).

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

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

Щоб переконатися, наскільки підвищується ефективність роботи процесора при використанні переривань, розглянемо часову діаграму його роботи (мал. 7.7), сформовану на підставі діаграм потоку керування програми, представлених на мал. 7.3,а і 7.3,6. При побудові діаграм, що ви бачите на мал. 7.3,6 і 7.7, передбачалося, що час виконання операції вводу-виводу відносно невеликий — менше, ніж час виконання команд основної програми, необхідних для підготовки наступної порції даних для виводу, тобто за час підготовки нових даних працюючий паралельно зовнішній пристрій встигає вивести всі раніше підготовлені дані.

Але набагато частіше в практиці роботи обчислювальних комплексів зустрічається ситуація, коли час підготовки нової порції даних значно менше, ніж час їхнього виводу, наприклад, на печать. Саме такий випадок відображає діаграма, представлена на мал. 7.7,б. У процесі виконання користувальницької програми другий виклик підпрограми WRITE відбувається перш, ніж раніше викликана підпрограма WRITE завершить вивід переданої їй порції даних. У результаті користувальницька програма, якщо не прийняти спеціальних мір, може в цій точці "зависнути". Підпрограму WRITE варто викликати після того, як раніше запущений сеанс вводу-виводу завершиться. Тільки тепер можна починати новий сеанс. На мал. 7.8 показана тимчасова діаграма виконання програми, що бідує в подібному тривалому сеансі вводу-виводу, — варіанти без використання переривань і з перериваннями. Як видно, і для таких додатків ефективність роботи процесора підвищується, якщо використовувати переривання.

Діаграма станів процесора в циклі виконання команд при використанні механізму переривань показана на мал. 7.9.

Безліч переривань

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

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

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

Другий підхід полягає в тому, що обробка переривання, у свою чергу, може бути перервана іншим перериванням. Для керування цим процесом з перериваннями зв'язуються визначені атрибути, що відбивають значимість (пріоритет) кожного з них (приналежність до визначеного "стану"). Запит переривання з більш високим пріоритетом може перервати обробку переривання з більш низьким, але не навпаки (мал. 7.10,6).

Як приклад застосування другого підходу розглянемо комп'ютерну систему, у якій мається три пристрої вводу-виводу: принтер, диск і модуль передачі даних по лінії зв'язку з вилученим терміналом (контролер лінії зв'язку). Переривання від кожного з цих пристроїв мають свій пріоритет — 2, 4 і 5 відповідно для принтера, диска і контролера лінії зв'язку.

На мал. 7.11 показана можлива послідовність надходження запитів на переривання від цих пристроїв. Виконання основної програми починається в момент t=0. У момент t=10 принтер генерує запит переривання. Дані про поточні стані основної програми містяться в системний стек, і починається виконання програми обробки переривання (ПІП) принтера. У момент, коли ця програма ще знаходиться в стадії виконання, контролер лінії зв'язку з терміналом генерує свій запит переривання. Оскільки цей запит має більш високий пріоритет, ніж запит переривання від принтера, процесор реагує на нього, перериває виконання ПІП принтера, запам'ятовує стан цієї програми в стеці і починає виконання ПІП контролера. У момент генерується новий запит переривання, цього разу контролером диска. У цей час ПІП контролера лінії зв'язку усе ще виконується і, оскільки переривання диска має більш низький пріоритет, процесор на нього не реагує (але запит переривання при цьому не знімається). У результаті виконання ПІП контролера благополучно завершується в момент t=25. Після цей процесор відновлює стан останньої перерваної програми, якою є ПІП принтера. Але ще до того як буде виконана перша чергова команда цієї ПІП, процесор проаналізує наявні запити переривання. Оскільки запит контролера диска як і раніше зведений і переривання диска має більш високий пріоритет, чим переривання принтера, то йому буде віддана перевага, і виконання ПІП відновлена не буде. Замість нього керування буде передане ПІП диску. І тільки після завершення ПІП диска (момент t=35) буде відновлене виконання ПІП принтера. І нарешті, коли і виконання ПІП принтера завершиться, відновиться виконання основної програми (момент t=40).

Контрольні питання:

  1. Цикл обробки команди, який включає до себе фазу переривання.

  2. Два способи роботи з деякою кількістю переривань, які поступили одночасно.