
ЭВУ 2 семестр / Презентации ЭВУ в пдф / метода моховикова
.pdfВиртуальный адрес при сегментной организации памяти может быть представлен парой (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