Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 6004.doc
Скачиваний:
21
Добавлен:
30.04.2022
Размер:
1.29 Mб
Скачать

2.6.1.Преобразование виртуального адреса в реальный

Реальный адрес a таблицы загружается в специальный регистр начального адреса таблицы блоков. Таблица содержит по одной строке для каждого блока процесса, причем эти строки идут в порядке возрастания номеров (блок 0, блок 1, ...). Номер блока суммируется с адресом а, образуя реальный адрес строки таблицы для блока b. Эта строка содержит реальный адрес b' блока в реальной памяти. К b' прибавляется смещение d и образуется реальный адрес r=b'+d (рис. 11).

Рис. 11. Преобразование виртуального адреса в реальный

Существует два наиболее распространенных способа реализации виртуальной памяти - страничный и сегментный.

2.6.2.Страничная организация

Виртуальное и реальное адресные пространства делятся на страницы одинаковых размеров - страничные кадры. Виртуальный адрес V=(p,d) содержит номер страницы р и смещение в странице d. Процесс может выполняться, если страница с требуемым адресом находится в реальной памяти. Страничные кадры реальной памяти начинаются с адресов, кратных фиксированному размеру страницы. Страница из V может быть размещена в любом кадре.

Схема преобразования адреса: Процесс обращается по виртуальному адресу V. В таблице отображения ищется номер страницы p и определяется адрес в R страничного кадра p', а затем r, с учетом смещения d. Таблица отображения состоит из элементов, которые содержат номера страниц, в настоящий момент размещенных в памяти. Строка таблицы:

i - бит присутствия страницы в R (0 - нет, 1 - есть); S - адрес страницы во внешней памяти (при i=0); p'- номер страничного кадра в R (при i=1). Адрес R, с которого начинается кадр p' при размере страницы l определяется как r = l*p' + a .

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

Это так называемый метод прямого отображения: каждая таблица отображения содержит столько элементов, сколько требуется выполняемому процессу. Свопинг (загрузка-выгрузка) осуществляется на уровне страниц.

2.6.3.Сегментная организация

Каждый сегмент может иметь тот размер, который необходим для размещения процедуры или структуры данных. Преобразование виртуального адреса в реальный описано ранее. Свопинг при сегментной организации осуществляется целыми сегментами. Смещение d необходимо контролировать, чтобы оно не вышло за границы сегмента.

2.6.4.Странично-сегментная организация

Виртуальный адрес состоит из трех компонент V=(s,p,d), где s - номер сегмента, p - номер страницы в сегменте s, d - смещение в странице p. Преобразование адреса требует две таблицы отображения: таблицу сегментов и таблицу страниц:

1) определяется расположение в памяти таблицы сегментов;

2) по номеру сегмента s отыскивается его дескриптор и определяется базовый адрес таблицы страниц сегмента;

3) Номер страницы p прибавляется к базовому адресу, что позволяет определить дескриптор страницы, а значит и номер страничного кадра в реальной памяти;

4) С учетом смещения d находится реальный адрес.

Такая схема применяется в ОС, которые используют защищенный режим процессора Intel и механизм трансляции страниц, поддерживаемый этим режимом (Windows 9х, Windows NT).

Рис. 12. Двухступенчатая схема преобразования адреса

Линейный адрес выбирается из дескриптора, на который указывает селектор. Линейный адрес представляет собой структуру, состоящую из 3 полей:

· индекса в каталоге таблиц страниц;

· индекса в таблице страниц;

· смещения на странице.

На первом шаге логический адрес, состоящий из 16-разрядного селектора и 32-разрядного смещения преобразуется в так называемый линейный адрес.

В системе может содержаться произвольное количество каталогов таблиц страниц. Адрес каталога, в котором производится поиск, содержится в регистре CR3. Элементами каталога являются дескрипторы, описывающие таблицы страниц. Формат дескриптора:

P - присутствие таблицы страниц в памяти;

W - разрешение записи в страницы;

U - страницы супервизора (0) или пользователя (1);

A - доступ: устанавливается в 1 перед записью или чтением;

D - устанавливается в 1, если была выполнена запись в таблицу;

AVL - зарезервированы за ОС.

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

Устанавливая соответствующим образом биты защиты, операционная система может отметить страницу как доступную для чтения и записи, только для чтения или как недоступную. В поле "Файл страниц" содержится номер файла подкачки, в котором размещена страница. Младшие биты описывают состояние страницы памяти:

· страница находится в переходном состоянии;

· страница обновлена, но не сохранена в файле страниц;

· страница присутствует в памяти.

В дополнение к этим битам система помечает в базе данных страниц состояние каждой физической страницы. Страница может быть отмечена как имеющая одно из следующих состояний:

свободная - доступна для использования после ее заполнения нулями;

заполненная нулями - свободная страница, заполненная нулями и доступная для использования процессами;

правильная - используется активным процессом;

измененная - содержимое страницы было изменено, однако страница еще не сохранена в файле страниц;

запасная - страница удалена из рабочего набора страниц процесса;

плохая - при обращении к странице возникла аппаратная ошибка.

Складывая базовый адрес страницы со смещением, получаем физический адрес.

Вычисление адреса страницы часто называют трансляцией страниц. Трансляция страниц выполняется в том случае, если старший бит CR0 установлен в 1. Если же он сброшен в 0, то адрес из локальной или глобальной таблицы считается базовым, к нему прибавляется смещение и полученный адрес является физическим.