Физическая и математическая память. Способы организации математической памяти. Сегментное распределение памяти

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

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

· свопинг;

· виртуальная память.

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

Виртуальная память может быть представлена 3 способами:

1) страничная: перемещение данных организовывается страницами фиксированного (небольшого) размера (1Kb, 4 Kb);

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

3) сегментно-страничная: используется двухуровневое деление памяти: сначала все адреса пространства делятся на сегменты, а потом каждый сегмент делится на страницы. Единица перемещения – страница.

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

a. базовый физический адрес сегмента в оперативной памяти,

b. размер сегмента,

c. правила доступа к сегменту,

d. признаки модификации, обращения, присутствия.

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

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

дескрипторов сегментов задачи. Каждая задача имеет свою таблицу сегментов. Достаточно часто эти таблицы называют таблицами дескрипторов сегментов, поскольку по своей сути элемент таблицы описывает расположение сегмента. Таким образом, виртуальный адрес для этого способа будет состоять из двух полей — номера сегмента и смещения относительно начала сегмента. Итак, каждый сегмент, размещаемый в памяти, имеет соответствующую информационную структуру, часто называемую дескриптором сегмента. Именно операционная система строит для каждого исполняемого процесса соответствующую таблицу дескрипторов сегментов, и при размещении каждого из сегментов в оперативной или внешней памяти отмечает в дескрипторе текущее местоположение сегмента. Если сегмент задачи в данный момент находится в оперативной памяти, то об этом Делается пометка в дескрипторе. Как правило, для этого используется бит присутствия Р (от слова ≪present≫). В этом случае в поле адреса диспетчер памяти записывает адрес физической памяти, с которого сегмент начинается, а в поле длины сегмента (limit) указывается количество адресуемых ячеек памяти. Это поле используется не только для того, чтобы размещать сегменты без наложения друг на друга, но и для того, чтобы контролировать, не обращается ли код исполняющейся задачи за пределы текущего сегмента. В случае превышения длины сегмента вследствие ошибок программирования мы можем говорить о нарушении адресации и с помощью введения специальных аппаратных средств генерировать сигналы прерывания, которые позволят фиксировать (обнаруживать) такого рода ошибки.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: