Нужна ли IDT на этапе загрузки?

Тема в разделе "WASM.OS.DEVEL", создана пользователем Quark, 18 окт 2008.

  1. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    перед переходом в PM необходимо инициализировать IDT, GDT. вот AMD:

    Load the 32-bit IDT, in case any interrupts or exceptions occur after entering protected mode, but before enabling long mode.

    вопрос1: насколько вероятно возникновение прерываний до перехода в LM? ни в одном стандартном загрузчике (grub, lilo...)я не увидел команды lidt. точнее, в GRUB IDT грузится, но она почему-то занулена. нужно ли создавать 32х IDT, если далее сразу же идёт переход в LM?

    вопрос2: какие обработчики вообще необходимы? и не совсем понятно как дальше работать с оборудованием (после перехода в PM). через порты ВВ?

    хотелось бы какую-нибудь доку по портам ВВ и прерываниям BIOS.
     
  2. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Если никакие прерывания не используются -- то и IDT не нужна. Такое возможно, если не используются команды, генерирующие прерывания (INT, INTO, BOUND), не возникает разного рода исключений (типа деления на ноль), а прерывания от внешних устройств с помощью флага IF запрещены. Правда, есть ещё немаскируемое прерывание, но на него можно не обращать внимания, по большому счёту: оно возникает только при обнаружении сбоев в аппаратуре, при которых всё равно нормальная работа, скажем так, проблематична.

    Работа с внешними устройствами после перехода в защищённый режим в общем случае должна осуществляться программой самостоятельно, в т.ч. путём обращения к соответствующим портам.
     
  3. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    IDT не нужна, я инициализацию PM выполняю с запрещенными прерываниями (не только переключение, но и довольно большое количество других действий).
     
  4. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    идт в общем-то нах не нужна на стадии инициализации в большинстве случаев. Однако для отладки лучше все таки создать обработчики основных исключений.
     
  5. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Кстати имеет смысл обнулять IDT на этапе инициализации. Конечно предполагается, что работающий во время инициализации код не будет приводить к исключениям, но вот если код был поврежден, к примеру, еще в файле, то обнуленные дескрипторы шлюзов обработчиков исключений гарантировано будут вызывать трипл-фолт и ресет при возникновении исключений в следствии повреждения кода, а хз какие ака дескрипторы, лежащие начиная с нулевого адреса, наверняка тоже будут, но есть вероятность, что случится какое-то чудо, а не трипл-фолт.
     
  6. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    IDT не нужна до тех пор, пока ты не повесишь хотя бы один обработчик прерывания от аппаратуры.
     
  7. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Quark
    Для отладки прерывания нужны и чем раньше их сделать тем лучше. Это избавит от проблем.

    Прерывания могут происходить. Но на стадии перехода RM-PM они блокируются/маскируются. Так что загружать IDT32 нет необходимости можно сразу грузить IDT64.

    Надо настроить исключения. И аппоратные обработчики, те которые нужны.


    Да с оборудованием придеться работать через порты в/в. BIOS тут мало чем помогает.

    Их полно. Но тут такой кошмар, что-то стандартно, что-то не стандартно.
    Кулаков В. Программирование на аппоратном уровне
    IO-DOC-Пpогpаммно-технические сpедства пеpсональных ЭВМ семейства IBM PC Ю. С. Лукач, А. Е. Сибиряков
    Ralf_Brown Interrupt List сокращенно INTERRUP
    BIOS Programmer's Guide v10.pdf
     
  8. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    Что за идиотская архитектура?
    Сегментация, конечно, не нужна, но без неё варя не работает - оставили.
    Общих стандартов нет, но есть множество вариантов.
    VESA режим в PM - кто вообще это разрабатывал? просканировать память, сверить чек-сумму, скопировать, инициализировать... А если совершенно случайно и сигнатура и чек-сумма совпадут. как-то это всё не серьёзно. такие методики только в вирусах применять.
     
  9. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    А чего удивляться? ИБМ, создавая свой ПК, никакого значения ему не придавала, поэтому лепили как попало и из чего попало. Ну а дальше -- больше: каждый производитель пытался придумать и впихнуть что-то своё, такое-эдакое особенное.