Система переривань
ADO в Delphi AJAX Android C++ CakePHP CMS COM CSS Delphi Flash Flex HTML Internet Java JavaScript MySQL PHP RIA SCORM Silverlight SQL UML XML Бази даних Веб-розробка Генетичні алгоритми ГІС Гітара Дизайн Економіка Інтелектуальні СДН Колір Масаж Математика Медицина Музика Нечітка логіка ООП Патерни Подання знань Розкрутка сайту, SEO САПР Сесії в PHP Системне програмування Системний аналіз Тестологія Тестування ПЗ Фреймворки Штучний інтелект
|
Система переривань
Система переривань будь-якого комп'ютера є його найважливішою частиною, що дозволяє швидко реагувати на події, обробка яких винна виконаються негайно: сигнали від машинних таймерів, натиснення клавіш клавіатури або миші, збої пам'яті і ін. Розглянемо у загальних рисах компоненти цієї системи. Сигнали апаратних переривань, що виникають в пристроях, що входять до складу комп'ютера або підключених до нього, поступають в процесор не безпосередньо, а через два контроллери переривань, один з яких називається таким, що веде, а другий - веденим (рис. 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 для виклику прикладних обробників програмних переривань. Важливо підкреслити, що описані дії процесора виконуються абсолютно однаково для всіх видів переривань - внутрішніх, апаратних і програмних, хоча причини, збуджуючі процедуру переривання, мають принципово різну природу. Велика частина векторів переривань зарезервована для виконання певних дій; частина з них автоматично заповнюється адресами системних програм при завантаженні системи. Приведемо короткий витяг з таблиці векторів, що дозволяє продемонструвати різноманітність її складу:
Як видно із списку, вектори переривань можна умовно розбити
Системні програми, адреси яких зберігаються у векторах переривань, в більшості своїй є всього лише диспетчерами, що відкривають доступ до великих груп програм, що реалізовують системні функції. Так, відеодрайвер BIOS (вектор 10h) включає програми зміни відеорежиму, управління курсором, завдання колірної палітри, завантаження шрифтів і багато інших. Особливо характерний в цьому відношенні вектор 21h, через який здійснюється виклик практично всіх функцій DOS: введення з клавіатури і виводу на екран, обслуговування файлів, каталогів і дисків, управління пам'яттю і процесами, служби часу і так далі Для виклику необхідної функції треба не тільки виконати команду int з відповідним номером, але і вказати системі в одному з регістрів (для цієї мети завжди використовується регістр АН) номер функції, що викликається. Іноді для "багатофункціональних" функцій доводиться указувати ще і номер підфункції (у регістрі AL). Зверніть увагу на додаткові посиланняГоловний розділСторінки, близькі за змістомзагрузка...
|
Сторінки, близькі за змістом Асемблер (англ. assembler) — загальноприйнята назва транслятора з автокоду. Асемблер переводить початкову програму, написану на автокоді, в переміщувану програму на мові машинній. Оскільки асемблер здійснює трансляцію на мову завантажувача, при завантаженні програми необхідна налаштування умовних адрес, тобто адрес, значення яких залежать від розташування даної програми в пам'яті ЦВМ і від її зв'язків з іншими незалежно трансльованими програмами. |
Copyright © 2008—2024 Портал Знань.
При використанні матеріалів посилання, для інтернет-ресурсів — гіперпосилання, на Znannya.org обов'язкове.
Зв'язок
|
НТУУ "КПІ" Інженерія програмного забезпечення КПІ Лабораторія СЕТ |
|