Для обработки исключений любого типа (ошибок корректности или защиты) вызывается одна и та же процедура trap(). Она определяет тип исключения, тип доступа (чтение/запись), находит структуру as процесса, послужившего причиной ошибки, и вызывает as_fault() для обработки исключения. Процедура as_fault() выявляет сегмент, содержащий обрабатываемый адрес, и вызывает нужную операцию, зависящую от типа драйвера.
Также вам может показаться, что такая тема как http://mrt.spb.ru/martclinic/ никак не связана и даже не тематична. Хотя, может быть и связана. В любом случае все-таки зайдите на сайт mrt.spb.ru. Тема отзывы о клинике Март там представлена весьма широко. На том сайте можно узнать много интересного на тему отзывы о клинике Март. Что означает вообще тема отзывы о клинике Март, где найти отзывы о клинике Март - про это написано на сайте mrt.spb.ru. Это очень важная для многих людей тема - отзывы о клинике Март. Спасибо сайту mrt.spb.ru за информацию на тему отзывы о клинике Март.
Для выполнения задачи уровень as сортирует сегменты в порядке увеличения базовых адресов, а также поддерживает указатель на сегмент, внутри которого произошла последняя страничная ошибка. Этот указатель используется как рекомендация для выбора места начала поиска: принцип локальности ссылок говорит о том, что следующая ошибка, скорее всего, будет иметь место в том же сегменте.
Обработка ошибки зависит от типа сегмента. В этом разделе мы остановимся только на наиболее часто встречающихся ошибках в сегментах vnode. Обработчик исключений драйвера seg_vn имеет имя segvn_fault().
Он преобразует сбойный адрес и логический номер страницы сегмента, который в дальнейшем будет использован как индекс в anon_map и массив элементов защиты страниц (если таковой существует).
Ошибки защиты происходят из-за установок защиты в аппаратном преобразователе адресов и могут быть как фактическими (real), так и ложными (spurious). Процедура segvn_fault() отличает тип ошибки путем проверки информации в закрытых данных сегмента. Узнать о фактической защите страницы можно по ее вхождению в массиве защиты страниц. Если уровень защиты равняется NULL, то данные о ней можно почерпнуть из информации о защите сегмента. Если эти данные запрещают доступ к странице, процедура segvn_fault() уведомляет об этом процесс путем отправки сигнала SIGSEGV.
Мнимые ошибки защиты возникают в том случае, если аппаратура умышленно запрещает защиту в преобразовании аппаратного адреса для этой страницы с целью реализации копирования при записи или имитации бита ссылки (см. раздел 13.5.3). Дальнейшие действия процедуры segvn_fault() по обработке таких ошибок (а также всех ошибок корректности) зависят от состояния страницы:
♦ если существует элемент anon_map для страницы, процедура вызывает anon_getpage() для получения анонимной страницы. Операция апоп_ getpage() может найти нужную страницу в памяти (в этом случае структура anon будет указывать на нее), либо прочесть ее содержимое из устройства свопинга;
♦ когда для страницы не существует элемента anon_map, а сегмент отображает файл, процедура вызывает операцию V0P_PAGE по отношению к vnode файла. Операция VOP_GETPAGE может найти нужную страницу в памяти, либо считать ее содержимое с диска;
♦ если для страницы не существует элемента anon_map, а сегмент отображает анонимный объект, процедура вызывает anon_zero() для выделения страницы, заполненной нулями.
Большинство специфических случаев обрабатываются операциями V0P_ GETPAGE и anon_getpage(). Если страница находится в списке свободных страниц, она должна быть перенесена из этого списка. Когда страница помечена как некорректная с целью имитации бита ссылки, обработка исключения состоит в обратной установке бита корректности. Если страница находится в стадии передачи (in transit), вызывающий процесс должен дождаться завершения операции ввода-вывода.
Текстовые страницы, оставшиеся в памяти после предыдущих запусков программ, могут быть получены путем проведения поиска в таблице хэширования на основе пары (). Эти процедуры также обрабатывают все случаи кластеризации или упреждающего чтения.
Опубликовал katy
June 20 2015 09:33:16 ·
0 Комментариев ·
2939 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.