Page 1 of 1

Глючу я или Bochs?

Posted: Fri Jun 03, 2005 11:59 am
by halyavin
Тестируя менеджер памяти я столкнулся со следующей ситуацей: программа вызывает системную функцию, в обработчике системной функции cr3 устанавливается в cr3 программы (который берется из ее TSS) и старое значение обратно не устанавливается (программа всегда вызывает один и тот же обработчик после исправления от Вилле). Я остнавливаю Bochs на вызове некоторой системной функции, причем это не первый вызов. Смотрю cr3 - он старый! Но ведь новое значение cr3 должно уже несколько раз сохранится в TSS обработчика системного вызова этой программы. Ладно, тестирую дальше. Ставлю брейкпоинт на процедуру переключения процессов и брейкопоинт внутрь цикла системной функции. Дожидаюсь пока не произойдет переключение процессов во время исполнения системной функции (она исполняется достаточно долго). Смотрю на значение cr3, которое должно сохранится в TSS. Оно оказывается старым! Разумеется после того, как снова управление передастся на эту программу она совершит исключение, поскольку в старом cr3 нет отображения области начиная с 0x10000000 на память программы.
Вот я и не могу понять - это глюк Bochs (версия 2.1 от 11 января 2004 года) или cr3 не сохраняется в сегменте TSS, а только восстанавливается? Я, конечно, могу сделать так, чтобы cr3 в TSS обработчика системного вызова был сразу правильный, но все же интересно...

Posted: Fri Jun 03, 2005 2:42 pm
by halyavin
Установил cr3 в сегменте TSS обработчика системного вызова при запуске процесса - все работает! За одним можно удалить ненужный код в обработчике системного вызова.

Posted: Fri Jun 03, 2005 7:20 pm
by Mario79
Я так и не понял, эта проблема актуальна лишь при внедрении менеджера памяти или исправление можно вносить уже сейчас в ядро?
И где указание конкретных строк кода для исправления?

Posted: Fri Jun 03, 2005 8:42 pm
by Иван Поддубный
Mario: в обычном ядре cr3 практически не используется, так что исправлять тебе нечего.
Кстати недавно вышел Bochs 2.2 http://bochs.sourceforge.net

Posted: Fri Jun 03, 2005 9:10 pm
by halyavin
Иван Поддубный
Ты прав, активно используется cr3 только в моем менеджере памяти, где и возникают подобные глюки.

Posted: Tue Jun 07, 2005 6:39 pm
by kiwi_mani_snova
halyavin, а ты для каждого приложения меняешь cr3?? не проще ли каталог не трогать, а только менять в нем указатели на каталоги страниц адресного пространства самого приложения...а для ядра не менять...?

Posted: Thu Jun 16, 2005 9:30 pm
by halyavin
Тогда нужно изменять указатели при каждом переключении процессов.
У меня сделано так: есть каталоги страниц, описывающие разные области памяти и для каждого процесса есть своя директория, в которой указатели на нужные каталоги. (Может ты это имел в виду?)