Існує кілька видів екстраординарних ситуацій. в яких поведінка процесора регламентується особливими правилами. Такі ситуації виникають, коли потрібна термінова реакція на зовнішні впливи, коли при виконанні програми відбувається будь-яка помилка або існує ймовірність отримання неточного результату обчислень.
- Переривання і особливі ситуації (Interrupts and Exceptions) - виявляються і обробляються процесором в самі різні моменти часу і можуть відбуватися як з зовнішніх так і з внутрішніх джерел, всі інші типи екстраординарних ситуацій займають більш низький рівень ієрархії і можуть оброблятися, тільки якщо спершу заявлять про своє існування через переривання або особливу ситуацію.
- Виняткові ситуації FPU (Floating-Point Exceptions) - можуть виникати тільки при виконанні команд співпроцесора. команд MMX або 3DNow!-команда. Виникнення виняткової ситуації FPU. в свою чергу, може викликати генерацію переривання через подачу сигналу на спеціальні зовнішні висновки процесора (так звана реакція в стилі MS-DOS) або особливої ситуації (внутрішній механізм процесора забезпечує генерацію помилки співпроцесора #MF), обробник якої далі сам розбирається з тим, яке виключення відбулося і які дії в зв'язку з цим слід зробити (докладніше.).
- Виняткові ситуації SIMD (SSE) (SIMD Floating-Point Exceptions) - можуть виникати тільки при виконанні SIMD-команд і повністю визначаються станом SIMD-регістрів процесора. SIMD-виключення повідомляють про своє виникненні через генерацію спеціальної особливої ситуації #XM. Отримавши управління, обробник особливої ситуації повинен сам програмним шляхом визначити причину виникнення виключення (докладніше.).
Переривання і особливі ситуації
Переривання і особливі ситуації (Interrupts and Exceptions) - це спеціальні засоби, що забезпечують швидку реакцію процесора на зовнішні впливи та інші несподівані ситуації. При надходженні переривання або генерації особливої ситуації виконання програми переривається, а управління передається спеціальною процедурою - оброблювачу переривання або особливої ситуації. У більшості випадків, коли обробка переривання або особливої ситуації закінчується, управління може бути повернуто в перервану програму, яка продовжить своє виконання з тієї самої точки, в якій вона була зупинена. Процесор виробляє автоматичне збереження / відновлення контексту і стану для забезпечення цієї можливості.
Всі переривання і особливі ситуації мають унікальні ідентифікаційні номери. Ці номери називаються векторами переривань і лежать в межах від 0 до 255. Вектори від 0 до 31 відведені для особливих ситуацій і немаскируемого переривання. причому деякі з них зарезервовані і не повинні використовуватися програмами. Вектори від 32 до 255 вільні для будь-якого використання для користувача програмами і зовнішніми пристроями.
Існує два джерела надходження переривань і три типи особливих ситуацій. Крім того, розрізняють внутрішні (програмні) і зовнішні (апаратні) джерела генерації переривань і особливих ситуацій.
- Зовнішні маскіруемие переривання (Maskable Hardware Interrupts) - ініціюються сигналами на зовнішніх висновках процесора або за допомогою вбудованого контролера переривань (Advanced Programmable Interrupt Controller - APIC). Для процесорів, починаючи з Pentium, вбудований APIC-контролер є найбільш поширеним способом управління переривань. В цьому випадку висновки LINT [1: 0] # програмуються через локальну таблицю векторів (LVT) контролера APIC, яка дозволяє призначати відповідний висновок для прийому будь-якого виду переривань. Якщо ж вбудованого контролера APIC в процесорі немає, або ж він відключений, то зовнішні маскіруемие переривання приймаються на виведення INTR #. При цьому номер надійшов переривання повинен передаватися процесору по системній шині спеціальним зовнішнім контролером переривань (наприклад, таким як 8259А). Як правило, вбудований APIC-контролер також взаємодіє з системним контролером переривань (I / O APIC), який забезпечує прийом безлічі переривань від різних джерел і передає в процесор (и) інформацію про отриманий перериванні по системної шині або спеціальної виділеної шині APIC (APIC serial bus). Якщо прапор дозволу переривань не встановлено (EFLAGS.IF = 0), то зовнішні маскіруемие переривання не обробляються. Вище вказувалося, що для використання маскованими переривань призначені вектори від 32 до 255. Технічно, проте, можливо визначити будь-якому маскируемое переривання. яке приймається на виведення INTR # процесора значення вектора в діапазоні від 0 до 255, а якщо прийом переривань відбувається через вбудований APIC-контролер - в діапазоні від 16 до 255 (при спробі використання векторів від 0 до 15 APIC-контролер сигналізує про некоректне векторі переривання ).
- Зовнішні немасковані переривання (Nonmaskable External Interrupts) - приймаються на виведення NMI # процесора або внутрішньої шині APIC-контролера, механізм заборони немаскованих переривань відсутня (на них не впливає поточне значення прапора EFLAGS.IF). Отримавши запит на немаскируемое переривання. процесор передає управління по вектору 2 і блокує прийом нових запитів на немасковані переривання аж до виконання команди IRET / IRETD. Технічно вектор переривання 2 може використовуватися і для обрабткі маскуються переривань. але тільки описаний вище спосіб надходження запитів на немасковані переривання забезпечує особлива поведінка процесора при їх обробці.
Програмні переривання і особливі ситуації (Software interrupts and Exceptions):
Таблиця 3.1. Типи переривань і особливих ситуацій
Типи особливих ситуацій і особливості їх обробки
Особливі ситуації. генеруються процесором поділяються на три типи - помилки. пастки і збої. Залежно від типу особливої ситуації різниться реакція процесора на її виникнення.
- Помилка (Fault) - це особлива ситуація. яка може бути виправлена оброблювачем особливої ситуації. При зустрічі помилки стан процесора зберігається в тому вигляді, яким воно було до початку виконання команди, яка ініціювала генерацію помилки, а значення CS: EIP. вказують на цю команду зберігаються в стеці обробника. Перерване програма після виправлення помилки може бути продовжена безпосередньо з команди, що викликала цю помилку.
- Пастка (Trap) - особлива ситуація. яка генерується після виконання відповідної команди. У цьому випадку зберігаються в стеку значення CS: EIP. вказують на команду, яка буде виконуватися слідом за командою, що отримала пастку; наприклад, якщо пастка сталася під час команди JMP. то записані часові CS: EIP вказують на команду, що була метою команди JMP.
- Збій (Abort) - це особлива ситуація. яка не допускає точну локалізацію викликала її команди і не допускає перезапуску. Збої використовуються для повідомлень про деякі помилки, таких як: технічні несправності і наявність некоректних значень в системних таблицях.
Правила функціонування механізму обробки переривань і особливих ситуацій істотно залежать від режиму роботи процесора і поточних установок деяких прапорів в регістрі CR4. Сам цей механізм включає наступні елементи:
Таблиця 6.55. Способи обробки процесором переривань і особливих ситуацій в різних режимах роботи