Відповіді:
Пастка являє собою виключення в призначеному для користувача процесі. Це викликано поділом на нуль або недійсним доступом до пам'яті. Це також звичайний спосіб викликати процедуру ядра ( системний виклик ), оскільки вони працюють з більш високим пріоритетом, ніж код користувача. Обробка є синхронною (тому код користувача призупиняється та продовжується і надалі). У певному сенсі вони "активні" - більшість часу код очікує, що пастка відбудеться, і покладається на цей факт.
Переривання є те генерується апаратними засобами (пристрої , такі як жорсткий диск, відеокарта, порти введення / виводу, і т.д.). Вони асинхронні (тобто вони не трапляються в передбачуваних місцях у коді користувача) або "пасивні", оскільки обробник переривання повинен чекати, коли вони в кінцевому підсумку відбудуться.
Ви також можете бачити пастку як своєрідний внутрішній процесор переривання, оскільки обробник для обробника пастки схожий на обробник переривання (регістри та покажчики стека зберігаються; є контекстний перемикач, виконання може відновитись у деяких випадках, коли воно припинилося) .
Пастки та переривання тісно пов'язані. Пастки є типом винятку , а винятки схожі на переривання.
Intel x86 визначає дві категорії, що перекриваються, векторовані події ( переривання проти винятків ) та класи винятків ( помилки проти пасток проти абортів ).
Усі цитати в цій публікації - з квітневої версії Посібника для розробників програмного забезпечення Intel . Для точки зору (остаточного та складного) x86 я рекомендую прочитати розділ SDM про обробку переривань та виключень.
Векторовані події ( переривання та винятки ) змушують процесор стрибати в обробник переривань після збереження значної частини стану процесора (достатньо такого, що виконання може продовжуватися з цього моменту пізніше).
Винятки та переривання мають ідентифікатор, який називається вектором, який визначає, до якого обробника переривань переходить процесор. Обробники переривань описані в Таблиці дескрипторів переривань.
Перерви трапляються у випадковий час під час виконання програми, у відповідь на сигнали апаратури. Системне обладнання використовує переривання для обробки подій, зовнішніх для процесора, таких як запити на обслуговування периферійних пристроїв. Програмне забезпечення також може генерувати переривання, виконавши інструкцію INT n.
Винятки трапляються, коли процесор виявляє стан помилки під час виконання інструкції, наприклад, поділ на нуль. Процесор виявляє різні умови помилок, включаючи порушення захисту, несправності сторінки та внутрішні несправності машини.
Винятки класифікуються як помилки , пастки або переривання, залежно від способу їх повідомлення та від того, чи можна перезапустити інструкцію, яка викликала виняток, без втрати безперервності програми чи завдань.
Короткий зміст: пастка збільшує вказівник інструкції, помилки не роблять, а аборти "вибухають".
Пастка являє собою виняток , яке повідомляється відразу після виконання команди вилову. Пастки дозволяють продовжувати виконання програми чи завдання без втрати наступності програми. Зворотна адреса для обробника пастки вказує на інструкцію, яку слід виконати після інструкції з лову.
Несправність є винятком , що в загальному випадку може бути виправлена , і що після того , як виправлено, дозволяє програмі бути перезапущено без втрати безперервності. Коли повідомляється про несправність, процесор повертає стан машини до стану до початку виконання інструкції з несправності. Зворотна адреса (збережений вміст регістрів CS та EIP) для обробника несправностей вказує на інструкцію про несправність, а не на інструкцію, що слідує за інструкцією про несправність.
Приклад: Помилка сторінки часто може бути усунена. Частина адресного простору програми може бути замінена на диск з оперативної пам’яті. Програма запустить помилку сторінки, коли вона намагатиметься отримати доступ до пам'яті, яку було замінено. Ядро може перетягувати цю пам'ять з диска на таран і керувати рукою назад до програми. Додаток продовжуватиметься там, де він припинився (за несправною інструкцією, що отримував доступ до заміненої пам’яті), але цього разу доступ до пам'яті повинен бути успішним без помилок.
Передчасне припинення є винятком , що не завжди повідомляти точне розташування команди викликає виняток і не допускає повторний запуск програми або завдання, що викликала виняток. Аборти використовуються для повідомлення про серйозні помилки, такі як апаратні помилки та непослідовні або незаконні значення в системних таблицях.
Програмне забезпечення, яке викликає переривання (викликане інструкцією INT), веде себе як пастка. Інструкція завершується до того, як процесор збереже свій стан і перейде до обробника переривання.
Взагалі кажучи, такі терміни, як винятки, помилки, аборти, пастки та переривання, означають одне і те ж і називаються "перериваннями".
Приходячи до різниці між Trap та Interrupt:
Пастка: чи ініційований програмістом і очікується передача контролю в спеціальний обробник. (Наприклад, інструкція INT 80x86 - хороший приклад)
Де як
Переривання (апаратне забезпечення): це перерва в управлінні програмою на основі зовнішньої події апаратного забезпечення, що знаходиться поза процесором (Наприклад: натискання клавіші на клавіатурі або тайм-аут на чіпі таймера)
Пастка являє собою особливий вид переривання , яке зазвичай називають програмне переривання . Переривання є більш загальний термін , який включає в себе як апаратні переривання (перебиває від апаратних пристроїв) і програмні переривання (перебиває від програмного забезпечення, такі як пастки ).
Пастка викликається кодовими програмами і використовується, наприклад, для виклику процедур ОС (тобто зазвичай синхронних). Переривання викликається подіями (багато разів апаратними засобами, як-от мережева карта, що отримала дані, або таймером процесора), і - як випливає з назви - перериває нормальний потік управління, оскільки процесор повинен перейти на рутину драйвера для обробки подія.
Переривання - це апаратно створена зміна потоку в системі. Обробник перерви викликається для вирішення причини переривання; Потім контроль повертається до перерваного контексту та інструкції. Пастка - це переривання, породжене програмним забезпеченням. Переривання може бути використане для сигналізації про завершення вводу / виводу, щоб уникнути необхідності опитування пристрою. Пастка може використовуватися для виклику процедур операційної системи або для лову арифметичних помилок.
Я думаю, що пастки викликані виконанням поточної інструкції, і тому вони називаються як синхронні події. де переривання викликані незалежною інструкцією, що працює в процесорі, які пов'язані із зовнішніми подіями і, таким чином, називаються асинхронними.
Перерви - це апаратні переривання, тоді як пастки - програмні переривання. Виникнення апаратних переривань зазвичай відключає інші апаратні переривання, але це не відповідає дійсності пасток. Якщо вам потрібно заборонити апаратні переривання, поки не буде подано пастку, вам потрібно чітко очистити прапор переривання. І зазвичай прапор переривання на комп'ютері впливає на (апаратні) переривання на відміну від пасток. Це означає, що очищення цього прапора не запобіжить пасткам. На відміну від пасток, переривання повинні зберігати попередній стан процесора.
Пастка - це переривання програмного забезпечення. Якщо ви пишете програму, в якій оголошуєте змінну, яка має ділення на нульове значення, то вона трактується як трап. Кожного разу, коли ви запускаєте цю програму, вона одночасно викличе ту саму помилку. Виклик системи - це спеціальна версія пастки, в якій програма запитує os за необхідну послугу. У разі переривання (загальне слово для апаратних перерв), як помилка вводу-виводу, процесор переривається у випадковий час, і поза курсом, це не вина наших програмістів. Це обладнання, яке їх викликає.