Архітектура системи переривань

Автор: Пользователь скрыл имя, 09 Марта 2013 в 12:40, контрольная работа

Краткое описание

Переривання (англ. interrupt) — сигнал, що повідомляє процесору про выдбування якої-небудь події. При цьому виконання поточної послідовності команд припиняється й керування передається оброблюючому перериванню, що реагує на подію й обслуговує його, після чого повертає керування в перерваний код.
Термін «пастка» (англ. trap) іноді використовується як синонім терміна «переривання» або «внутрішнє переривання». Як правило, слововживання встановлюється в документації виробника конкретної архітектури процесора.

Файлы: 1 файл

Архітектура системи переривань.doc

— 278.50 Кб (Скачать)

 
 
 

Як ми бачимо з мал. 1.6, тут немає  безпосереднього повернення в перервану  раніше програму прямо із самої підпрограми обробки переривання. Для прямого безпосереднього повернення досить адреса повернення зберегти в стеці, що й робить апаратура процесора. При цьому стек легко забезпечує можливість повернення у випадку вкладених переривань, оскільки він завжди реалізує дисципліну LCFS (last come — first served).

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

 

1.2. Класифікація переривань

Маскування

Залежно від можливості заборони зовнішні переривання поділяються  на:

  • ті, що можна маскувати — переривання, які можна забороняти установкою відповідних бітів у регістрі маскування переривань (в x86-процесорах — скиданням IF у регістрі прапорців);
  • ті, що не можна маскувати (англ. Non maskable interrupt, NMI) — обробляються завжди, незалежно від заборон на інші переривання. Наприклад, таке переривання може бути викликане збоєм в мікросхемі пам'яті.

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

Пріоритезація

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

Перехоплення переривання — заміна обробника переривання на свій власний.

Таблиця переривань

Вектор переривання — закріплений за пристроєм номер, який ідентифікує відповідний обробник переривань. Вектори переривань об'єднуються в таблицю векторів переривань, що містить адреси обробників переривань. Розташування таблиці залежить від типу та режиму роботи процесора.

Програмне переривання

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

У процесорах архітектури x86 для явного виклику синхронного переривання є інструкція Int, аргументом якої є номер переривання (від 0 до 255). В IBM PC-сумісних комп'ютерах обробку переривань здійснюють підпрограми BIOS, які в процесі завантаження у фазі POST переміщаються з ПЗУ до оперативної пам'яті. В подальшому це слугує інтерфейсом для їх використання в сеансі операційної системи.

Також, обслуговування переривань можуть взяти на себе BIOS карт розширень (наприклад, мережевих або відеокарт), операційна система і навіть звичайні (прикладні) програми, які постійно знаходяться в пам'яті під час роботи інших програм (т. зв. резидентні програми). На відміну від реального режиму, в захищеному режимі x86-процесорів звичайні програми не можуть обслуговувати переривання: ця функція доступна тільки системного коду (операційній системі).

MS-DOS використовує для  взаємодії зі своїми модулями  і прикладними програмами переривання  з номерами від 20h до 3Fh (числа  дані в шістнадцятковій системі  числення, як це прийнято при  програмуванні мовою асемблера  x86). Наприклад, доступ до основної множини функцій MS-DOS здійснюється виконанням інструкції Int 21h (при цьому номер функції та її аргументи передаються в регістрах). Цей розподіл номерів переривань не закріплений апаратно та інші програми можуть встановлювати свої обробники переривань замість або поверх вже наявних обробників, встановлених MS-DOS або іншими програмами, що, як правило, використовується для зміни функціоналу або розширення списку системних функцій. Також, цією можливістю користуються віруси.

 

1.3. Апаратна організація переривань

 

 

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

Сигнали апаратних переривань, що виникають в пристроях, що входять  до складу комп'ютера або підключених  до нього, поступають в процесор не безпосередньо, а через два контроллери  переривань, один з яких називається таким, що веде, а другий - веденим (рис. 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. Програмні  переривання застосовуються насамперед для виклику системних обслуговуючих  програм - функцій DOS і BIOS. З командою int 2in виклику DOS ми вже стикалися в прикладі 1-1 і зустрічатимемося ще багато разів. Надалі будуть також приведені приклади використання команди int для виклику прикладних обробників програмних переривань.

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

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

  • 00h -внутреннєє переривання, ділення на 0;
  • 0lh -внутреннєє переривання, покрокове виконання (при Tf=1);
  • 02h -немаськируємоє переривання (виведення NMI процесора);
  • 08h -аппаратноє переривання від системного таймера;
  • 09h -аппаратноє переривання від клавіатури;
  • 0eh -аппаратноє переривання від гнучкого диска;
  • 10h - програмне переривання, програми BIOS управління відеосистемою;
  • 13h - програмне переривання, програми BIOS управління дисками;
  • 16h - програмне переривання, програми BIOS управління клавіатурою;
  • Idh -не вектор, адреса таблиці відеопараметрів, використовуваною BIOS;
  • leh -не вектор, адреса таблиці параметрів дискети, використовуваною BIOS;
  • 21h - програмне переривання, диспетчер функцій DOS;
  • 22h - програмне переривання, адреса переходу при завершенні процесу, використовуваний DOS;
  • 23h -программноє переривання, обробник переривань по <Ctrl>/c, використовуваний DOS;
  • 25h - програмне переривання, абсолютне читання диска (функція DOS);
  • 26h - програмне переривання, абсолютний запис на диск (функція DOS);
  • 60h...66h - зарезервовано для програмних переривань користувача;
  • 68h...6Fh - програмні переривання, вільні вектори;
  • 70h -аппаратноє переривання від годинника реального часу (з живленням від акумулятора);
  • 76h -аппаратноє переривання від жорсткого диска;

Як видно із списку, вектори переривань можна умовно розбити 
на наступні групи:

  • вектори внутрішніх переривань процесора (0lh, 02h і ін.);
  • вектори апаратних переривань (08h...0Fh і 70h...77h);
  • програми BIOS обслуговування апаратури комп'ютера (10h, 13h, 16h і ін.);
  • програми DOS (21h, 22h, 23h і ін.);
  • адреси системних таблиць BIOS (Idh, leh і ін.).

Системні програми, адреси яких зберігаються у векторах переривань, в більшості своїй є всього лише диспетчерами, що відкривають доступ до великих груп програм, що реалізовують системні функції. Так, відеодрайвер BIOS (вектор 10h) включає програми зміни відеорежиму, управління курсором, завдання колірної палітри, завантаження шрифтів і багато інших. Особливо характерний в цьому відношенні вектор 21h, через який здійснюється виклик практично всіх функцій DOS: введення з клавіатури і виводу на екран, обслуговування файлів, каталогів і дисків, управління пам'яттю і процесами, служби часу і так далі Для виклику необхідної функції треба не тільки виконати команду int з відповідним номером, але і вказати системі в одному з регістрів (для цієї мети завжди використовується регістр АН) номер функції, що викликається. Іноді для "багатофункціональних" функцій доводиться указувати ще і номер підфункції (у регістрі AL).

Информация о работе Архітектура системи переривань