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

Учебное пособие 2109

.pdf
Скачиваний:
8
Добавлен:
30.04.2022
Размер:
6.07 Mб
Скачать

 

 

 

 

 

Конечное распре-

 

 

 

 

 

деление ОП

 

А

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

B

 

 

 

 

 

 

 

 

 

 

E

 

В

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C

 

 

 

 

С

 

 

 

 

 

B

 

 

 

 

 

 

 

 

 

E

 

E

 

 

 

 

 

 

 

 

 

C

 

D

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Начальное

Вводимая

 

или

распреде-

программа

 

 

 

 

 

ление ОП

из ВП

 

 

 

 

Рис. 94. Пример распределения памяти

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

7.8.1. Виртуальная память Принцип виртуальной памяти предполагает, что пользователь при

подготовке своей программы имеет дело не с физической ОП, действительно работающей в составе ЭВМ и имеющей некоторую фиксированную емкость, а с виртуальной (т.е. кажущейся) одноуровневой памятью, емкость которой равна всему адресному пространству, определяемому размером адресных полей в форматах команд и базовых регистров. Так, например, процессор I80386 может управлять виртуальной памятью до 64 Тбайт (терабайт). Это потенциально возможный объем виртуальной памяти, которой может управлять процессор с 32-разрядной ША. Между тем объем виртуальной памяти реальных компьютеров существенно меньше потенциального. Он определяется объемом ВП (жесткого диска), а точнее той ее части, которая выделяется операционной системой для реализации механизма виртуальной памяти. Объем ОП в данном случае не учитывается, поскольку он существенно меньше выделенного объема дисковой памяти (ВП).

Пользователь имеет в своем распоряжении все адресное пространство ЭВМ независимо от объема ее физической памяти (ОП) и объемов памятей, необходимых для других программ, участвующих в мультипрограммной обработке. При этом достигается гибкое динамическое распределение памяти, устраняется ее фрагментация и создаются значительные удобства для работы программиста. В современных ЭВМ все это достигается без

230

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

На всех этапах подготовки программы, включая загрузку в ОП, программа представляется в виртуальных адресах, и лишь при самом исполнении машинной команды производится преобразование виртуальных адресов в реальные адреса физической памяти ЭВМ (их называют еще физическими

адресами или исполнительными).

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

Вновь загружаемая в ОП программа может быть направлена в любые свободные в данный момент физические страницы, независимо от того, расположены они подряд или нет. Не требуется перемещения информации в остальной части памяти. Страничная организация позволяет более рационально осуществлять обмен информацией между ВП и ОП, так как страница программы не должна загружаться до тех пор, пока она действительно не понадобится (имеется в виду, что обмен небольшими блоками информации между ВП и ОП можно осуществить без заметного снижения производительности процессора). Сначала в ОП загружается начальная страница программы, и ей передается управление. Если в процессе обработки программы делается попытка выборки слов из другой страницы, то производится автоматическое обращение к операционной системе, которая осуществляет загрузку требуемой страницы. Так происходит в процессе выполнения всей программы, при этом ненужные модифицированные страницы программы перемещаются из ОП в ВП. Операция замены (замещения) страниц в ОП называется свопингом (swapping), а часть диска, выделенная на нужды виртуальной памяти, – файлом подкачки (swap file). Размер этого файла, а следовательно, и максимальный объем виртуальной памяти конкретной ЭВМ зависят от общего объема жесткого диска и типа установленной операционной системы.

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

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

231

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

 

 

 

 

Страничная

 

Физическая память

 

 

 

 

 

таблица

 

 

 

 

 

 

 

 

 

 

 

Виртуальная

 

 

 

 

 

ОП

ВП

 

 

 

Номер

 

память n-й

 

Тип

 

 

 

 

физической

 

 

0

 

0

программы

 

памяти

 

 

 

 

страницы

 

 

1

 

1

 

 

 

 

 

 

 

 

 

0

 

 

 

ОП

 

5

 

 

2

 

2

 

 

 

1

 

 

 

ОП

 

0

 

 

3

 

3

 

 

 

2

 

 

 

ОП

 

7

 

 

4

 

4

 

 

 

3

 

 

 

ВП

 

4

 

 

5

 

5

 

 

 

4

 

 

 

ВП

 

10

 

 

6

 

6

 

 

 

5

 

 

 

ОП

 

8

 

 

7

 

7

 

 

 

