IDT - это таблица дескрипторов прерываний, которая содержит что-то подобное из абстрактного представления, первые восемнадцать прерываний зарезервированы процессором, следующие восемнадцать зарезервированы Intel для проверки архитектуры чипа в будущем ...
Interrupt Handler
0 divide_by_zero_handler
1 debug_handler
.. ...
13 general_exception_handler
14 page_fault_handler
.. ...
18 machine_check_handler
В этом контексте обработчики являются частью игрушечного ядра, и каждый из обработчиков устанавливается во время загрузки до загрузки кода пользовательской земли. (BIOS - это 16-битный код, то есть код реального режима), ядро устанавливает обработчики, переключается в 32-битный защищенный режим, когда выдается любое из прерываний, соответствующий обработчик выполняется в зависимости от номера прерывания. Например, если было сгенерировано прерывание 14, ядро выполнит page_fault_handler
, проверит, не загрязнена ли страница и не находится ли она на диске, затем загрузит эту страницу в память, зафиксирует адреса и очистит грязный бит, выполнит IRET
Инструкция прерывания возврата для продолжения, очистки флагов ....
Это абстрактное представление о том, как работает IDT ... За кулисами происходят более сложные вещи ... в зависимости от архитектуры и типа управления памятью, например, схем адресации с постраничным / плоским / защищенным / виртуальным режимом. ..
Посмотрите здесь документацию Intel , которая дает превосходное и полное представление о программировании Intel ...
Edit:
В старые времена DOS (который был 16-битным кодом и не очень хорошо защищен памятью), можно было перенаправить обработчики прерываний на ваши собственные обработчики, перекрывая таким образом исходную IDT, например, для такого прерывания, Interrupt. 9, который является прерыванием клавиатуры (в этом контексте прерывания BIOS) с использованием вызовов getvect(...)
и setvect(...)
, вы также можете обрабатывать некоторые (не все прерывания процессора, в частности IDT 0 для деления на ноль) ... Хотя эти прерывания BIOS были очень похожи на прерывания процессора, они имели общую особенность, у обоих была таблица векторов прерываний (как это было известно тогда). Именно так программы TSR (Terminate Stay Resident) могли сохранять вход в DOS в результате прерываний BIOS, перенаправленных на обработчики TSR ...