Кто инициализирует IDT, ядро ​​или процессор? - PullRequest
1 голос
/ 26 февраля 2011

Это из Википедии ...

Таблица дескрипторов прерываний (IDT) структура данных, используемая в x86 архитектура для реализации прерывания таблица векторов. IDT используется процессор для определения правильного ответ на прерывания и исключения ... В процессоре 8086 IDT находится в фиксированном месте в памяти от адреса 0x0000 до 0x03ff ...

Это от http://www.linuxjournal.com/article/4048?page=0,1

Когда start_kernel (найден в /usr/src/linux/init/main.c) называется, он вызывает trap_init (найден в /usr/src/linux/kernel/traps.c). trap_init устанавливает IDT через макрос set_trap_gate (находится в /usr/include/asm/system.h) и инициализирует дескриптор прерывания таблица, как показано в «Смещение Описание ».

Я довольно смущен, потому что эти два описания кажутся противоречивыми ... Первое говорит, что IDT связана с процессором и не зависит от ядра (на самом деле, оно даже не лежит внутри ядра). Второй говорит, что ядро ​​Linux инициализирует IDT и реализует код для ISR, и весь код для ISR находится внутри ядра.

Кроме того, когда устройство генерирует прерывание для ЦПУ, является ли оно ядром или процессором, который отвечает за выполнение подпрограмм прерывания? Пожалуйста, объясните мне это ... Спасибо заранее

Ответы [ 3 ]

2 голосов
/ 26 февраля 2011

Я думаю, это ядро, которое загружает и инициализирует IDT. [Source]

Помните, что перед тем, как ядро ​​разрешит прерывания, оно должно загрузить начальный адрес таблицы IDT в регистр idtr и инициализировать все записи этой таблицы. Это действие выполняется при инициализации системы.

IDT инициализируется и используется BIOS процедуры, пока компьютер все еще работает в реальном режиме. Однажды Linux вступает во владение, однако, IDT перемещается в другую область оперативной памяти и инициализированы во второй раз, потому что Linux не используйте любую процедуру BIOS.

Проверить следующие ссылки:

2 голосов
/ 01 марта 2011

BIOS устанавливает начальную IDT, которая используется BIOS и загрузчиками.Он также может использоваться 16-разрядными операционными системами, поскольку он стандартизирует аппаратный интерфейс, такой как инструкция INT 10h, которая обрабатывает некоторые видеовыходы.Когда загружается 32- или 64-разрядное ядро, оно должно указать свою собственную IDT, чтобы переключиться в защищенный режим.

0 голосов
/ 26 февраля 2011

IDT состоит из ряда адресов функций прерывания в некоторой области памяти.

BIOS IDT по умолчанию устанавливается при загрузке системы.

Когда ядро ​​загружаетсяобычно устанавливает свой собственный.

...