Лекция: Виртуальная память и ее реализация. Сегментно-страничная организация памяти и динамическое преобразование адресов. Механизм замещения страниц.
В мультипрограммных системах размещение всех исполняемых программ полностью в ОП во многих случаях невыполнимо: программы часто имеют большую длину, а емкости существующих ОП ограниченны. Однако нет принципиальной необходимости в том, чтобы вся программа находилась в ОП, так как в любой момент времени работа программы концентрируется на определенных сравнительно небольших участках. Таким образом, в ОП следует хранить только используемые в данный период части программ, а неиспользуемые части могут располагаться в ВЗУ. Программируя свою программу, пользователь не знает, в комбинации с какими программами будет выполняться его программа, какое место в памяти отведет ей операционная система.
При подготовке программ используются условные адреса. Позднее в процессе выполнения программы операционная система выделяет активным частям программы место в памяти, и условные адреса переводятся в исполнительные. Эта процедура получила название динамического распределения памяти.
Осуществление динамического распределения чисто программным путем привело бы к значительным потерям машинного времени. Целесообразнее пользоваться для этой цели аппаратурными средствами.
Один из способов динамического распределения памяти основан на использовании базовых регистров. Операционная система каждой пользовательской программе ставит в соответствие свой базовый адрес. Базовые адреса обрабатываемых программ находятся в общих регистрах. При выполнении программы реальный или физический адрес образуется суммированием базового и относительного адресов. При динамическом распределении памяти с помощью базовых регистров программа (или, по крайней мере, та часть ее, адрес которой преобразуется с помощью одного и того же базового адреса) должна располагаться в последовательных ячейках и вводиться в ОП целиком, хотя в ближайшем цикле активности может потребоваться лишь небольшой фрагмент программы.
При рассматриваемом способе динамического распределения памяти свободная память может состоять из несвязанных областей (фрагментация памяти) и для ввода нужной программы может понадобиться сдвиг содержимого памяти. На рис. 14.7, а показано распределение памяти между программами А, В, С, D, из которых две (А и D) являются в данный момент наименее активными и следовательно, могут рассматриваться как кандидаты на удаление во внешнюю память. Если вновь вводимая программа Е (рис. 14.7, б) больше любой из программ А и D, то для ее размещения в памяти необходимо, как показано на рис. 14.7, а, сдвигать программы В и С. Это перемещение связано с потерей времени. Более того, в ряде систем подобное перемещение требует выполнения заново операции редактирования связей в программе и новой загрузки программы.
Отмеченные недостатки в распределении памяти отсутствуют в виртуальной памяти со страничной, организацией.
Виртуальная память есть способ организации памяти мультипрограммной вычислительной системы, при котором достигается гибкое динамическое распределение памяти, устраняется ее фрагментация и создаются значительные удобства для работы программистов. Это удается достигнуть без заметного снижения операционной системы и процессов их функционирования.
Принцип виртуальной памяти предполагает, что пользовать при подготовке своей программы имеет дело не с физической ОП, действительно работающей в составе вычислительной установки и имеющей некоторую фиксированную емкость, с виртуальной (т. е. кажущейся) одноуровневой памятью, емкость которой равна всему адресному пространству, определяемому размером адресных полей в форматах команд и базовых регистров. В ЕС ЭВМ это пространство составляет 777 216 байт.
Пользователь имеет в своем распоряжении все адресное пространство системы независимо от объема ее физической памяти и объемов памятей, необходимых для других программ, участвующих в мультипрограммной обработке. На всех этапах подготовки программ, включая загрузку оперативную память, программа представляется в виртуальных адресах, и лишь при самом исполнении машинной команды производится преобразование виртуальных адресов в реальные адреса действующей памяти (в так называемые физические адреса).
Преобразование виртуальных адресов в физические упрощается, и устраняется фрагментация памяти, если физическую и виртуальную память разбить на блоки, называемые в этом случае страницами и содержащие одно и то же число байт. Страницам виртуальной и физической памяти присваивают номера, называемые номерами соответственно виртуальных и физических страниц. Каждая физическая страница способна хранить одну из виртуальных страниц. Порядок расположения (нумерация) байт в виртуальной и физической страницах сохраняется одним и тем же.
В мультипрограммной системе страничная организация памяти дает определенные преимущества. Когда новая программа загружается в ОП, она может быть направлена в любые свободные в данный момент физические страницы независимо от того, расположены они подряд или нет. Не требуется перемещения информации в остальной части памяти. Страничная организация позволяет сократить объем передачи информации между внешней памятью и ОП, так как страница программы не должна загружаться до тех пор, пока она действительно не понадобится. Сначала в ОП загружается начальная страница программы, и ей передается управление. Если по ходу работы делается попытка выборки слов из другой страницы, то производится автоматическое обращение к операционной системе, которая осуществляет загрузку требуемой страницы.
На рис. 14.8 показано соответствие между виртуальной и физической памятями, устанавливаемое страничной таблицей, причем видно, что физические страницы могут содержаться в текущий момент времени как в оперативной, так и во внешней памяти. Страничная таблица для каждой программы формируется операционной системой в процессе распределения памяти и перерабатывается ею каждый раз, когда в распределении памяти производятся изменения. Процедура обращения к памяти состоит в том, что номер виртуальной страницы извлекается из адреса и используется для входа в страничную таблицу, которая указывает номер соответствующей физической страницы. Этот номер вместе с номером байта, взятым непосредственно из виртуального адреса, представляет собой физический адрес, по которому происходит обращение к ОП.
Если страничная таблица указывает на размещение требуемой информации во внешней памяти, то обращение к ОП не может состояться немедленно: операционная система должна организовать передачу из внешней памяти в ОП нужной страницы.
Для каждой из программ, обрабатываемых в мультипрограммном режиме, организуется своя виртуальная память и создается своя страничная таблица, при этом все программы делят между собой одну общую физическую память.
Страничные таблицы программ хранятся в ОП, и обращение к нужной строке активной страничной таблицы в ОП происходит по адресу, который определяется номером активной программы и номером виртуальной страницы (рис. 14.8).
Для ускорения преобразования адресов используется небольшая сверхоперативная память, куда передается из ОП страничная таблица активной программы. В другом варианте в сверхоперативной памяти могут находиться сведения о номерах виртуальных и соответствующих физических страниц для нескольких недавно использовавшихся страниц, в том числе принадлежащих разным программам. В этом варианте сверхоперативная память, используемая при преобразовании адресов, строится как ассоциативная с обращением не адресным, а по содержанию хранимой в ячейке информации — в данном случае по хранимому в ячейке номеру программы к номеру виртуальной страницы.
Сегментно-страничная организация памяти. До сих пор предполагалось, что виртуальная память, которой располагает программист, представляет собой непрерывный массив с единой нумерацией байт. Однако программа обычно состоит из нескольких массивов — подпрограмм, одной или нескольких секций данных. Так как заранее длины этих массивов неизвестны, то удобно, чтобы при программировании каждый массив имел свою собственную нумерацию байт, начинающуюся с нуля и продолжающуюся в возрастающем порядке. Желательно также, чтобы составленная таким образом программа могла работать при динамическом распределении памяти, не требуя от программиста усилий по объединению различных ее частей в единый массив. Эта задача решается в некоторых вычислительных системах путем использования особого метода преобразования виртуальных адресов в физические, называемого сегментно-страничной организацией памяти.
Виртуальная память каждой программы делится на части, именуемые сегментами, с независимой адресацией байт внутри каждой части. К виртуальному адресу следует добавить дополнительные разряды левее номера страницы; эти разряды определяют номер сегмента.
Возникает определенная иерархия в организации программ, состоящая из четырех ступеней: 1) программа, 2) сегмент, 3) страница, 4) байт. Этой иерархии программ соответствует иерархия таблиц, служащих для перевода виртуальных адресов в физические. Программная таблица для каждой программы, загруженной в систему, указывает начальный адрес соответствующей сегментной таблицы. Сегментная таблица перечисляет сегменты данной программы с указанием начального адреса страничной таблицы, относящейся к данному сегменту. Страничная таблица определяет расположение каждой из страниц сегмента в памяти. Страницы сегмента могут располагаться не подряд, часть страниц данного сегмента может находиться в оперативной памяти, остальные — во внешней.
Рассмотрим с некоторыми упрощениями организацию сегментно-страничной виртуальной памяти, реализованной в машинах ЕС ЭВМ II очереди.
В этой системе работа с виртуальной памятью возможна только в режиме расширенного управления (ССП [12] =1).
Сегмент представляет собой блок последовательных адресов размером 64 Кбайт или 1 Мбайт, размер страницы 2 или 4 Кбайт. Начальные адреса сегментов и страниц кратны их размерам. Размеры сегментов и страниц виртуальной памяти активной в данный момент программы задаются значениями соответствующих разрядов управляющего регистра 0.
Виртуальный адрес (как и физический) имеет длину 24 разряда, причем поле номера сегмента занимает 8 или 4 старших разряда соответственно для сегментов размером 64 Кбайт и 1 Мбайт, поле номера байта занимает 11 или 12 младших разрядов для страниц размером 2048 и 4046 байт. Промежуточные разряды адреса занимает поле номера страниц, которое может иметь 4, 5, 8 или 9 разрядов в зависимости от размеров сегмента и страницы.
Сегментные и страничные таблицы находятся в ОП, а в программной таблице нет необходимости, так как для каждой активной в данный момент программы управляющий регистр 1 хранит начальный адрес и длину соответствующей сегментной таблицы. Хранит он также номер программы.
Процесс преобразования адресов представлен на рис. 14.9. В общем случае преобразование адреса происходит в два этапа и требует двух дополнительных обращений к ОП (рис. 14.9, а).
Первый этап. Начальный адрес сегментной таблицы, установленный в управляющем регистре 1, суммируется с номером сегмента из виртуального адреса. В результате образуется адрес, по которому из ОП считывается строка сегментной таблицы, содержащая адрес начала и длину страничной таблицы для данного сегмента.
Второй этап. Полученный адрес начала страничной таблицы суммируется с номером страницы из виртуального адреса, при этом образуется адрес, по которому из ОП считывается строка страничной таблицы. Если эта страница оказывается в ОП, то в старшие разряды регистра физического адреса передается ее номер, а в младшие заносится номер байта из регистра виртуального адреса. Формирование физического адреса на этом завершается.
Если нужная физическая страница оказывается во внешней памяти, то происходит прерывание по страничному сбою. Операционная система инициирует передачу этой страницы из внешней памяти в ОП (при этом меняется номер физической страницы) и корректирует соответствующим образом страничную таблицу, находящуюся в оперативной памяти. В старшие разряды регистра физического адреса передается новый номер физической страницы, а в младшие — номер байта. Физический адрес сформирован.
Выполняется запрошенное программой обращение к ОП. Одновременно информация о текущей странице (номерах программы, сегмента, виртуальной и соответствующей физической страницы) помещается в сверхоперативную ассоциативную память или в блок быстрой переадресации (ББП) небольшой емкости.
Ассоциативная память (ББП) хранит указанные данные для небольшого числа недавно использовавшихся страниц. Так, в ЭВМ ЕС-1045 ББП представляет собой память на интегральных микросхемах емкостью 128 слов с временем выборки 25—30. Блок быстрой переадресации может обслуживать одновременно до 3 программ, другими словами, до трех виртуальных памятей.
При наличии ассоциативной памяти (ББП) значительно ускоряется процесс преобразования адресов, так как на каждом участке вычислительного процесса обращения к ОП сосредоточиваются на небольшом числе страниц, и поэтому имеется большая вероятность, что текущее обращение произойдет к странице, информация о которой уже имеется в ассоциативной памяти (ББП), а следовательно, возможно быстрое преобразование адресов без дополнительных обращений к ОП.
Преобразование адресов всегда начинается с просмотра ассоциативной памяти (ББП), и если оказывается, что в одной из ее строк (ассоциативном регистре) хранится информация о странице, к которой должно произойти обращение, то из этой строки непосредственно выбирается номер физической страницы и дополнительные обращения к ОП (к сегментной и страничной таблицам) не производятся (рис. 14.9,6).
Если нужной информации нет в ассоциативной памяти (ББП), то делается попытка сократить время преобразования путем исключения одного дополнительного обращения к ОП (первый этап на рис. 14.9, а). Может оказаться, что страница, к которой происходит обращение, принадлежит сегменту предыдущего обращения к ОП. В аппаратуре преобразования адресов сохраняются номер сегмента и адрес начала его страничной таблицы для предыдущего обращения. Если совпадают номера сегментов текущего и предыдущего обращений, первый этап преобразования исключается, используется сохраненный адрес начала сегментной таблицы и выполняется только второй этап преобразования, т. е. производится только одно дополнительное обращение к ОП. Если номера сегментов не совпадут, реализуется полная процедура преобразования адресов, показанная на рис. 14.9, а.
Дополнительные обращения к ОП сопровождаются занесением информации о текущей странице в ассоциативную память (ББП). Если в ассоциативной памяти (ББП) не оказывается свободного регистра (строки), данные о новой странице записываются на место данных, которые дольше других не использовались в процессе преобразования адресов.