Кіріспе

Тоқтату дескрипторы кестесі (IDT) — x86 архитектурасының үзіліс векторлық кестесін іске асыру үшін пайдаланатын дерек құрылымы. IDT процессорға үзілістер мен ерекше жағдайларға дұрыс жауап беруді анықтау үшін қолданылады. Төмендегі сипаттамадағы мәліметтер нақты x86 архитектурасына қатысты. Басқа архитектураларда ұқсас дерек құрылымдары болуы мүмкін, бірақ олардың жұмыс істеу қағидалары әртүрлі болуы мүмкін. IDT-ны қолдану аппараттық үзілістер, бағдарламалық үзілістер және процессор ерекшеліктері – барлығы бірге үзілістер деп аталатын үш түрлі оқиға арқылы іске қосылады. IDT 256 үзіліс векторларынан тұрады, олардың алғашқы 32-сі (0–31 немесе 0x00–0x1F) процессор ерекшеліктері үшін пайдаланылады.

Нақты режим

Нақты режимде үзіліс кестесі IVT (үзіліс векторлық кесте) деп аталады. 80286 процессорына дейін IVT жадыда әрқашан 0x0000-ден 0x03ff-ке дейінгі бірдей жерде орналасқан және 256 алыс көрсеткіштен тұрды. Аппараттық үзілістерді бағдарламаланатын үзіліс басқарушысы арқылы кез келген векторға бейімдеуге болады. 80286 және одан кейінгі процессорларда IVT-ның мөлшері мен орналасуын, қорғалған режимдегі IDT (Interrupt Descriptor Table) сияқты, LIDT (Load Interrupt Descriptor Table Register) нұсқаулары арқылы өзгертуге болады, бірақ бұл оның форматын өзгерте алмайды.

BIOS үзілісі

BIOS үзіліс басқарушыларды тіркеу арқылы аппараттық құралдардың бір бөлігіне қарапайым нақты режимде қол жеткізуді қамтамасыз етеді. Олар INT командасымен бағдарламалық үзіліс ретінде шақырылады, ал параметрлер тіркеулер арқылы жіберіледі. Бұл үзілістер жүйе жадының құрылымын анықтау, VGA шығысын және режимдерін конфигурациялау, сондай-ақ жүктеу процесінің басында дискіге қол жеткізу сияқты түрлі міндеттер үшін пайдаланылады.

Қорғалған және ұзақ режім

IDT – жадта тізбектей сақталатын және векторлық нөмірмен индекстелетін дескрипторлар массиві. Барлық мүмкін жазбаларды пайдалану қажет емес: кестені қолданылған ең жоғары үзіліс векторына дейін толтыру жеткілікті, ал IDT ұзындығы бөлігін сәйкесінше орнату керек. IDTR тіркегі IDT-ның сызықтық базалық мекенжайын және лимитін (байттардағы ұзындығы минус 1) сақтау үшін қолданылады. Үзіліс пайда болғанда процессор үзіліс векторын ену өлшеміне (қорғалған режимде 8, ұзақ режимде 16) көбейтіп, нәтижені IDT базалық мекенжайына қосады. Егер мекенжай кесте шегінде болса, DPL тексеріледі және үзіліс шлюз түріне қарай өңделеді. Дескрипторлар үзіліс қақпалары, тұзақ қақпалары немесе тек 32 биттік қорғалған режимде ғана тапсырма қақпалары бола алады. Үзіліс және тұзақ қақпалары сегментті (GDT немесе LDT-де болатын) және осы сегменттегі ауытқуды көрсету арқылы орындалатын кодты қамтитын жад орнын көрсетеді. Тұзақ және үзіліс қақпаларының арасындағы жалғыз айырмашылық – үзіліс қақпалары процессордың бұғатталатын аппараттық үзілістерді одан әрі өңдеуін тоқтатады, оларды аппараттық тарапынан туындаған үзілістерді өңдеуге қолайлы етеді (керісінше, тұзақ қақпалары бағдарламалық үзілістер мен қателерді өңдеу үшін пайдалы). Тапсырма қақпасы ағымдағы белсенді тапсырма күйінің сегментін ауыстырады, аппараттық тапсырма ауыстыру механизмін пайдаланып процессорды тиімді түрде басқа бағдарламаға, жіпке немесе процеске береді.

Қалқалау

Кейбір Windows бағдарламалары IDT-ге шақыруларды (қоңырауларды) ұстайды. Бұл IDT-ге шақыруларды (қоңырауларды) тоқтатып, өз өңдеуін қосатын ядролық режимдегі драйверді жазуды қамтиды. Microsoft бұны ресми түрде ешқашан қолдаған емес, бірақ Windows-тың 64-биттік нұсқаларына дейін оның операциялық жүйелерінде бағдарламалық түрде бұл мүмкіндікке жол берілген. Ал енді, ядролық режимдегі ұстағышты (hook) пайдалануға тырысқан драйвер машинаның жұмысын тоқтатып, қате туралы хабарлама шығарады.