Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЭВУ 2 семестр / Презентации ЭВУ в пдф / метода моховикова

.pdf
Скачиваний:
35
Добавлен:
31.05.2015
Размер:
4.4 Mб
Скачать

Виртуальный адрес при сегментной организации памяти может быть представлен парой (g, s), где g – номер сегмента, а s – смещение в сегменте.

Физический адрес получается путем сложения начального физического адре-

са сегмента, найденного в таблице сегментов по номеру g, и смещения s.

Недостатком данного метода распределения памяти является фрагмен-

тация на уровне сегментов и более медленное по сравнению со страничной организацией преобразование адреса.

12.7. Странично-сегментное распределение

Как видно из названия, данный метод представляет собой комбинацию страничного и сегментного распределения памяти и, вследствие этого, соче-

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

ные страницы, которые нумеруются в пределах сегмента. Оперативная па-

мять делится на физические страницы. Загрузка процесса выполняется опе-

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

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

гружается в специальный регистр процессора, когда активизируется соответ-

ствующий процесс. На рис. 75 показана схема преобразования виртуального адреса в физический для данного метода.

181

Рис. 75. Схема преобразования виртуального адреса в физический для сегментно-страничной организа-

ции памяти

12.8. Свопинг

Разновидностью виртуальной памяти является свопинг.

На рис. 76 показан график зависимости коэффициента загрузки процес-

сора в зависимости от числа одновременно выполняемых процессов и доли времени, проводимого этими процессами в состоянии ожидания ввода-

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

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

зываемый свопингом. В соответствии с этим методом некоторые процессы

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

смотрения, и при наступлении условий активизации некоторого процесса,

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

ет, то выгружается другой процесс.

182

Рис. 76. За-

висимость за-

грузки процес-

сора от числа задач и интен-

сивности ввода-

вывода

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

ком, т. е. в течение некоторого времени процесс может полностью отсутство-

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

цессов на загрузку и выгрузку, а также различные способы выделения опера-

тивной и дисковой памяти загружаемому процессу.

Поскольку памяти, как правило, не хватает, для выполнения процессов часто приходится использовать диск (рис. 77).

Основные способы использования диска:

Свопинг (подкачка) – процесс целиком загружается

в память для работы.

Виртуальная память – процесс может быть частично

загружен в память для работы.

183

Рис. 77. Иллюстрация свопинга

Как видим, процесс А второй раз загрузился в другое адресное про-

странство, должны создаваться такие условия, которые не повлияют на рабо-

ту процесса. Так как процесс С очень большой, процесс А был выгружен временно на диск, после завершения процесса С он снова был загружен в па-

мять.

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

Свопер – планировщик, управляющий перемещением данных между па-

мятью и диском.

12.8.1. Статический и динамический методы организации свопинга

Статическая область свопинга

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

жен быть не меньше памяти, а в случае нехватки памяти даже больше. Как только процесс завершится, он освободит память и место на диске. На диске всегда есть дубликат страницы, которая находится в памяти (рис. 78, слева).

184

Рис. 78. Методы организации свопинга

Динамическая область свопинга

Предполагается не выделять страницам место на диске, а выделять толь-

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

ждать место на диске. Этот механизм сложнее, так как процессы не привяза-

ны к какому-то пространству на диске, и нужно хранить информацию (карту диска) о местоположении на диске каждой страницы (рис. 78, справа).

12.9. Регистр PDBR

Для того чтобы процессор мог использовать страничное преобразование,

ему необходимо указать адрес начала каталога страниц (дальше он «разбе-

рется» сам). Этот адрес хранится в регистре PDBR – Page Directory Base Register – регистре базы каталога страниц (рис. 79). Функцию этого регистра выполняет регистр управления CR3, т. е. PDBR – это синоним CR3.

185

Рис. 79. Место регистра PDBR при преобразовании линейного адреса в физический

Так как каталог страниц должен быть выравнен на границу 4 Кб, его ад-

рес будет содержать нули в младших 12 разрядах, а 20 старших, следователь-

но, будут нести информацию. Эти 20 разрядов и хранятся в регистре CR3.

Оставшиеся 12 бит в CR3 зарезервированы, за исключением двух битов:

бит 3 – PWT (Write-Thorough) – сквозная запись,

бит 4 – PCD (Cache Control) – контроль кэширо-

вания.

Эти биты будут рассматриваться в разделе «Управление кэшировани-

ем», а пока мы не будем их использовать – они, вместе со всеми остальными

12 зарезервированными битами в CR3, будут устанавливаться в 0. Формат

CR3 приведен на рис. 80.

Рис. 80. Управляющий регистр третьего уровня CR3

186

Для того чтобы загрузить значение в CR3, можно использовать только команду MOV (как и для всех регистров управления). Так как регистры управления – 32-разрядные, то вторым операндом команды MOV должен быть 32-разрядный регистр общего назначения (как правило, это EAX).

