OSDev
http://osdev.ru/

Страницы
http://osdev.ru/viewtopic.php?f=6&t=1072
Страница 1 из 2

Автор:  pavia [ 01 апр 2015, 18:37 ]
Заголовок сообщения:  Страницы

Почему-то не отображается страница. Не пойму это что баг борща или что?
Вроде страницы ссылаются на одно и тоже но цифры не совпадают.

Цитата:
<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!

Автор:  Himik [ 01 апр 2015, 19:22 ]
Заголовок сообщения:  Re: Страницы

В конце, на 7 шаге повтори шаги 3-6 и посмотри изменения, может Bochs затирает чего-нибудь.
Я так обычно не трассирую, использую режим "trace-mem on", и когда инструкция читает память, то отладчик распечатывает страничные индексы таблиц.

Автор:  pavia [ 01 апр 2015, 19:33 ]
Заголовок сообщения:  Re: Страницы

Да затирает. На watch выловил. Осталось понять почему затирает.

Автор:  Himik [ 01 апр 2015, 23:03 ]
Заголовок сообщения:  Re: Страницы

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

Автор:  pavia [ 02 апр 2015, 17:56 ]
Заголовок сообщения:  Re: Страницы

Откуда рыба знает где сети?

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

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

Автор:  Himik [ 02 апр 2015, 19:45 ]
Заголовок сообщения:  Re: Страницы

- Ставить больше сетей
- Поменять способ ловли
- Сменить снасти

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

Автор:  pavia [ 02 апр 2015, 23:56 ]
Заголовок сообщения:  Re: Страницы

Да честно не пойму где ошибка. Возможно она не одна.
Предыдущий код валился на LFB. Сейчас на куче.

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

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

Автор:  Himik [ 03 апр 2015, 10:56 ]
Заголовок сообщения:  Re: Страницы

Посмотри ещё раз код, может быть asm_invlpg(addr) надо в некоторых местах поставить после каждого изменения в таблицах.

Автор:  pavia [ 03 апр 2015, 11:51 ]
Заголовок сообщения:  Re: Страницы

Наконец-то закончил дебажить. Судя по всему в борще
invlpg не работает. Пришлось заменить на передёргивание cr3

Автор:  stlw [ 03 апр 2015, 21:20 ]
Заголовок сообщения:  Re: Страницы

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


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

Станислав

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/