Board.KolibriOS.org http://board.kolibrios.org/ |
|
Глючу я или Bochs? http://board.kolibrios.org/viewtopic.php?f=37&t=72 |
Page 1 of 1 |
Author: | halyavin [ Fri Jun 03, 2005 11:59 am ] |
Post subject: | Глючу я или Bochs? |
Тестируя менеджер памяти я столкнулся со следующей ситуацей: программа вызывает системную функцию, в обработчике системной функции cr3 устанавливается в cr3 программы (который берется из ее TSS) и старое значение обратно не устанавливается (программа всегда вызывает один и тот же обработчик после исправления от Вилле). Я остнавливаю Bochs на вызове некоторой системной функции, причем это не первый вызов. Смотрю cr3 - он старый! Но ведь новое значение cr3 должно уже несколько раз сохранится в TSS обработчика системного вызова этой программы. Ладно, тестирую дальше. Ставлю брейкпоинт на процедуру переключения процессов и брейкопоинт внутрь цикла системной функции. Дожидаюсь пока не произойдет переключение процессов во время исполнения системной функции (она исполняется достаточно долго). Смотрю на значение cr3, которое должно сохранится в TSS. Оно оказывается старым! Разумеется после того, как снова управление передастся на эту программу она совершит исключение, поскольку в старом cr3 нет отображения области начиная с 0x10000000 на память программы. Вот я и не могу понять - это глюк Bochs (версия 2.1 от 11 января 2004 года) или cr3 не сохраняется в сегменте TSS, а только восстанавливается? Я, конечно, могу сделать так, чтобы cr3 в TSS обработчика системного вызова был сразу правильный, но все же интересно... |
Author: | halyavin [ Fri Jun 03, 2005 2:42 pm ] |
Post subject: | |
Установил cr3 в сегменте TSS обработчика системного вызова при запуске процесса - все работает! За одним можно удалить ненужный код в обработчике системного вызова. |
Author: | Mario79 [ Fri Jun 03, 2005 7:20 pm ] |
Post subject: | |
Я так и не понял, эта проблема актуальна лишь при внедрении менеджера памяти или исправление можно вносить уже сейчас в ядро? И где указание конкретных строк кода для исправления? |
Author: | Иван Поддубный [ Fri Jun 03, 2005 8:42 pm ] |
Post subject: | |
Mario: в обычном ядре cr3 практически не используется, так что исправлять тебе нечего. Кстати недавно вышел Bochs 2.2 http://bochs.sourceforge.net |
Author: | halyavin [ Fri Jun 03, 2005 9:10 pm ] |
Post subject: | |
Иван Поддубный Ты прав, активно используется cr3 только в моем менеджере памяти, где и возникают подобные глюки. |
Author: | kiwi_mani_snova [ Tue Jun 07, 2005 6:39 pm ] |
Post subject: | |
halyavin, а ты для каждого приложения меняешь cr3?? не проще ли каталог не трогать, а только менять в нем указатели на каталоги страниц адресного пространства самого приложения...а для ядра не менять...? |
Author: | halyavin [ Thu Jun 16, 2005 9:30 pm ] |
Post subject: | |
Тогда нужно изменять указатели при каждом переключении процессов. У меня сделано так: есть каталоги страниц, описывающие разные области памяти и для каждого процесса есть своя директория, в которой указатели на нужные каталоги. (Может ты это имел в виду?) |
Page 1 of 1 | All times are UTC+03:00 |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |