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

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

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

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, зависит от типов существующих дескрипторов.

Другие вопросы по тегам