6

 

 

 

ОП

 

9

 

 

8

 

8

 

 

 

7

 

 

 

ОП

 

1

 

 

9

 

9

 

 

 

 

 

 

 

 

 

 

 

 

10

 

10

Рис. 95. Упрощенная схема страничной организации памяти

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

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

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

страницы.

232

 

Виртуальный адрес

 

Номер вир-

Номер

 

туальной

байта

 

страницы

 

 

n

P

L

Рг номера

 

Страничная таблица

программы

N(n, P)

n-й программы

 

 

Номер физической

N(n, P)

L

страницы из стра-

 

 

ничной таблицы

 

 

 

Физический адрес

Рис. 96. Формирование физического адреса

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

Для ускорения преобразования адресов обычно используется небольшая сверхоперативная память, куда передается из ОП страничная таблица активной программы. Кроме того, во внутренней памяти процессора обычно формируется сводная таблица, содержащая сведения о номерах виртуальных и соответствующих физических страниц для нескольких недавно использовавшихся страниц, в том числе принадлежащих разным программам. Так, внутрикристальный кэш процессора I80386 содержит информацию, необходимую для доступа к 32 страницам памяти, к которым недавно выполнялось обращение. В этом варианте сверхоперативная память, используемая при преобразовании адресов, строится как ассоциативная. Обращение к ней идет не по адресу, а по содержанию хранимой в ячейке информации – номеру программы и номеру виртуальной страницы.

233

7.8.2. Сегментно-страничная организация памяти До сих пор предполагалось, что виртуальная память, которой располагает

программист, представляет собой непрерывный массив с единой нумерацией байтов. Такое логическое адресное пространство называют еще плоским или линейным. Между тем программа обычно состоит из нескольких массивовподпрограмм, одной или нескольких секций данных. При программировании длина таких массивов (программных модулей) получается произвольной (различной), поэтому удобно, чтобы каждый массив имел свою собственную нумерацию байтов, начинающуюся с нуля. Желательно также, чтобы составленная таким образом программа могла работать при динамическом распределении памяти, не требуя от программиста усилий по объединению различных ее частей в единый массив. В современных вычислительных системах эта задача решается путем использования особого метода преобразования виртуальных адресов в физические, называемого сегментностраничной организацией памяти.

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

Возникает определенная иерархия в организации программ, состоящая из четырех ступеней: программа-сегмент-страница-байт. Этой иерархии программ соответствует иерархия таблиц, служащих для перевода виртуальных адресов в физические. Программная таблица для каждой программы, загруженной в систему, указывает начальный адрес соответствующей сегментной таблицы. Сегментная таблица перечисляет сегменты данной программы с указанием начального адреса страничной таблицы, относящейся к данному сегменту. Страничная таблица определяет расположение каждой из страниц сегмента в памяти. Страницы сегмента могут располагаться не подряд – часть страниц данного сегмента может находиться в ОП, остальные во внешней памяти.

Следует отметить, что страничная организация памяти, сегментация памяти и разнообразные их комбинации и сочетания возникли в ранних универсальных вычислительных машинах, таких как IBM 360/370. В РС механизм сегментно-страничной адресации появился существенно позднее. Первыми процессорами фирмы Intel, имеющими аппаратную поддержку механизма сегментации памяти, являлись процессоры I80286. Однако наиболее широко защищенный режим (многозадачность, виртуальная память) стал использоваться с появлением 32-разрядных процессоров, в частности процессоров I80386, имеющих аппаратную поддержку механизма сегментно-страничной организации памяти. Такая поддержка позволила разработчикам системного программного обеспечения строить логическое адресное пространство памяти в соответствии с потребностями, определяемыми функциональным назначением ЭВМ. Процессор I80386

234

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

-плоское (линейное) логическое адресное пространство, представляющее собой массив байтов со сплошной нумерацией;

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

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

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

Процессор I80386 поддерживает 16000 сегментов различного объема.

Размер каждого сегмента может достигать 4 Гбайт, что позволяет реализовывать управление виртуальной памятью емкостью до 64 Тбайт (в многозадачном режиме 16000 сегментов – для каждой новой задачи).

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

