OSDev

для всех
Текущее время: 28 апр 2024, 23:51

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Страницы
СообщениеДобавлено: 01 апр 2015, 18:37 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Почему-то не отображается страница. Не пойму это что баг борща или что?
Вроде страницы ссылаются на одно и тоже но цифры не совпадают.

Цитата:
<bochs:3> page 0x3fffc000
PDE: 0x0000000000102027 ps A pcd pwt U W P
PTE: 0x000000000037d003 g pat d a pcd pwt S W P
linear page 0x000000003fffc000 maps to physical page 0x00000037d000
<bochs:4> page 0xe0000000
PDE: 0x000000000037d007 ps a pcd pwt U W P
PTE: 0x0000000000000000 g pat d a pcd pwt S R p
physical address not available for linear 0x00000000e0000000
<bochs:5> xp 0x37d000
[bochs]:
0x000000000037d000 <bogus+ 0>: 0x00000000
<bochs:6> x 0x3fffc000
[bochs]:
0x000000003fffc000 <bogus+ 0>: 0xe0000007
<bochs:7> x 0x3fffc000


Код отказывается работать!
Код:
asm
mov eax,cr3
mov cr3,eax
end;


Какая-то ошибка на cr3 а потом в обработчике исключения выскакивает тройная ошибка.
Предположительно на mov cr3,eax слетает cr3!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Страницы
СообщениеДобавлено: 01 апр 2015, 19:22 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
В конце, на 7 шаге повтори шаги 3-6 и посмотри изменения, может Bochs затирает чего-нибудь.
Я так обычно не трассирую, использую режим "trace-mem on", и когда инструкция читает память, то отладчик распечатывает страничные индексы таблиц.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Страницы
СообщениеДобавлено: 01 апр 2015, 19:33 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Да затирает. На watch выловил. Осталось понять почему затирает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Страницы
СообщениеДобавлено: 01 апр 2015, 23:03 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Что-то связано с перекрёстным использованием таблиц. Попробуй поставить эту ловушку, и не распечатывая значений просто запустить выполнение, чтобы выловилась ассемблерная инструкция, делающая такое изменение. Или откажись от рекурсивного отображения таблицы, а сделай дополнительную таблицу для этого отображения.
Не все уровни таблиц можно отображать рекурсивно. Проблема в том, что при обращении процессора к таблицам устанавливаются флаги Accessed, которые допустимы на нижнем уровне, но недопустимы на верхнем. Форматы нижних и верхних каталогов по атрибутам не совпадают.


Последний раз редактировалось Himik 02 апр 2015, 19:38, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Страницы
СообщениеДобавлено: 02 апр 2015, 17:56 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Откуда рыба знает где сети?

Чуть изменяю код и ошибка уже в новом месте. У меня начинает складываться впечатления что я охочусь на призраков.

Как поступать, в таком случае? Всё обложить логами?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Страницы
СообщениеДобавлено: 02 апр 2015, 19:45 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
- Ставить больше сетей
- Поменять способ ловли
- Сменить снасти

Забыл спросить, а что ты вообще делаешь со страницами?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Страницы
СообщениеДобавлено: 02 апр 2015, 23:56 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Да честно не пойму где ошибка. Возможно она не одна.
Предыдущий код валился на LFB. Сейчас на куче.

Это менеджер памяти. При создании кучи выделяется страница и отображается в ВАП.
Ошибка возникает когда эта страница очищается.

В ходе работы механизма отображения. Выясняется что отсутствует каталог страниц. Соответственно для него тоже берётся свободная страница, она отображается в память и очищается.
Для очистки и работы с деревом используется подвижные страницы.
Вот только по чему-то вместо адреса для листа получается адрес каталога страниц.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Страницы
СообщениеДобавлено: 03 апр 2015, 10:56 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Посмотри ещё раз код, может быть asm_invlpg(addr) надо в некоторых местах поставить после каждого изменения в таблицах.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Страницы
СообщениеДобавлено: 03 апр 2015, 11:51 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Наконец-то закончил дебажить. Судя по всему в борще
invlpg не работает. Пришлось заменить на передёргивание cr3


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Страницы
СообщениеДобавлено: 03 апр 2015, 21:20 

Зарегистрирован: 12 май 2012, 14:02
Сообщения: 18
pavia писал(а):
Наконец-то закончил дебажить. Судя по всему в борще invlpg не работает. Пришлось заменить на передёргивание cr3


Слишком серьезное заявление. Без invlpg ни один современный OS не поднимется.
Скорее всего что-то ты не так делаешь.

Станислав


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB