Автор: Пользователь скрыл имя, 09 Марта 2013 в 12:40, контрольная работа
Переривання (англ. interrupt) — сигнал, що повідомляє процесору про выдбування якої-небудь події. При цьому виконання поточної послідовності команд припиняється й керування передається оброблюючому перериванню, що реагує на подію й обслуговує його, після чого повертає керування в перерваний код.
Термін «пастка» (англ. trap) іноді використовується як синонім терміна «переривання» або «внутрішнє переривання». Як правило, слововживання встановлюється в документації виробника конкретної архітектури процесора.
Як ми бачимо з мал. 1.6, тут немає безпосереднього повернення в перервану раніше програму прямо із самої підпрограми обробки переривання. Для прямого безпосереднього повернення досить адреса повернення зберегти в стеці, що й робить апаратура процесора. При цьому стек легко забезпечує можливість повернення у випадку вкладених переривань, оскільки він завжди реалізує дисципліну LCFS (last come — first served).
Однак якби контекст процесів зберігався просто в стеці, як це звичайно реалізується апаратурою, а не в описані вище дескрипторах завдань, то в нас не було б можливості гнучко підходити до вибору того завдання, який потрібно передати процесор після завершення роботи підпрограми обробки переривання. Природно, що це тільки загальний принцип. У конкретних процесорах і в конкретних ОС можуть існувати деякі відступи від розглянутої схеми й/або доповнення до неї. Наприклад, у сучасних процесорах часто є спеціальні апаратні можливості для збереження контексту процесу, що переривається, безпосередньо в його дескрипторі, тобто дескриптор процесу (принаймні, його частина) стає структурою даних, що підтримує апаратура.
Залежно від можливості заборони зовнішні переривання поділяються на:
Обробники переривань зазвичай пишуться таким чином, щоб час їх обробки був якомога меншим, оскільки під час їх роботи можуть не оброблятися інші переривання, а якщо їх буде багато (особливо від одного джерела), то вони можуть губитися.
До закінчення обробки переривання зазвичай встановлюється заборона на обробку цього типу переривання, щоб процесор не входив до циклу обробки одного переривання. Пріоритезація означає, що всі джерела переривань діляться на класи й кожному класу призначається свій рівень пріоритету запиту на переривання. Пріоритети можуть обслуговуватися як відносні і абсолютні. Відносне обслуговування переривань означає, що якщо під час обробки переривання надходить пріоритетніше переривання, то це переривання буде оброблено тільки після завершення поточної процедури обробки переривання. Абсолютне обслуговування переривань означає, що коли під час обробки переривання надходить пріоритетніше переривання, то поточна процедура обробки переривання витісняється, і процесор починає виконувати обробку тільки-що отриманого пріоритетнішого переривання. Після завершення цієї процедури процесор повертається до виконання витісненої процедури обробки переривання.
Перехоплення переривання — заміна обробника переривання на свій власний.
Вектор переривання — закріплений за пристроєм номер, який ідентифікує відповідний обробник переривань. Вектори переривань об'єднуються в таблицю векторів переривань, що містить адреси обробників переривань. Розташування таблиці залежить від типу та режиму роботи процесора.
Програмне переривання — синхронне переривання, яке може здійснити програма за допомогою спеціальної інструкції.
У процесорах архітектури x86 для явного виклику синхронного переривання є інструкція Int, аргументом якої є номер переривання (від 0 до 255). В IBM PC-сумісних комп'ютерах обробку переривань здійснюють підпрограми BIOS, які в процесі завантаження у фазі POST переміщаються з ПЗУ до оперативної пам'яті. В подальшому це слугує інтерфейсом для їх використання в сеансі операційної системи.
Також, обслуговування переривань можуть взяти на себе BIOS карт розширень (наприклад, мережевих або відеокарт), операційна система і навіть звичайні (прикладні) програми, які постійно знаходяться в пам'яті під час роботи інших програм (т. зв. резидентні програми). На відміну від реального режиму, в захищеному режимі x86-процесорів звичайні програми не можуть обслуговувати переривання: ця функція доступна тільки системного коду (операційній системі).
MS-DOS використовує для
взаємодії зі своїми модулями
і прикладними програмами
Система переривань будь-якого комп'ютера є його найважливішою частиною, що дозволяє швидко реагувати на події, обробка яких винна виконаються негайно: сигнали від машинних таймерів, натиснення клавіш клавіатури або миші, збої пам'яті і ін. Розглянемо у загальних рисах компоненти цієї системи.
Сигнали апаратних переривань, що виникають в пристроях, що входять до складу комп'ютера або підключених до нього, поступають в процесор не безпосередньо, а через два контроллери переривань, один з яких називається таким, що веде, а другий - веденим (рис. 1.11)
Рис. 1.11. Апаратна організація переривань.
Два контроллери використовуються для збільшення допустимої кількості зовнішніх пристроїв. Річ у тому, що кожен контроллер переривань може обслуговувати сигнали лише від 8 пристроїв. Для обслуговування більшої кількості пристроїв контроллери можна об'єднувати, утворюючи з них віялоподібну структуру. У сучасних машинах встановлюють два контроллери, збільшуючи тим самим можливе число вхідних пристроїв до 15 (7 у ведучого і 8 у веденого контроллерів).
До вхідних виводів Irq1...IRQ7 і Irq8...IRQ15 (IRQ - це скорочення від Interrupt Request, запит переривання) підключаються виводи пристроїв, на яких виникають сигнали переривань. Вихід провідного контроллера підключається до входу INT мікропроцесора, а вихід веденого - до входу Irq2 ведучого. Основна функція контроллерів - передача сигналів запитів переривань від зовнішніх пристроїв на єдиний вхід переривань мікропроцесора. При цьому, окрім сигналу INT, контроллери передають в мікропроцесор по лініях даних номер вектора, який утворюється в контроллері шляхом складання базового номера, записаного в одному з його регістрів, з номером вхідної лінії, по якій поступив запит переривання. Номери базових векторів заносяться в контроллери автоматично в процесі початкового завантаження комп'ютера. Для провідного контроллера базовий вектор завжди дорівнює 8, для веденого - 70h. Таким чином, номери векторів, закріплених за апаратними перериваннями, лежать в діапазонах 8h...Fh і 70h...77h. Очевидно, що номери векторів апаратних переривань однозначно пов'язані з номерами ліній, або рівнями IRQ, а через них - з конкретними пристроями комп'ютера. На рис. 1.11 вказані деякі із стандартних пристроїв комп'ютера, переривань, що працюють в режимі.
Процесор, отримавши сигнал переривання,
виконує послідовність
Об'єкти обчислювальної системи, що беруть участь в процедурі переривання, і їх взаємодія показані на рис. 1.12.
рис. 1.12. Процедура обслуговування переривання.
Самий початок оперативної пам'яті від адреси 0000h до 03ffh відводиться під вектори переривань - чотирьохбайтові області, в яких зберігаються адреси обробників переривань (Обрпр на рис. 1.12). У два старші байти кожного вектора записується сегментна адреса обробника, в два молодші - зсув (відносна адреса) точки входу в обробник. Вектори, як і відповідні ним переривання, мають номери, причому вектор з номером 0 розташовується, починаючи з адреси 0, вектор 1 - з адреси 4, вектор 2 - з адреси 8 і так далі Вектор з номером п займає, таким чином, байти пам'яті від n*4 до n*4+3. Всього у виділеній під вектори області пам'яті поміщається 256 векторів.
Отримавши сигнал на виконання процедури переривання з певним номером, процесор зберігає в стеку виконуваної програми поточний вміст трьох регістрів процесора: регістра прапорів, CS і IP. Два останні числа утворюють повну адресу повернення в перервану програму. Далі процесор завантажує CS і IP з відповідного вектора переривань, здійснюючи, тим самим, перехід на обробник переривання, пов'язаний з цим вектором.
Обробник переривань завжди закінчується командою iret (interrupt return, повернення з переривання), що виконує зворотні дії, - витягання із стека збережених там слів і приміщення їх назад в регістри IP і CS, а також в регістр прапорів. Це приводить до повернення в основну програму в ту саму крапку, де вона була перервана.
Насправді запити на обробку переривань можуть мати різну природу. Окрім описаних вище апаратних переривання від периферійних пристроїв, званих часто зовнішніми, є ще два типи переривань: внутрішні і програмні.
Внутрішні переривання збуджуються ланцюгами самого процесора при виникненні однієї із спеціально обумовлених ситуацій, наприклад, при виконанні операції ділення на нуль або при спробі виконати неіснуючу команду. За кожним з таких переривань закріплений певний вектор, номер якого відомий процесору. Наприклад, за діленням на 0 закріплений вектор 0, а за неправильною командою - вектор 6. Якщо процесор стикається з однією з таких ситуацій, він виконує описану вище процедуру переривання, використовуючи закріплений за цією ситуацією вектор переривання.
Нарешті, ще одним надзвичайно важливим типом переривань є програмні переривання. Вони викликаються командою hit з числовим аргументом, який розглядається процесором, як номер вектора переривання. Якщо в програмі зустрічається, наприклад, команда
int 13h
то процесор виконує ту ж процедуру
переривання, використовуючи як номер
вектора операнд команди int. Програмні
переривання застосовуються насамперед
для виклику системних
Важливо підкреслити, що описані дії
процесора виконуються
Велика частина векторів переривань зарезервована для виконання певних дій; частина з них автоматично заповнюється адресами системних програм при завантаженні системи. Приведемо короткий витяг з таблиці векторів, що дозволяє продемонструвати різноманітність її складу:
Як видно із списку, вектори переривань
можна умовно розбити
на наступні групи:
Системні програми, адреси яких зберігаються у векторах переривань, в більшості своїй є всього лише диспетчерами, що відкривають доступ до великих груп програм, що реалізовують системні функції. Так, відеодрайвер BIOS (вектор 10h) включає програми зміни відеорежиму, управління курсором, завдання колірної палітри, завантаження шрифтів і багато інших. Особливо характерний в цьому відношенні вектор 21h, через який здійснюється виклик практично всіх функцій DOS: введення з клавіатури і виводу на екран, обслуговування файлів, каталогів і дисків, управління пам'яттю і процесами, служби часу і так далі Для виклику необхідної функції треба не тільки виконати команду int з відповідним номером, але і вказати системі в одному з регістрів (для цієї мети завжди використовується регістр АН) номер функції, що викликається. Іноді для "багатофункціональних" функцій доводиться указувати ще і номер підфункції (у регістрі AL).