Таблица дескрипторов прерываний в многопроцессорной системе

Я читал, что в многопроцессорной системе каждый процессор имеет свою собственную копию таблицы дескрипторов прерываний (IDT) и они используют одну копию глобальной таблицы дескрипторов (GDT).

Почему процессоры не могут использовать одну копию IDT?


person vvebik    schedule 15.01.2018    source источник
comment
То, что вы читаете, должно относиться к конкретной системе. Все процессоры могут использовать один IDT.   -  person user3344003    schedule 15.01.2018
comment
какой процессор/система вас интересует?   -  person old_timer    schedule 16.01.2018


Ответы (1)


Исходя из использования термина GDT, я предполагаю, что вы спрашиваете о процессоре x86 и/или x86-64.

Каждый процессор x86 (точнее, аппаратный поток) имеет свои отдельные регистры IDTR и GDTR. Это позволяет, но не требует, чтобы ОС использовала разные IDT и GDT для каждого процессора.

Пространство векторов прерываний в x86 составляет 8 бит, из которых 32 зарезервированы, что дает 224 прерывания. Во многих платформах недостаточно четких векторов прерываний. Используя отдельный IDT на каждом процессоре, ОС может назначить до 224 различных векторов прерываний на процессор. (Однако не следует предполагать, что это делают все ОС.)

Напротив, GDT может содержать до 8191 дескриптора*, что намного больше, чем используется в большинстве операционных систем, поэтому ОС редко нуждается в использовании отдельных GDT на каждом процессоре.

* Запись GDT 0 использовать нельзя, поскольку селектор с индексом 0 считается нулевым селектором. В 64-битном режиме системные дескрипторы увеличиваются до 16 байтов, а дескрипторы кода и данных остаются 8 байтами, поэтому общее количество возможных записей в GDT зависит от типов присутствующих дескрипторов.

person prl    schedule 15.01.2018
comment
16-битное поле размера таблицы операнд size:pointer для lgdt кодируется как bytes - 1, поэтому вы можете передать размер 65536 байт / 8192 дескриптора. Селекторы сегментов 0xfff8 | priv_level должны индексировать самый высокий. Есть ли какое-то другое ограничение, которое не позволяет вам использовать все записи 8192 GDT или LDT? - person Peter Cordes; 16.01.2018
comment
Кстати, в руководствах Intel используется имя GDTR для внутреннего регистра указателя GDT, установленного lgdt, и то же самое для IDTR/LDTR. - person Peter Cordes; 16.01.2018
comment
хех, мне было интересно, если это было что-то простое, спасибо. - person Peter Cordes; 16.01.2018
comment
Педантично, но в 64-битном режиме количество дескрипторов может быть меньше, когда присутствуют дескрипторы TSS, поскольку они имеют ширину 16 байтов (а не 8 байтов). - person Michael Petch; 18.01.2018