> man operating_systems
Модераторы: Roman I Khimov, Wanderer, Dron
Автор Добавил
Dreamer
Вторник 12.07.2005 18:34

ID пользователя #9
Зарегистрирован: Воскресенье 04.07.2004 14:01
Сообщений: 235
Есть несколько вопросов по созданию ОС.

Как осуществлять настройку адресов при использовании страничной адресации?

Что при использовании страничной адресации означает исключение Page Fault? Что после его вызова надо делать?

Жизнь на Линуксе есть!
Наверх
Roman I Khimov
Вторник 12.07.2005 19:25

ID пользователя #1
Зарегистрирован: Воскресенье 27.06.2004 12:37
Местонахождение: Санкт-Петербург
Сообщений: 601
Первое не совсем понял, а по второму - надо что-то делать, например грузить страницу, к которой хочет обратиться несчастный [поток], в память.


Греби и улыбайся!
Наверх
Сайт
captain cobalt
Четверг 14.07.2005 08:00

ID пользователя #12
Зарегистрирован: Воскресенье 04.07.2004 21:44
Местонахождение: /ru/perm
Сообщений: 144
Dreamer написал(а) ...
Что при использовании страничной адресации означает исключение Page Fault?
Происходит при одном из четырёх условий:
-- Обращение к странице со сброшенным битом Present в PDE или PTE.
-- Попытка доступа к супервизорной странице из пользовательского режима.
-- Попытка записать во WriteProtected страницу.
-- Установлен зарезервированный бит в PDE.

Этим условиям соответствуют младшие четыре бита кода ошибки, помещаемого на стек. Обработчик может определить причину.

В регистр CR2 записывается линейный адрес, вызвавший исключение. Обработчик может найти соответствующую таблицу, чтобы модифицировать её (если собирается возобновлять исполнение).

bluebottle.ethz.ch - Bluebottle. Швейцария. Сделано с умом.
Наверх
Сайт
Dreamer
Четверг 14.07.2005 10:25

ID пользователя #9
Зарегистрирован: Воскресенье 04.07.2004 14:01
Сообщений: 235
OK. По первому вопросу. Допустим, что часть программы у нас в первой странице, а вторая - в десятой. Если первая часть программы попытается прочитать что-то из второй части, то обращение на самом деле, как я понимаю, будет вестись не в десятую страницу, а во вторую, так?

Или еще пример. Код загружен в пятую страницу и пытается считать байт по адресу 0x0 (то есть свой собственный код), но обращение, по-идее, происходит в нулевую страницу, что явно нехорошо.

Как быть?

Жизнь на Линуксе есть!
Наверх
Dron
Понедельник 18.07.2005 11:16


ID пользователя #13
Зарегистрирован: Понедельник 05.07.2004 11:16
Местонахождение: Москва
Сообщений: 651
Вообще страничное преобразование для того и служит, чтобы отобразить физические адреса в линейные...

Причем это как бы самый базовый механизм... таблицы сегментов и прерываний читаются уже по линейным адресам.

Вообще я что-то не понимаю... код не может быть абы как... код (если он конечно не PIC) привязан к конкретным адресам. вот на эти конкретные адреса его и нужно мапить!

А нулевые страницы - обычно не мапятся вообще, ибо это скорее всего свидетельствует об ошибке.
в кору.

Одну из двух вечных российских проблем можно, в принципе, решить с помощью асфальтоукладчиков и катков. А вот с дорогами, конечно, будет труднее...

Андрей Валяев
Наверх
Сайт
 

Перейти:     Наверх

Транслировать сообщения этой темы: rss 0.92 Транслировать сообщения этой темы: rss 2.0 Транслировать сообщения этой темы: RDF
Powered by e107 Forum System

© OSRC.info, 2004-2010.
Авторские права на любые материалы, авторы которых явно указаны, принадлежат их авторам. По вопросам публикации таких материалов обращайтесь к авторам.
Авторские права на любые другие материалы принадлежат OSRC.info.
Сайт является помещением библиотеки. Копирование, сохранение на жестком диске или иной способ сохранения произведений осуществляются пользователями на свой риск.
При использовании материалов сайта ссылка на OSRC.info обязательна.