Тестируя менеджер памяти я столкнулся со следующей ситуацей: программа вызывает системную функцию, в обработчике системной функции cr3 устанавливается в cr3 программы (который берется из ее TSS) и старое значение обратно не устанавливается (программа всегда вызывает один и тот же обработчик после исправления от Вилле). Я остнавливаю Bochs на вызове некоторой системной функции, причем это не первый вызов. Смотрю cr3 - он старый! Но ведь новое значение cr3 должно уже несколько раз сохранится в TSS обработчика системного вызова этой программы. Ладно, тестирую дальше. Ставлю брейкпоинт на процедуру переключения процессов и брейкопоинт внутрь цикла системной функции. Дожидаюсь пока не произойдет переключение процессов во время исполнения системной функции (она исполняется достаточно долго). Смотрю на значение cr3, которое должно сохранится в TSS. Оно оказывается старым! Разумеется после того, как снова управление передастся на эту программу она совершит исключение, поскольку в старом cr3 нет отображения области начиная с 0x10000000 на память программы.
Вот я и не могу понять - это глюк Bochs (версия 2.1 от 11 января 2004 года) или cr3 не сохраняется в сегменте TSS, а только восстанавливается? Я, конечно, могу сделать так, чтобы cr3 в TSS обработчика системного вызова был сразу правильный, но все же интересно...
Глючу я или Bochs?
Установил cr3 в сегменте TSS обработчика системного вызова при запуске процесса - все работает! За одним можно удалить ненужный код в обработчике системного вызова.
Я так и не понял, эта проблема актуальна лишь при внедрении менеджера памяти или исправление можно вносить уже сейчас в ядро?
И где указание конкретных строк кода для исправления?
И где указание конкретных строк кода для исправления?
Mario: в обычном ядре cr3 практически не используется, так что исправлять тебе нечего.
Кстати недавно вышел Bochs 2.2 http://bochs.sourceforge.net
Кстати недавно вышел Bochs 2.2 http://bochs.sourceforge.net
Иван Поддубный
Ты прав, активно используется cr3 только в моем менеджере памяти, где и возникают подобные глюки.
Ты прав, активно используется cr3 только в моем менеджере памяти, где и возникают подобные глюки.
halyavin, а ты для каждого приложения меняешь cr3?? не проще ли каталог не трогать, а только менять в нем указатели на каталоги страниц адресного пространства самого приложения...а для ядра не менять...?
Тогда нужно изменять указатели при каждом переключении процессов.
У меня сделано так: есть каталоги страниц, описывающие разные области памяти и для каждого процесса есть своя директория, в которой указатели на нужные каталоги. (Может ты это имел в виду?)
У меня сделано так: есть каталоги страниц, описывающие разные области памяти и для каждого процесса есть своя директория, в которой указатели на нужные каталоги. (Может ты это имел в виду?)
Who is online
Users browsing this forum: No registered users and 0 guests