OSDev
http://osdev.ru/

Обработка страничного исключения
http://osdev.ru/viewtopic.php?f=6&t=1085
Страница 1 из 1

Автор:  kailot2 [ 07 май 2015, 20:26 ]
Заголовок сообщения:  Обработка страничного исключения

Sup , OSDEV. Собственно вопрос, как обрабатывать страничное исключение? Своп не юзаю , пока что просто выделяю еще одну страницу , соответствующую адресу из cr2. Даже представить не могу , туплю прост , как понять в обработчике , какие флаги присвоить странице (Собственно у меня пока всего два варианта - это USLVLPG и SYSLVLPG) . И вообще какая приблизительно логика работы должна быть?

Автор:  pavia [ 07 май 2015, 21:20 ]
Заголовок сообщения:  Re: Обработка страничного исключения

1) Примерная схема того как это сделано в виндоусе. Я во внутренностях сильно не копался пишу как вижу я.
Страница может выделяться и не выделяться.
Определяется это просто приложения резервирует(анг. Allocate) области памяти (начало и длина). При этом указывает какие флаги должны быть у страницы. Поэтому что приложение запросило то и получит.
Разумеется приложение может запросить только user page.
А sys page может запросить только ядерный процес. А он один "System" с Process.id=0.

При исключения проверяются области памяти если область зарезервирована, то выделяем страницу. Или если она общая то клонируем дескриптор увеличиваем счетчик.
2) Как сделано у меня. Страницы не выделяю. Только исключение.
За выделение отвечает только приложение резервирование идет с флагом commit(рус. Фиксированный). Т.е страницы тут же не только выделяется, но и сразу фиксируется в памяти.

Если страница не выделяется то идет основной цикл обработки исключения. Примерно такой.
Обработка исключений идет по цепочке исключений. Рекусивно. Цепочка строится приложениями которые регистрирует свои обработчики. Некоторые пункты могут отсутствовать.
1) Блоки try except
2) основной обработчик исключений приложения.
3) отладчик пользовательского приложения
4) Приложение доктор ОС.
5) Отладчик ядра
6) Синий экран смерти

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