Я читал, что в многопроцессорной системе каждый процессор имеет свою собственную копию таблицы дескрипторов прерываний (IDT) и они используют одну копию глобальной таблицы дескрипторов (GDT).
Почему процессоры не могут использовать одну копию IDT?
Я читал, что в многопроцессорной системе каждый процессор имеет свою собственную копию таблицы дескрипторов прерываний (IDT) и они используют одну копию глобальной таблицы дескрипторов (GDT).
Почему процессоры не могут использовать одну копию IDT?
Исходя из использования термина 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 зависит от типов присутствующих дескрипторов.
lgdt
кодируется как bytes - 1
, поэтому вы можете передать размер 65536 байт / 8192 дескриптора. Селекторы сегментов 0xfff8 | priv_level
должны индексировать самый высокий. Есть ли какое-то другое ограничение, которое не позволяет вам использовать все записи 8192 GDT или LDT?
- person Peter Cordes; 16.01.2018
GDTR
для внутреннего регистра указателя GDT, установленного lgdt
, и то же самое для IDTR/LDTR.
- person Peter Cordes; 16.01.2018