Нужен ли LDT? - PullRequest
       61

Нужен ли LDT?

3 голосов
/ 12 января 2012

В рамках разработки некоторых ОС для 32-разрядного процессора x86 я рассмотрел вопрос об использовании шлюза задач в таблице дескрипторов прерываний для вектора ошибки страницы.Цель состоит в том, чтобы принудительно переключить задачу так, чтобы стек обработчика гарантированно отображался (и избегать случая, когда часть стека прерванной задачи не отображалась).

Я запускаю свое ядро ​​(например,как есть) в QEMU, но я обнаружил, что при сбое страницы происходит сбой (я вернулся в командную строку).Я читал и копал в поисках подсказок, которые могут помочь мне выяснить точную причину.Я полагаю, что я что-то упустил и / или что-то неправильно понял.Между прочим, когда я настроил vecotr ошибки страницы на использование шлюза прерывания, я могу заставить вещи работать так, как я ожидаю.Когда я пытаюсь использовать ворота задач для этого, я сталкиваюсь с проблемами (и да, я действительно хочу продолжать пытаться использовать ворота задач).

Часть IDT настроена правильно для регистрацииворота задачи для вектора ошибки страницы.Его селектор ссылается на дескриптор TSS в GDT.Что касается дескриптора TSS в GDT, я уверен, что он тоже настроен правильно.

Однако я не уверен на 100%, правильно ли я заполнил TSS и не смог покаточно определить, как настроить все его поля.Некоторые из них, такие как esp, eip, cs, ds, es, fs, gs, ss и eflags, были относительно прямыми.Однако другие, такие как селектор сегмента LDT, менее понятны.Должен ли селектор сегмента LDT быть ненулевым И указывать на дескриптор LDT в GDT?Какие из этих полей должны быть установлены для сценария, описанного выше?У меня есть куча времени, чтобы выяснить это.

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 14 мая 2012

LDT не требуется в правильно функционирующей операционной системе x86 (на самом деле он запрещен в операционной системе x86-64).

Чтобы избежать его использования, установите его на ноль.

Следует особо помнить одну вещь - структуры на osdev.org о TSS задом наперед (http://wiki.osdev.org/TSS).) Вам нужно быть осторожным, так как неправильное использование TSS вызовет исключение TSS-fault.

...