Виртуальную память можно поделить также на страницы. В отличие от сегментов, для которых допускаются переменные размеры и размещение в ОП, наиболее приемлемые для программных модулей страницы имеют фиксированный размер 4 Кбайт и жесткую привязку к адресам памяти. Страничная организация памяти придает алгоритмам перекачки данных в процедурах размещения, запоминания и поиска более рациональную форму благодаря равномерности распределения блоков памяти в адресном пространстве. В любой программе можно объединить основные принципы каждого из рассмотренных способов управления памятью, если, допустим, логическое адресное пространство разделить на сегменты, а для управления физической памятью применить методы страничной организации. Размер страницы 4 Кбайт хорошо подходит для функционирования операционных систем и для подсистем ВВ дисков, а также обеспечивает хороший коэффициент удачных обращений для внутрикристального кэш страниц. Следует отметить, что с появлением процессоров Pentium возникла возможность

235

поддержки страниц размером 4 Мбайт. Однако при дальнейшем изложении материала размер страницы подразумевается 4 Кбайт.

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

Кроме того, фирмы-изготовители в процессе совершенствования аппаратной части стремятся сохранить преемственность поколений процессоров. Это позволяет использовать в новых моделях программное обеспечение, уже написанное для вычислительных систем, построенных на базе более ранних моделей процессоров, но делает алгоритмы обращения к памяти более консервативными. Такая преемственность достигается в основном двумя путями:

-Созданием новых моделей процессоров, расширенные системы команд которых "накрывают" системы команд прежних моделей. Так, все процессоры фирмы Intel семейства I80х86, в том числе 32-

разрядные (I80386, I80486, Pentium, Pentium Pro), включают в себя как подмножество системы команд и архитектуры нижестоящих моделей, начиная с базовой модели I8088;

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

DOS, включая последние (например, MS DOS 6.22), поддерживали реальный режим, эмулирующий фактически адресное пространство PC/XT.

Для иллюстрации изложенного очень коротко рассмотрим процесс эволюции первых поколений IBM PC.

Как уже отмечалось, первые МП фирмы Intel появились в конце 60-х годов. Затем появились процессоры I8086 и I8088, положившие начало целому семейству МП. Они имели 20-разрядную ША и совершенно идентичную внутреннюю структуру, т.е. имели 16-разрядное АЛУ, но I8086 подключался к 16-разрядной ШД, а I8088 – к 8-разрядной. В 1981 году фирма IBM выпустила свою первую модель IBM PC, построенную на базе процессора I8088. Она имела ОП емкостью 256 Кбайт и два floppy-диска (f-диска) по 160 Кбайт. IBM PC работал под управлением первой версии операционной системы MS DOS-1.00, созданной с расчетом более широких возможностей процессора, в частности прямоадресуемой памяти объемом 1 Мбайт. Под прямоадресуемой памятью понимается то адресное пространство, которое доступно процессору при данной разрядности ША.

Уже в 1981 году фирма IBM начала выпуск более совершенной модели компьютера IBM PC/XT, построенной на базе процессора I8086. Эта модель

236

выпускалась до 1984 года. Она имела ОП емкостью 640 Кбайт, винчестер емкостью 10 Мбайт и два f-диска по 360 Кбайт. Для модели XT была написана вторая версия операционной системы MS DOS-2.00, полностью поддерживающая указанную конфигурацию устройств PC. Эта версия операционной системы явилась "родоначальницей" всех последующих версий MS DOS, под управлением которых работали все последующие модели PC фирмы IBM.

Именно с появлением на рынке модели IBM PC/XT началось массовое внедрение PC в хозяйственную и научную деятельность человека. В результате было наработано огромное количество прикладных программ, возможность использования которых необходимо было предусмотреть в более поздних моделях PC фирмы IBM.

Упрощенная структура прямоадресуемой памяти компьютера IBM PC/XT, работающего под управлением MS DOS-2.00, изображена на рис. 97.

Из структуры следует, что для пользователя была доступна только область прямоадресуемой памяти объемом 640 Кбайт (ОП), из которой непосредственно под прикладные программы отводился участок между адресами 70 Кбайт и 640 Кбайт, т.е. не более 570 Кбайт памяти. Верхняя зона прямоадресуемой памяти между адресами 640 Кбайт и 1024 Кбайт объемом 384 Кбайт отводилась под системные нужды и к ОП не относилась.

1024 К

Системное ПЗУ

 

 

 

 

 

 

Видеоадаптер

384 Кбайт

 

Сетевой адаптер

 

 

640 К

Область

 

 

 

 

 

 

прикладных

570

Кбайт

 

программ

 

 

 

