OSDev

для всех
Текущее время: 29 апр 2024, 01:59

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




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
СообщениеДобавлено: 07 май 2015, 20:26 

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 07 май 2015, 21:20 
Аватара пользователя

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

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

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


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

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


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

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


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

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