Rambler's
Top100

Разработка операционных систем. Выпуск 20

Автор: lonesome [TSH/Digital Daemons]
Дата: 26.07.2003
Раздел: Разработка ОС

ПРЕДЫДУЩИЙ ВЫПУСК      СЛЕДУЮЩИЙ ВЫПУСК

Разработка операционных систем

Выпуск 20 от 2003-07-07

Сегодня в номере:

Intro

Новость. После месяца упорной работы вышла в свет версия 0.01 операционной системы Tyros/Neutronix, которая уже является слегка работоспособной системой (это означает, что она может запускать несколько программ с рамдиска :)

Образ дискеты с ОС и исходники вы можете забрать по адресу:
http://sf.net/projects/tyros/

Реализация виртуальной памяти на IA-32 (продолжение)

Как вы помните, в прошлом выпуске мы рассмотрели возможные способы отображения виртуального адресного пространства на физическую память. Но у системы виртуальной памяти есть еще один очень важный компонент - это исключение 11 - несуществующий сегмент и исключение 14 - page fault ака ошибка страничной адресации. Первое из них предназначено для организации виртуальной памяти на уровне сегментов и генерируется при попытке использования сегмента или шлюза, в дескрипторе которого бит P равен 0.

Исключение 14 генерируется в тех случаях, когда процессор не знает как обработать доступ к определенной странице памяти. Тут необходимо отметить, что page fault, хотя он и называется ошибкой, вовсе не является чем-то из ряда вон выходящим - процессор просто сообщает, что доступ нельзя осуществить аппаратными средствами и это придется делать программному обработчику.

При возникновении page fault процессор загружает в регистр CR2 адрес той ячейки памяти, обращение к которой вызвало сбой, а в стек помещает код ошибки, который имеет следующий формат:

Обработчик исключения page fault анализирует код ошибки, вычисляет элемент таблицы/каталога соответствующий послужившему причиной сбоя адресу и в зависимости от этого предпринимает какие-либо действия. Если ему удается исправить ситуацию, то нужный элемент таблицы страниц исправляется (иначе обращение по этому адресу снова вызовет page fault). После возврата из обработчика прерывания управление передается на ту же инструкцию, которая вызвала сбой. Если все в порядке, то процесс сможет продолжать управление

Заметьте, все это происходит прозрачно для процесса!

А теперь рассмотрим алгоритм одного из методов организации виртуальной памяти на IA-32 - demand allocation (выделение по требованию):

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

Я не привожу примеров кода (поскольку для реализации вышеописанных методов в системе уже должна быть серьезная инфраструктура), но самых любопытных отсылаю к исходникам Tyros, а именно:

Outro

На сегодня все, уважаемые подписчики.
Как всегда, мой почтовый ящик открыт для вас:
lonesome@lowlevel.ru
Также вы можете задавать интересующие вас вопросы в форуме lowlevel.ru
Предыдущие выпуски рассылки вы можете найти по этому адресу:
http://subscribe.ru/archive/comp.soft.prog.osdev
А все, исходники, опубликованые в рассылке, располагаются здесь:
http://www.lowlevel.ru/osdev/sources.htm
Всего наилучшего!
Lonesome


[Главная] [Другие статьи] [Обсудить в форуме]
©2003-2004 Lowlevel.RU

Rambler's Top100