Добрый вечер еще раз Появился еще такой вопрос: я перевожу процессор в защищенный режим, инициализирую IDT. После чего нужно включить страничную адресацию. Можно ли каталог страниц и таблицу страниц разместить, начиная с нулевого физического адреса? Каталог состоит из 1-й PDE (занимает первые 4К), таблица содержит только 1024 элемента (умещается в следующую физическую страницу). Из того, что я нашел в ин-нете, я затру таблицу векторов (но она ведь уже не нужна, верно?) и область "данных BIOS". Вот насчет последнего я не уверен - можно ли так делать? Насколько я понял, хранить свои служебные данные в PM бессмысленно только в области UMA (физ. адреса 0xA000 - 0xF000), Верно? P.S. Пожалуйста, не нужно рекомендовать хранить таблицы "от греха (в смысле, от младших адресов) подальше", хотелось бы по наименьшим адресам . Спасибо
Я не думаю, что ты сможешь использовать биос в защищенном режиме полноценно, там, конечно, есть какие-то 32битные точки входа, но вот я не знаю, нужна ли им эта "область данных", тем более, что эти точки входа, насколько я помню, специально рассчитаны на страничную адресацию и поэтому там не зашиты никакие абсолютные адреса. У себя в ОС я смело затираю первую физ страницу. Но... у меня после включения защ.режима биос больше не трогается. Если и ты не трогаешь, три смело =) IVT реального режима (Interrupt Vector Table) и в помине не нужна в защищенном режиме. совершенно.
Еще раз спасибо, Great. Вот только на полвопроса не получил ответа . Можно хранить сервисные данные по любым адресам, кроме области UpperMemoryArea (384 кБ)? Или есть еще какие-то "запрещенные" участки? P.S. Хотя и в UMA, кажется, можно втиснуться в 0xD000 - 0xEFFF?
Нет не верно. Есть можество диапозонов заприщенных и разрешенных для ОС. Для их определения используем INT 15h eax, e820h Облость переменных BIOS можно затереть, но не желательно. Поэтому обычно первый мегабайт как-то и не трогают. У меня так добавленн вызов прерываний через VM86 поэтому я первый мегобайт использую только для этого, а так больше и не трогую. К примеру для инициализации многопроцессорных систем используют адресс 40h:67h - область переменных BIOS. 32 битных точек мало. Непомню чтобы они требовали область переменных BIOS. На строничую адрисациию им наплевать. Они требуют селектор , те сегмент с заданными физическими адрессами. Но обычно это F000 C000, а вот облость BIOS не припомню чтобы входила кудато.
аналогично. Жаль на практике страничную пока не применял. Наверно поэтому и не вижу причин, почему бы ее не разместить где то еще, в той же base memory.