Консультация № 194939
12.03.2019, 11:02
0.00 руб.
0 7 0
Уважаемые эксперты! Пожалуйста, ответьте на вопрос:

если линейный адрес в защищенном режиме (с выключенным страничной адресацией CR0:PG = 0) указывает на начало памяти, то есть база - 00.. доступ (00 - ядро) чтение\запись и по этому адресу записать 1мг данных и перейти в реальный режим, то получится что вектор прерываний,данные биос и все что находится физически по адресу 0-1мг будут удалены и перезаписаны?

Обсуждение

давно
Посетитель
7438
7205
12.03.2019, 12:57
общий
Адресаты:
Естественно
Память-то одна и та же. Разные только способы доступа.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
401281
56
12.03.2019, 13:20
общий
Адресаты:
спасибо за ответ
давно
Старший Модератор
31795
6196
12.03.2019, 14:07
общий
12.03.2019, 14:09
Адресаты:
Как бы Вы не старались, 1-й метр угробить можно только с помощью таких "извращений", которые книгах не описаны. Селекторная организация памяти, как и Страничная, исключает 1-й метр, из числа доступной памяти. Это жертва тому объему памяти, который будет доступен, что значит 1-ин метр, когда у Вас пару гектаров доступны.

Даже если у Вас это получится, то при переходе в RM - постоянно(18,2 раза в секунду) будет вызываться, IRQ0(int 08h) и если там не будет осмысленного кода(т.к. таймер, кроме изменения CMOS времени, еще выполняет "КУЧУ" дополнительных функций), то в лучшем случае железо перегрузится, в худшем зависнет.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
401281
56
13.03.2019, 19:29
общий
Адресаты:
меня терзали сомнения а что если память в РМ начинается с начала XMS адреса, вот и решил узнать у специалистов
давно
Старший Модератор
31795
6196
15.03.2019, 20:37
общий
Адресаты:
Давайте думать логично.

Для перехода из RM в PM, и нормальной работы CPU в РМ, нужна GDT, остальное не важно для кратковременного перехода туда-обратно. Минимальный размер GDT, это 8-ть байт = "0" + 8-мь байт для описания сегмента кода. Прыгнули, присели пару раз, вернулись. Не нужно данных, таймер, тоже не успеет сработать.

Т.е. нужно всего 128 бит(2*8*8), сам регистр GDTR = 48-мь бит. Другими словами, он хранит в себе ссылку на таблицу GDT, где она определена? Угадали? В RM, т.е. 1-ый метр.

Да, с помощью LGDT, можно переместить(GDT, и сформировать новые LDT, IDT, TSS, . . . . ) в другую область памяти, отличную от первого метра.

А теперь вопрос к Вам:
- LGDT RM и LGDT РM, сообщают CPU, что GDT, уже не там, где была раньше(т.е. первый метр).
- CPU безразлично, что записано в GDTR, ему важно, что некоторое количество бит, указывают адрес на саму GDT, где этот адрес находится - безразлично.
- О том, что перенесли GDT, он не знает, т.к. сравнивать интервалы от .. до .., ему нет времени, поэтому он считает, что GDT в первом метре.

И сам вопрос: CPU позволит Вам портить первый метр?
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
401281
56
16.03.2019, 13:56
общий
я думаю да, если таблица GDT не находится в 1 мб и во время перезаписи процессор не возобновит теневую копию регистра (значение базы и лимита),я сомневаюсь конечно но вы же сами сказали что если так извращаться то можно и Лысков Игорь Витальевич то же подтвердил что можно
давно
Посетитель
401281
56
16.03.2019, 16:16
общий
Адресаты:
я не ленюсь все мои знания это теория на практике я только могу написать программу переход РМ,пустой цикл и обратно в RM я пока не могу проверить ответ кодом и все таки можно узнать правильный ответ
Форма ответа