Способ построения ВАП процессов
В ОС используется несколько способов построения ВАП, которые можно разбить на две группы:
1. Построение ВАП в виде единого непрерывного (неструктурированного) участка логической памяти;
2. Создание ВАП в виде структурированной области логической памяти или нескольких участков этой памяти.
В первом случае, ВАП процесса представляется в виде непрерывной линейно возрастающей или убывающей последовательности логических адресов. Такую структуру называют плоской структурой, или иначе – плоской моделью памяти. Виртуальным адресом любого элемента информации является целое неотрицательное число, представляющее собой адресное расстояние (смещение) отсчитываемое, обычно, от начального (нулевого) адреса всего ВАП.
Обычно, смещение количественно измеряется в байтах, то есть минимально адресуемых единицах памяти. Виртуальный адрес этого типа называется иначе линейным адресом.
При использовании второго способа построения ВАП, все виртуальное пространство может делиться либо на равновеликие участки, либо неравновеликие участки.
В связи с этим, возможны два варианта структуризации:
1. Деление осуществляется на участки, называемые страницами памяти. В этом случае выполняется страничная структуризация ВАП. Принимается, что все ВАП представляет собой множество N страниц памяти, объемом V каждая. Размер страницы в системе фиксирован, и определяется характеристиками системы адресации компьютера. Например, в Windows, для 32-битной адресации, V=4096 байт, а для 64 – 8192 байта. Все страницы ВАП нумеруются подряд, и положение любого информационного элемента задается виртуальным адресом - Av=P+d, где P – номер страницы, а d – смещение на странице.
2. Все пространство ВАП делится на участки неодинакового размера, называемые в разных системах сегментами или разделами. Этот способ построения ВАП называется сегментной структуризацией. Все сегменты нумеруются подряд, виртуальный адрес элемента информации здесь также задается двумя компонентами: S – номер сегмента, dv – смещение от начала сегмента. При этом, размер любого сегмента может существенно превышать размер страницы в случае страничной организации.
Обычно, в сегментах хранится различная по содержанию информация, например, программные коды хранятся в программном сегменте. Данные хранятся в сегменте данных. Для стека предоставляется также отдельный сегмент.
В некоторых системах, в частности, в Windows, используется еще более сложный способ структуризации ВАП, представляющий собой комбинацию сегментной и страничной структуризации. В этом случае, также возможно несколько вариантов построения ВАП. В одном из них, все виртуальное пространство делится на страницы, которые нумеруются подряд в пределах ВАП. В пространстве выделяются сегменты, каждый из которых может состоять из нескольких страниц. Виртуальный адрес Av=(S, P, dv), где S – номер сегмента, P – номер страницы данного сегмента от начала ВАП, а dv – смещение на странице.
Во втором варианте сегментно-страничной организации все ВАП делится на сегменты, а каждый сегмент – на страницы. В отличие от первого варианта, нумерация страниц выполняется здесь не в пределах всего ВАП, а в пределах каждого сегмента. Av=(S, P, dv), где P – это номер страницы в пределах данного сегмента.
Вне зависимости от способа структуризации ВАП, важной функцией подсистемы управления памятью является отображение адресов ВАП процесса на общее ФАП ЭВМ. При этом, может отображаться либо все ВАП процесса, либо только отдельная его часть, например, отдельный сегмент, страница, или даже отдельный адрес Av в Af, который принадлежит ФАП.
Процедура преобразования виртуальных адресов в физические адреса, реализующая указанное отображение, зависит от способа структуризации ВАП, и структуры ФАП. Эта процедура может быть выполнена двумя принципиально отличающимися способами:
1. Статическое преобразование ВАП в ФАП;
2. Динамическое преобразование ВАП в ФАП.
В первом случае, замена виртуальных адресов на физические выполняется только один раз для каждого процесса во время начальной загрузки его программ и данных в память. Во многих системах в этом случае используется специальная системная программа, которая называется перемещающим загрузчиком. Перемещающий загрузчик на основании информации о начальном адресе A0 физической памяти, в который будет загружаться программа, а также с использованием информации, поступающей от компилятора или ассемблера (разновидность транслятора, преобразующая программный код, написанный на языке ассемблера во внутреннее машинное представление) о всех адресно-зависимых элементах программы, вычисляет адреса этих элементов в ФАП, и выполняет запись элементов информации по этим адресам. В результате, осуществляется загрузка программ и данных в ФП, которая совмещается с заменой логических адресов физическими.
Если используется плоская модель ВАП и ФАП, то физический адрес Af = A0+Av.
При динамическом преобразовании ВАП в ФАП, во время выполнения программы преобразование адресов AvàAf осуществляется при каждом обращении к памяти, когда в процессоре вырабатывается адрес Av. В случае плоской модели памяти, физический адрес получается таким же образом – Af=A0+Av. В случае страничной, сегментной, или сегментно-страничной структуризации ВАП, преобразование адресов реализуется сложными способами, в которых используется создаваемые операционной системой структуры данных: таблицы страниц и таблицы сегментов.
Второй способ считается более эффективным, поскольку меняя A0, можно разместить программы и данные выполняющегося процесса в любое свободное место ФП. Этот способ имеет один относительный недостаток: каждое преобразование адресов требует дополнительных затрат времени процессора, что приводит к снижению скорости выполнения программы.
В отдельных случаях, как правило – в специализированных системах, может быть заранее известно, в какой области ФП будет размещаться программа. Если эта область не меняет своего положения в ходе выполнения программы, то транслятор позволяет получить программные коды сразу в физических адресах. При этом, преобразование ВАП в ФАП может не потребоваться, либо может быть выполнено для случая плоской модели памяти.