КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Тема: Переривання. Дії апаратного та програмного забезпечення
Лабораторна робота №12 Переривання - це зміни в потоці керування, викликані не самою програмою, а чим-небудь іншим і звичайно зв'язані з процесом вводу-виводу. Наприклад, програма може наказати диску почати передачу інформації і змусити диск зробити переривання, як тільки передача даних завершиться; переривання припиняє роботу програми і передає керування програмі обробки переривань, що виконує якусь визначену дію. Після завершення цієї дії програма обробки переривань передає керування перерваній програмі. Вона повинна заново почати перерваний процес в тому ж самому стані, в якому вона знаходилася, коли відбулося переривання. Це означає, що колишній стан усіх внутрішніх регістрів (тобто стан, що був до переривання) повинен бути відновлений. Щоб зрозуміти, як відбуваються переривання, розглянемо звичайний приклад: комп'ютеру потрібно вивести на термінал рядок символів. Програмне забезпечення спочатку збирає в буфер усі символи, які потрібно вивести на екран, ініціалізує глобальну перемінну ptr, що повинна вказувати на початок буфера, і встановлює другу глобальну перемінну count, що дорівнює числу символів, виведених на екран. Потім програмне забезпечення перевіряє, чи готовий термінал, і якщо готовий, то виводить на екран перший символ (наприклад, використовуючи регістри, які показані на мал. 7.5). Почавши процес вводу-виводу, центральний процесор звільняється і може запустити іншу програму або зробити що-небудь ще. Через якийсь час символ відображається на екрані. Тепер може початися переривання. Нижче перераховані основні кроки (у спрощеній формі). Дії апаратного забезпечення: 1. Контролер пристрою встановлює лінію переривання на системній шині. 2. Коли центральний процесор готовий до обробки переривання, він встановлює символ підтвердження переривання на шині. 3. Коли контролер пристрою довідається, що сигнал переривання був підтверджений, він поміщає невелике ціле число на інформаційні лінії, щоб "представитися" (тобто показати, що це за пристрій). Це число називається вектором переривань. 4. Центральний процесор видаляє вектор переривання із шини і тимчасово його зберігає. 5. Центральний процесор поміщає в стек лічильник команд і слово стану програми. 6. Потім центральний процесор визначає місцезнаходження нового лічильника команд, використовуючи вектор переривання як індекс у таблиці в нижній частині пам'яті. Якщо, наприклад, розмір лічильника команд складає 4 байти, тоді вектор перериванні n відповідає адресі 4n. Новий лічильник команд указує на початок програми обслуговування переривань для пристрою, що викликав переривання. Часто крім цього завантажується або змінюється слово стану програми (наприклад, щоб блокувати подальші переривання). Дії програмного забезпечення: 1. Перше, що робить програма обробки переривань, - зберігає всі потрібні їй регістри таким чином, щоб їх можна було відновити пізніше. Їх можна зберегти в стеці чи в системній таблиці. 2. Кожен вектор переривання розділяється всіма пристроями даного типу, тому в даний момент ще не відомо, який термінал викликав переривання. Номер термінала можна довідатися, зчитавши значення якого-небудь регістра. 3. Тепер можна зчитувати будь-яку іншу інформацію про переривання, наприклад коди стану. 4. Якщо відбувається помилка вводу-виводу, її потрібно обробити тут. 5. Глобальні перемінні ptr і count обновляються. Перша збільшується на 1, щоб показувати на наступний байт, а друга зменшується на 1, щоб указати, що залишилося вивести на 1 байт менше. Якщо count усе ще більше 0, виходить, ще не всі символи виведені на екран. Той символ, на який у даний момент указує ptr, копіюється у вихідний буферний регістр. 6. У разі потреби видається спеціальний код, що повідомляє пристрою чи контролеру переривання, що переривання оброблене. 7. Відновлюються всі збережені регістри. 8. Виконання команди RETURN FROM INTERRUPT (вихід з переривання): повернення центрального процесора в той стан, у якому він знаходився до переривання. Після цього комп'ютер продовжує роботу з того місця, в якому його призупинили. З перериваннями зв'язане важливе поняття прозорості. Коли відбувається переривання, виробляються які-небудь дії і запускаються які-небудь програми, але коли усе закінчено, комп'ютер повинний повернутися точно в той же стан, у якому він знаходився до переривання. Програма обробки переривань, що володіє такою властивістю, називається прозорою. Якщо комп'ютер має тільки один пристрій вводу-виводу, тоді переривання працюють точно так, як ми тільки що описали. Однак великий комп'ютер може містити багато пристроїв вводу-виводу, причому кілька пристроїв можуть працювати одночасно, можливо, у різних користувачів. Існує деяка імовірність, що під час роботи програми обробки переривання інший пристрій вводу-виводу теж захоче зробити своє переривання. Тут існує два підходи. Перший підхід - для всіх програм обробки переривань у першу чергу (навіть до збереження регістрів) запобігти наступні переривання. При цьому переривання будуть відбуватися в строгій послідовності, але це може привести до проблем із пристроями, що не можуть довго простоювати. Наприклад, на комунікаційній лінії зі швидкістю передачі 9600 бітів у секунду символи надходять кожні 1042 мікросекунди. Якщо перший символ ще не оброблений, коли надходить другий, то дані можуть втратитися. Якщо комп'ютер має подібні пристрої вводу-виводу, то найкраще приписати кожному пристрою визначений пріоритет, високий для більш критичних і низький для менш критичних пристроїв. Центральний процесор теж повинний мати пріоритети, що визначаються по одному з полів слова стану програми. Якщо пристрій із пріоритетом n викликає переривання, програма обробки переривання теж повинна працювати з пріоритетом n. Якщо працює програма обробки переривань із пріоритетом n, будь-яка спроба іншого пристрою з більш низьким пріоритетом буде ігноруватися, поки програма обробки переривань не завершиться і поки центральний процесор не повернеться до виконання програми більш низького пріоритету. З іншого боку, переривання, що надходять від пристроїв з більш високим пріоритетом, повинні відбуватися без затримок. Оскільки самі програми обробки переривань піддаються перериванню, кращий спосіб строгого керування - зробити так, щоб усі переривання були прозорими. Розглянемо простий приклад з декількома перериваннями. Комп'ютер має три пристрої вводу-виводу: принтер, диск і лінію RS232 із пріоритетами 2,4 і 5 відповідно. Спочатку (t=0; t - час) працює користувальницька програма. Раптом при t=10 принтер робить переривання. Запускається програма обробки переривання принтера, як показано на мал. 7.5. При t-15 лінія RS232 породжує сигнал переривання. Тому що лінія RS232 має більш високий пріоритет (5), чим принтер (2), переривання відбувається. Стан машини, при якому працює програма обробки переривання принтера, зберігається в стеці, і починається виконання програми обробки переривання RS232. Набагато пізніше, при t-20, диск завершує свою роботу. Однак його пріоритет (4) нижче, ніж пріоритет працюючої в даний момент програми обробки переривань (5), тому центральний процесор не підтверджує прийом сигналу переривання, і диск змушений простоювати. При t-25 закінчується програма RS232, і машина повертається в той стан, у якому вона знаходилася до переривання RS232, тобто в той стан, коли працювала програма обробки переривання принтера з пріоритетом 2. Як тільки центральний процесор переключається на пріоритет 2, ще до того як буде виконана перша команда, диск із пріоритетом 4 робить переривання і запускається програма обробки переривань диска. Після її завершення знову продовжується програма обробки переривань принтера. Нарешті, при t-40 усі програми обробки переривань завершуються і виконання користувальницької програми починається з того місця, на якому вона перервалася. З часів процесора 8088 усі процесори Intel мають два рівні (пріоритету) переривань: масковані і немасковані переривання. Немасковані переривання звичайно використовуються тільки для повідомлення про дуже серйозні ситуації, наприклад про помилки парності в пам'яті. Усі пристрої вводу-виводу використовують одні масковані переривання. Коли пристрій вводу-виводу викликає переривання, центральний процесор використовує вектор переривання при індексуванні таблиці з 256 елементів, щоб знайти адресу програми обробки переривань. Елементи таблиці являють собою 8-байтные дескриптори сегмента. Таблиця може починатися в будь-якому місті пам'яті. Глобальний регістр указує на її початок. При наявності тільки одного рівня переривань центральний процесор не може зробити так, щоб пристрій з більш високим пріоритетом переривав роботу програми обробки переривань з більш низьким пріоритетом і щоб пристрій з більш низьким пріоритетом не зміг переривати виконання програми обробки переривань з більш високим пріоритетом. Для рішення цієї проблеми центральні процесори Intel звичайно використовують зовнішній контролер переривання (наприклад, 8259А). При першому перериванні (наприклад, із пріоритетом n) робота процесора припиняється. Якщо після цього відбувається ще одне переривання з більш високим пріоритетом, контролер переривання викликає переривання в друг раз. Якщо друге переривання має більш низький пріоритет, воно не реалізується до закінчення першого. Щоб ця система працювала, контролер переривання повинний яким-небудь чином дізнаватися про завершення поточної програми обробки переривань. Тому коли поточне переривання цілком оброблене, центральний процесор повинний посилати спеціальну команду контролеру переривань.
Контрольні питання: 1. Поняття переривання. 2. Загальні кроки обробки переривань (дії апаратного та програмного забезпечення). 3. Поняття прозорості. 4. Обробка переривань при наявності декількох ПВВ.
Дата добавления: 2015-04-24; Просмотров: 582; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |