OSDev
http://osdev.su/

вопрос по размещению таблицы IDT.
http://osdev.su/viewtopic.php?f=6&t=965
Страница 2 из 3

Автор:  Demonikss [ 19 июл 2014, 11:33 ]
Заголовок сообщения:  Re: вопрос по размещению таблицы IDT.

Значит если я не хочу в принципе после инициализации своей программы использовать биос, то и BDA мне совсем не нужен? Все необходимые обработчики прерываний будут в самой программе, к примеру блок описания оборудования будет создан в самой программе. Значит программа может работать независимо, используя обращения к своим драйверам и ей совершенно побоку что биос вообще существует?

Автор:  SII [ 19 июл 2014, 11:36 ]
Заголовок сообщения:  Re: вопрос по размещению таблицы IDT.

BDA необходимо сохранять в абсолютно обязательном порядке. Эти области могут использоваться кодом BIOSа для режима SMM, на что Вы никак повлиять не можете. И BDA состоит из нескольких участков -- сразу за векторами прерываний реального режима, в верхней части нижней памяти (т.е. около границы 640 Кбайт) и выше 1 Мбайта (где угодно и сколько угодно). Поэтому надо всегда спрашивать у BIOS объём имеющейся нижней памяти (он будет меньше 640 Кбайт -- как раз потому, что часть занята под данные BIOS), а также узнавать карту распределения памяти свыше 1 Мбайта.

Автор:  Demonikss [ 19 июл 2014, 11:59 ]
Заголовок сообщения:  Re: вопрос по размещению таблицы IDT.

короче как ни скакай, биос не обскачешь? насчет smm мне еще почитать надо, не обладаю достаточной информацией чтобы обсуждать... в общем размещение IDT с адреса 0070:0000 (ну предварительно спросив разрешения у биос) как бы является нормальной практикой и отклоняться от нее (чтобы не нажить гемороя) не рекомендуется? Адрес беру по выводу команды mem под ms-dos 6.22, там с этого адреса начинается IO SYSTEM DATA, то есть использование памяти уже операционной системой непосредственно.

Автор:  phantom-84 [ 19 июл 2014, 16:34 ]
Заголовок сообщения:  Re: вопрос по размещению таблицы IDT.

Demonikss писал(а):
Не понимаю про какое ядро идет в данном случае речь. Если про то что функции биос, так я ясно выразился что не хочу их использовать. Если про ядро любой операционной системы, то это уже зависит от реализации самого драйвера. Я говорю про низкоуровневое программирование на языке ассемблера любого кода в защищенном режиме.
Я говорил о ядре ОС защищенного режима. Вы можете унаследовать состояние индикаторов от BIOS. Например, в настройках BIOS может быть указание, включать при старте НамЛок или нет. Вы можете эту настройку унаследовать в вашем коде защищенного режима.

Естественно, в защищенном режиме при обработке NMI используется дескриптор, размещенный в IDT.

Что касается размера BDA, то я всегда использовал память, начиная с адреса 500h, под свои нужды. Проблем никогда не было. Область данных BIOS в конце базовой памяти обычно называют EBDA. Ее стартовый адрес, т.е. размер доступной базовой памяти нужно определять обязательно.

Автор:  Demonikss [ 19 июл 2014, 17:02 ]
Заголовок сообщения:  Re: вопрос по размещению таблицы IDT.

Ну вопрос с размещением IDT я уже для себя прояснил. Теперь разбираюсь с определением доступного размера памяти. Думаю это можно будет вынести в отдельную тему так как вопрос именно по размещению IDT как мне кажется раскрыт полностью и обоснован со всех позиций.

Автор:  Rammstein [ 19 июл 2014, 17:12 ]
Заголовок сообщения:  Re: вопрос по размещению таблицы IDT.

я юзаю всю память первого метра под GDT, IDT, и под прочие штуки системы. при этом я не затираю вектора прерываний RM. вот моя карта распределения памяти
Начальный адрес | Размер | Использование
0 | 600h | Таблица векторов прерываний защищенного режима + переменные BIOS
600h | GDT_SIZE | Таблица GDT
10600h | IDT_SIZE |Таблица IDT
20600h | 12 байт | Значения для регистров GDTR и IDTR
2060Ch | 1F4h | Незанятая область памяти
30600h | MAX_SERVICES_COUNT*4 | Каталог таблиц функций сервисов
30600h+ MAX_SERVICES_COUNT*4 | MAX_SERVICES_COUNT* MAX_SERVICES_FUNC*4 | Таблицы адресов функций сервисов
96000h |4 КБайт | Каталог таблиц страниц
100000h |Варьируется в зависимости от установленной памяти. Но не более 4 Мбайт | таблицы страниц виртуальной памяти
Варьируется в зависимости от установленной памяти. Но не более 5 Мбайт | Вся оставшаяся доступная память | Ядро + приложения
конечно коряво написано, но кума надо тот поймет

Автор:  phantom-84 [ 19 июл 2014, 19:23 ]
Заголовок сообщения:  Re: вопрос по размещению таблицы IDT.

Demonikss, была недавно тема. Плюс поиск по форуму.

Rammstein, из базовой памяти использую только первую страницу. Все прочее уже вариативно, т.к. работает через пейджинг. Зачем вам полноразмерная GDT? Да и под IDT взято явно с запасом :)

Автор:  Rammstein [ 19 июл 2014, 21:05 ]
Заголовок сообщения:  Re: вопрос по размещению таблицы IDT.

phantom-84, взято все по максимуму, чтобы потом небыло гемороя с добавлением дескрипторов. а вообще только из-за того, чтобы хоть чем-то ее забить, ибо жалко мне первый мегабайт отдавать "пустоте". как-то так :)

Автор:  phantom-84 [ 19 июл 2014, 22:23 ]
Заголовок сообщения:  Re: вопрос по размещению таблицы IDT.

Rammstein писал(а):
взято все по максимуму, чтобы потом небыло гемороя с добавлением дескрипторов.
В защищенном режиме максимальный размер IDT – 2 кб. Зачем вам 64 кб?

Цитата:
а вообще только из-за того, чтобы хоть чем-то ее забить, ибо жалко мне первый мегабайт отдавать "пустоте". как-то так :)
Так используйте свободную память по назначению.

Автор:  Demonikss [ 19 июл 2014, 22:35 ]
Заголовок сообщения:  Re: вопрос по размещению таблицы IDT.

phantom-84 писал(а):
Demonikss, была недавно тема. Плюс поиск по форуму.


Я хотел понять почему именно делается такое размещение. В других темах этого полностью не раскрыто. Если бы там было раскрыто полностью мне не нужно было бы создавать новую тему, прочитал бы в других. Про SMM например нигде не встречал упоминания, или плохо искал?

Страница 2 из 3 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/