Да. Но если процессор выполняет уже закэшированный код и у него нет необходимости обращаться к данным или командам за пределами кэшированных адресов, то кэш-промахов не будет.
petrstarikov Как же это из кэша выполняться будет(int 0x13), если Вы код обработчиков прерываний стёрли - память то очищена? И как Вы сейчас без прерываний BIOS подгрузите сохранённый образ памяти с жёсткого диска?
Обработчики BIOS, хранятся в ПЗУ и очистка ОЗУ на них не повлияет. И вызвать их можно не через int13, а напрямую, прочитав перед сбросом ОЗУ вектор прерывания
petrstarikov Или вы хотите, чтобы таблица векторов прерываний и код всех обработчиков тоже закэшировался?
ВСЕ обработчики прерываний находтся в 1мб оперативной памяти и не где иначе. реальный режим просто больше не адресует. Ты разве этого не знаешь? В чипе биос они тоже хранятся, но осуществить к нему доступ является большой проблемой, так как чип отображается на память под 4 гб (и это не всегда). так надо будет в самом биос найти адрес где они лежат. А это вопрос распаковки модулей и их дизассемблирования.
Ну что ж, проверь. Попробуй в реальном режиме записать байт по адресам F0000-Fxxxxx. Если следовать твоей логике, то эти адреса находятся в ОЗУ и запись не вызовет проблем.
Это закрытый диапазон адресов, что бы в него записать, надо изменить регистры MTRR северного моста. А биос отображен говорб еще раз на 4гб- зазмер чипа - 4 гб. Я так в Eseg писал.
Не утомляйте меня, систематизируйте свои знания. У северного моста нет MTRR регистров, они у процессора. Хотя могу и по существу. Как Вы думаете, как процессор считывает первые байты BIOS после сброса? Вы ведь не забыли, что после сброса процессор находится в реальном режиме с адресацией только первого мегабайта? И Вы ведь не забыли, что BIOS находится чуть ниже 4 ГБ? Решение, как Вы возможно знаете, очевидное. И никто его не мешает воспроизвести для сброса ОЗУ и последующего вызова прерываний BIOS'а.
acckiitvar Не оперативной памяти, а адресного пространства, на верхние 64КБ которого как раз и отмаплен BIOS ROM. petrstarikov Это такая шутка, или Вы действительно считаете, что здесь есть чем гордиться? Кстати, по секрету скажу, что область знаний, требуемых на олимпиадах, начиная от школьных и закачивая международными, ориентирована по большей части на алгоритмические задачи и имеет ну ооочень посредственное отношение к архитектуре ПК. Так что попытка выпендриться не засчитана. Ну во-первых, далеко ещё не все процессоры (которые ещё можно назвать современными) интегрированы с ним. А во-вторых, что по Вашему с точки зрения программного интерфейса изменилось с того, что контроллер памяти на одном чипе с процессором? А вообще встречный вопрос. Зачем обнулять RAM?
Интерес был академический. Возможно, что и практический смысл имеется. Может быть чтобы гарантированно избавиться от любых перехватов. Хотя вряд ли, глупо
petrstarikov В чисто академических целях можно попробовать с помощью DMA занулить. Но. Пусть код обработчиков и в ROM, но Вы ведь помните, что в RAM хранится и BIOS Data Area, а также EBDA, которые инициализируются стартовым кодом и требуются обработчикам? Наиболее вероятно, что int 0x13 с занулёнными инициализированными данными ни к чему хорошему не приведёт.
Ну перепутал где они находятся, слишком редо нужны. Вопрос отображения и переноса описан в Салихане, они туда сначала отображаются, а потом убираются. А вообще сколько занимает биос? я видел по 4 метра, и они как то в 1 метр не влезают, не думаешь? а если еще дос поставить работающий в реальном режиме, то совсем мистика получается
Согласен, работа при зануленной BDA требует проверки. Насчет DMA возможно вариант, буду смотреть, хотя кажется это чрезмерно долго. Так как операции типа "память-память" DMA не поддерживает, надо внешний источник данных.
Кэш все равно узнает о том, что произошли изменения ОЗУ, поскольку DMA будет работать через общую шину, она кэшу и просигнализирует о том, что информация в нем стала инвалидной. Соответственно, следущее же обращение к станет кэш-промахом. Вот такой вопрос - современная память (DDR2, DDR3), она до сих пор делается по той же самой технологии, требующей рефреша? Если да и если возможен программный доступ к контроллеру рефреша ОЗУ, то можно попробовать перепрограммировать его так, чтоб ОЗУ осталось без нормального рефреша.
Про рефреш я думал, пока не разобрался окончательно. У современных модулей есть режим self refresh, как он управляется мне непонятно.