LDT не является обязательным. IDT является эквивалентом защищенного режима для IVT реального режима и служит той же цели. Он описывает точки входа в ISR и обработчики исключений. Вам необходимо IDT, чтобы иметь возможность обслуживать аппаратные и программные прерывания и исключения. Если вы можете жить без них, вам не нужно настраивать IDT.
Переключение в защищенный режим требует немного больше, чем просто настройка GDT и выполнение LGDT. Вам необходимо изменить бит CR0 0 на 1, выполнить скачки сегментов сегмента нагрузки (желательно, чтобы избежать проблем с неинициализированными сегментами регистров во время различных переключателей контекста) с помощью селекторов, указывающих на соответствующие записи GDT.
Код в режиме реального времени обычно не может работать в защищенном режиме (за исключением виртуального 8086 (вспомогательного) режима), поскольку значения в режиме реального времени в сегментных регистрах не могут работать в защищенном режиме и потому, что сегмент: смещенные адреса переведены в физические адреса по-разному в защищенном режиме (чтение на GDT и перевод страницы). IOW, добавление 1 к значению в регистре сегментов больше не приводит к добавлению 16 к результирующему физическому адресу. Кроме того, вы не можете иметь сегмент, который в то же время можно читать, записывать и выполнять.
Теоретически вы можете настроить дескрипторы GDT и/или LDT таким образом, чтобы селектор N выбирал дескриптор для сегмента 64 КБ с базовым адресом N * 16. На практике это куд. Тем не менее, Borland реализовал эту схему в своем Borland Pascal 7, поэтому вы могли писать программы с защищенным режимом так же, как и их запись в реальном режиме.
Просим вас подробно остановиться на сегменте: смещение перевода в защищенном режиме? –
@PantherCoder Обязательное чтение: Руководство разработчика по архитектуре Intel® 64 и IA-32, том. 3 «Руководство по системному программированию», главы 2-5 и около. –
Да, обычно они будут использовать процессор в 16-битном защищенном режиме. В некоторых более ранних операционных системах и средах допустима ошибка доступа к памяти, обработчик ошибок будет генерировать набор записей дескриптора, чтобы позволить команде правильно выполнить и затем перезапустить команду, вызвавшую ошибку. Часто вы можете использовать инструкцию LOADALL для непосредственного загрузки скрытых записей дескриптора. Конечно, у этого было много подводных камней - трудно иметь ОС и программу защищенного режима, выполняемую вместе, когда некоторые из их дескрипторов могут пересекаться, если вы хотите, чтобы ОС и программа работали в одно и то же время. –