Board.KolibriOS.org

Official KolibriOS board
It is currently Sun Jun 16, 2019 10:32 am

All times are UTC+03:00




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


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


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


Top
   
 Post subject:
PostPosted: Fri Jun 03, 2005 8:42 pm 
Offline

Joined: Fri Nov 12, 2004 3:20 pm
Posts: 90
Mario: в обычном ядре cr3 практически не используется, так что исправлять тебе нечего.
Кстати недавно вышел Bochs 2.2 http://bochs.sourceforge.net


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


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


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


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 7 posts ] 

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited