OSDev http://osdev.su/ |
|
Страницы http://osdev.su/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/ |