Например, установку PDBR можно произвести так:

; Значение адреса должно быть выравнено на границу 4Кб:

mov

eax,Page_Directory_PHysical_Address

mov

cr3,eax

А так можно получить текущее значение PDBR:

mov eax,cr3

12.9.1. Включение страничного преобразования

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

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

. лиц страниц и каталога страниц.

Загрузить адрес начала (т. е. базовый адрес) каталога страниц в CR3.

.

Разрешить в процессоре страничное преобразование.

.

1. Подготовка описаний страниц

Мы будем использовать формат страницы в следующем виде (рис.

81):

Рис. 81. Простой вид элемента PTE

187

Формат элемента PTE (элемент таблицы страниц) будет в следующем виде:

Б

Описание

ит

0

P = 1/0, если страница определена/нет

:

1

R/W = 1/0, если страницу можно писать и читать/только читать

:

2U/S = 0, так как наши примеры пока работают только на нулевом

:уровне привилегий

3

0 (не используются)

–11:

1 Старшие 20 бит физического адреса, на который отображена стра-

2–31: ница.

Как видите, нужно будет устанавливать только биты 0 и 1 в элемен-

тах PDE и PTE, что мы и будем делать примерно следующим образом:

mov

eax,page_address

; Загружаем в EAX выравненный на

;границу 4Кб адрес страницы.

mov

al,3

; Устанавливаем биты 0 и 1 (все остальные

;должны быть равны 0).

mov

PTE_or_PDE,eax ; Записываем готовый элемент PDE или PTE.

В примере к этому параграфу мы будем использовать только первый ме-

габайт адресного пространства, чтобы не перегружать исходник лишними деталями; первый мегабайт гарантированно есть в любом используемом сей-

час компьютере и поэтому не нужно дополнительно определять количество

188

присутствующей физической памяти. В нашем примере мы будем использо-

вать только один элемент каталога страниц – PDE 0, который определит одну таблицу страниц. Этого достаточно, так как таблица страниц может покрыть до 4 Мб адресного пространства.

В таблице страниц мы определим только первые 256 страниц (т. е. эле-

ментов PTE) и зададим им тождественное отображение. Это значит, что ли-

нейные адреса будут совпадать с физическими, и для элемента PTE 0 базо-

вый адрес будет равен 0000 0000h, для PTE 1 – 0000 1000h, PTE 2 – 0000

2000h и т. д.

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

ния.

Все операции по установке элементов PDE и PTE выполняет проце-

дура "set_pages". Эта процедура сбрасывает (т. е. записывает в них нули) все элементы PDE и все PTE в первой и единственной таблице страниц. Затем она устанавливает первый элемент каталога страниц (PDE 0), в котором ука-

зывает адрес таблицы страниц и, наконец, устанавливает первые 256 PTE в

таблице страниц. В качестве указателя на каталог страниц используется со-

держимое переменной Page_Directory, которая записывается другой проце-

дурой set_PDBR.

set_pages proc near

; Установка каталога страниц, PDE 0 и тождественного отображения страниц

для

;первого мегабайта.

mov

ax,Data_selector

 

mov

es,ax

 

mov

di,Page_Directory

; ES:DI = указатель на каталог страниц.

189

xor

eax,eax

 

 

 

 

mov

cx,1024 + 1024

;

Очистка

двух страниц

памяти (по 4 Кб).

cld

 

 

 

 

 

push

di

 

 

 

 

rep

stosd

;

Очищаем

все элементы

каталога страниц

;(PDE 0–1023) и всю первую таблицу

;страниц (соответствующую элементу PDE 0).

pop di

mov

eax,cr3 ; EAX = адрес начала каталога страниц.

add

eax,4096

; Первая таблица

страниц (PDE 0) будет

 

 

;

располагаться

сразу за

каталогом страниц.

mov

al,3

; Флаги PDE: P

=

1, R/W =

1

stosd

 

;

Записали PDE

0

 

 

add

di,4096 - 4

; Переходим к таблице страниц

xor

eax,eax ; Начнем с адреса 0

mov

al,3

; Флаги PTE: P = 1, R/W = 1

mov

cx,256

; Установим 256 страниц (они покроют

 

 

; первый мегабайт физической памяти).

spag_1:

 

 

stosd

 

 

add

eax,4096

 

loop

spag_1

 

ret

endp

2. Загрузка базового адреса каталога страниц в CR3

Вообще говоря, загрузка регистра CR3 должна проводиться после того, как будет определена вся используемая структура страниц, но на самом деле не имеет значения, когда вы запишите в CR3 базовый адрес каталога страниц – до тех пор, пока в процессоре не будет разрешено страничное пре-

образование, этот регистр также не будет использоваться.

190