Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Класифікація переривань в захищеному режимі



 

Переривання і виключення можна розділити на декілька груп:

 

1. збій;

 

2. пастка;

 

3. аварійне завершення.

 

Це ділення проводиться відповідно до наступних ознак:

 

· яка інформація зберігається про місце виникнення переривання (виключення)?

 

· чи можливе відновлення перерваної програми?

 

Виходячи з цих ознак, можна дати наступні характеристики вищепереліченим

групам:

 

Збій (помилка) — переривання або виключення, при виникненні якого в стек

записуються значення регістрів cs: ip, вказуючі на команду, що викликала дане

переривання. Це дозволяє, діставши доступ до сегменту коди, виправити помилкову

команду в обробнику переривання і, повернувши управління програмі, фактично

здійснити її рестарт (пригадаєте, що в реальному режимі при виникненні

переривання в стеку завжди запам'ятовується адреса команди, наступної за тією, яка

викликала це переривання).

 

Пастка — переривання або виключення, при виникненні якого в стек

записуються значення регістрів cs: ip, вказуючі на команду, наступну за

командою, що викликала дане переривання.

 

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

 

Механізм пасток схожий на механізм переривань в реальному режимі, хоча не у всьому.

Тут є один тонкий момент. Якщо переривання типу пастки виникло в команді

передачі управління jmp, той вміст пари cs: ip в стеку відображатиме

результат цього переходу, тобто відповідати команді призначення.

 

Аварійне завершення — переривання, при якому інформація про місце його

виникнення недоступна або неповна і тому рестарт практично неможливий

якщо тільки дана ситуація не була запланована заздалегідь.

 

? відповідні програми-обробники помилок, пасток і аварій будуть

відрізнятися алгоритмами роботи.

 

Мікропроцесор жорстко визначає, які переривання є помилками, пастками

і аваріями.

 

Зауваження.

 

Для деяких номерів переривань в реальному режимі можливі 2 джерела

переривання (розвиток мікропроцесорів).

 

Деякі переривання при своєму виникненні додатково генерують і

записують в стек так званий код помилки. Цей код може згодом

використовуватися для встановлення джерела переривання. Код помилки записується в

стік услід за вмістом регістрів eflags, cs і eip.

 

можна розпізнати дійсне джерело переривання (якщо є неоднозначність).

 

Таблиця дескрипторів переривань IDT

 

Замість таблиці векторів переривань система переривань має справу з таблицею

дескрипторів переривань (IDT, interrupt descriptor table)

 

Таблиця IDT зв'язує кожен вектор переривання з дескриптором процедури або

завдання, яке оброблятиме це переривання.

 

Елементами таблиці IDT є дескриптори - Розмір дескриптора = 8 байтам.

 

(Тобто формат таблиці IDT подібний до формату GDT і LDT.)

 

Дескриптори в таблиці переривань зазвичай називаються шлюзами (іноді комутаторами).

 

Шлюзи призначені для вказівки точки входу в програму обробки переривання.

 

У дескрипторній таблиці переривань IDT можуть міститися шлюзи трьох типів:

 

· шлюз пастки;

 

· шлюз переривання;

 

· шлюз завдання.

 

Фізично мікропроцесор відрізняє шлюзи по вмісту полів.

 

Особливості таблиці IDT:

 

· нульовий дескриптор використовується для опису шлюзу для програми обробки

винятковій ситуації 0 (помилка ділення);

 

(у таблиці GDT відсутній)

 

· дескриптори в таблиці IDT строго впорядковані відповідно до номерів

переривань.

 

У таблицях GDT і LDT порядок опису дескрипторів ролі не грає, хоча і

допускається наявність деяких угод по їх впорядкованості;

 

· розмірність таблиці IDT — не більше 256 елементів розміром по вісім байт, по

числу можливих джерел переривань.

 

В окремих випадках є сенс описувати все 256 дескрипторів цієї таблиці

формуючи для невживаних номерів переривань шлюзи-заглушки. Це дозволить коректно

обробляти всі переривання, навіть якщо вони і не плануються до використання в

даному завданню. Якщо цього не зробити, то при незапланованому перериванні з

номером, що перевищує межі IDT для даного завдання, виникатиме

виняткова ситуація загального захисту (з номером 13 (ODh)).

 

Адреса і довжина таблиці IDT містяться в регістрі idtr.

 

Відмітимо, що в реальному режимі регістр idtr також містить адресу таблиці

переривань, але при цьому кожен вектор займає 4 байти і містить 32-розрядний

адреса у форматі CS:IP. Початкове значення цього регістра рівне нулю, але внего

можна занести і інше значення.

 

Можливе довільне розміщення в пам'яті цієї таблиці не тільки в захищеному

режимі, але і реальному.

 

У захищеному режимі провести завантаження регістра idtr може тільки код з

максимальним рівнем привілеїв.

 

Доступ до таблиці IDT з боку призначених (прикладних) для користувача програм неможливий.

 

 




Поиск по сайту:

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.