Обработка на прекъсвания и изключения в защитен режим IA-32, dev64
Програмиране
Обработка на прекъсвания и изключения в защитен режим IA-32
Съдържанието изброява, повече или по-малко в логичен ред, статии за експерименти с разработването на OS.
В защитен режим прекъсванията се обработват по различен начин. Все още нямам код за обработка на прекъсвания, така че още първото прекъсване кара тестовата ми система да се рестартира.
Прекъсванията и изключенията са събития, които показват, че някъде в системата (хардуер) или в рамките на текущо изпълняваната програма или задача е възникнало състояние, което изисква незабавното внимание на процесора . Обикновено прекъсванията и изключенията водят до принудително прехвърляне на контрола от текущо изпълняваната програма или задача към специална програмна процедура или задача, наречена манипулатор на прекъсвания или манипулатор на изключения. Действието , извършено от процесора в отговор на прекъсване или изключение , се нарича обслужване или обработка на прекъсване или изключение.
Прекъсванията възникват в произволни моменти в момента на изпълнение на програмата в отговор на сигнали от хардуера. Дънните платки използват прекъсвания, за да сигнализират за появата на събития външни за процесора, като обработка на заявки от периферни устройства. Програмите могат също да генерират прекъсвания чрез изпълнение на инструкцията на процесора INT n.
Изключения се хвърлят, когато процесорът открие грешка (открива състояние на грешка) по време на изпълнение на инструкция. Например - деление на нула. Процесорът открива различни състояния на грешка , включително нарушения на защитата, грешки на страницата и вътрешни грешки на машината. Архитектура на процесора Pentium 4, Intel Xeon, P6семейството и Pentium позволяват генериране на изключение за проверка на машината при вътрешни хардуерни грешки или грешки в шината.
Когато се получи прекъсване или се открие изключение, текущата процедура или задача се спира, докато процесорът изпълнява кода за обработка на прекъсване или изключение. Когато изпълнението на манипулатора спре, процесорът подновява изпълнението на прекъснатата процедура или задача. Възобновяването на изпълнението на прекъсната процедура или задача става без нарушаване на състоянието на програмата, ако възстановяването от изключението е възможно и прекъсването не принуди текущата изпълняваща се програма да прекрати.
Разрешеният диапазон за векторни числа е от 0 до 255. Числата от 0 до 31 са запазени в архитектурите Intel 64 и IA-32 за дефинирани от архитектурата прекъсвания и изключения. Не всички векторни числа в този диапазон имат назначена функция. Неприсвоените векторни номера в този диапазон са запазени. Не използвайте тези запазени номера.
Векторните номера в диапазона от 32 до 255 са запазени за дефинирани от потребителя прекъсвания и не са запазени от архитектурите Intel 64 и IA-32. Тези прекъсвания са предназначени главно за външни входно- изходни устройства.
Процесорът получава прекъсвания от 2 източника: - Външни (хардуерно генерирани) прекъсвания. - Софтуерно генерирани прекъсвания.
Външни (хардуерни) прекъсвания
Външните прекъсвания се получават през щифтовете на процесора или чрез локалния APIC контролер за прекъсвания. Основните изводи, показващи статус на прекъсване на процесори Pentium 4, Intel Xeon, семейство P6 и Pentium, са изводи LINT[1:0], свързани към локалния APIC. Когато локален APICразрешени, пинове LINT[1:0], могат да бъдат програмирани с помощта на APIC локалната векторна таблица (LVT), за да бъдат свързани с произволно изключение или вектор на прекъсване на процесора.
Когато локалният APIC е глобален/хардуерните прекъсвания забранени, тогава тези щифтове се конфигурират като INTR и NMI щифтове, съответно. Сигналът на щифта INTR сигнализира на процесора, че е възникнало външно прекъсване. Процесорът чете от вектора на прекъсване на системната шина, предоставен от външен контролер на прекъсване като 8259A. Сигналът на щифта NMI казва на процесора, че немаскируемото прекъсване (NMI) е присвоено на прекъсващ вектор 2.