70 К

DOS, драйверы,

 

ОП

 

 

 

 

резидентные

70

Кбайт

 

программы

0 К

 

 

 

 

 

Рис. 97. Упрощенная структура прямоадресуемой памяти PC/XT

Однако очень скоро, особенно с появлением электронных таблиц, такой объем ОП перестал удовлетворять пользователей. Частичное решение проблемы расширения объема ОП было найдено посредством использования плат EMS-памяти, или expanded memory. Первоначально это было физическое устройство в виде отдельной платы с БИС памяти (обычно общим объемом от 2 до 30 Мбайт), устанавливаемой в слот расширения шины ISA. Но процессор не мог обращаться с ней напрямую – не позволяла

237

разрядность ША и существующая операционная система, поэтому для общения процессора с EMS-памятью были использованы свободные от системных программ участки прямоадресуемой памяти в зоне адресов 640К-1024 Кбайт, называемые окнами. При этом процессор не мог общаться с участками EMS-памяти, размер которых превышал размер окна, что было существенным ограничением. Между тем использование EMS-памяти решало многие проблемы, связанные с недостаточным объемом ОП (всего

640 Кбайт).

Так, например, в одной из конфигураций вычислительных систем роль прохода ко всей EMS-памяти играло окно размером 64 Кбайт. Данное окно, называемое также страничным кадром EMS, делилось на страницы размером 16 Кбайт. Страницы такого окна (страничного кадра) могли располагаться в несвязных свободных областях системной памяти (объемом не менее 16 Кбайт) между адресами 640 Кбайт и 1024 Кбайт. Таким образом, окно размером 64 Кбайт содержало в себе 4 страницы. Условно отображение адресного пространства на страницы EMS-памяти можно изобразить схемой, приведенной на рис. 98 (для упрощения рисунка все страницы окна расположены подряд в одной общей свободной зоне системной памяти).

Совершенствование технологии производства СБИС привело к тому, что необходимость в специальной плате EMS-памяти со временем исчезла, поскольку разработанные БИС памяти имели объемы, существенно превышающие объемы плат EMS-памяти, используемые в IBM PC/XT. При этом понятие EMS-памяти сохранилось в последующих моделях компьютеров.

Процессор I80386 имеет 32-разрядную ША и может напрямую обращаться к ОП емкостью 4 Гбайт. Однако вследствие отмеченной уже необходимости использования наработанного ранее программного обеспечения на компьютерах более поздних моделей операционные системы, в частности MS DOS-6.22, предоставляют процессору для прямой адресации только участок ОП размером 1 Мбайт с адреса 0 Кбайт до 1024 Кбайт. Логическая структура такого участка рассматривалась выше. Таким образом, MS DOS- 6.22 фактически эмулировала адресное пространство компьютера IBM PC/XT и предоставляла в распоряжение пользователя ОП объемом только 640 Кбайт. Вся остальная часть физического ОП компьютера (выше адреса 1024 Кбайт) считалась extended memory, на которой средствами MS DOS можно эмулировать EMS (expanded memory) необходимого объема. Общение процессора с EMS-памятью возможно только через окна, расположенные в поле адресов от 640 Кбайт до 1024 Кбайт. Такой подход позволял решать задачи, которые написаны для более ранних моделей компьютеров и "привыкли" использовать EMS-память. Режим процессора в этом случае называется реальным и означает, что в память компьютера, работающего под

238

управлением, например, MS DOS-6.22, невозможно ввести программу, размер которой превышает 640 Кбайт, и она требует сегментации.

1024К Системное ПЗУ

Кадр EMSпамяти (64 Кбайт)

 

16 Кбайт

Расширение

 

 

Память видео-

16 Кбайт

до 32 Мбайт

 

640К адаптера

16 Кбайт

 

ОП

16 Кбайт

 

 

 

 

 

Пространство

 

 

адресов

 

 

прямоадресуем

EMS-память

 

ой

 

 

Рис. 98 Отображение адресного пространства на страницах EMS-памяти

Между тем столь жесткие ограничения на объем ОП в базовых версиях MS DOS совершенно не устраивали многих пользователей, тем более, что в других операционных системах (Unix, OS/2, Windows) их не было. Поэтому для MS DOS разрабатывались дополнительные пакеты программ, расширяющие ее возможности, например DOS для графических библиотек

(DOS 4GL).

7.9. Защита памяти

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

239