Реклама:

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

Виртуальное адресное пространство разбивается на ряд страниц равного размера, обычно от 512 байт до 64 Кбайт, хотя иногда встречаются страницы по 4 Мбайт. Размер страницы всегда должен быть степенью двойки. Физическое адресное пространство тоже разбивается на части равного размера таким образом, чтобы каждая такая часть основной памяти вмещала ровно одну страницу. Эти части основной памяти называются страничными кадрами. На рис. 6.2 основная память содержит только один страничный кадр. На практике обычно имеются несколько тысяч страничных кадров.

На рис. 6.3, а показан один из возможных вариантов разделения первых 64 Кбайт виртуального адресного пространства на страницы по 4 Кбайт. Адрес может быть байтом, а может быть словом, например, в компьютере, в котором последовательно расположенные слова имеют последовательные адреса. Виртуальную память, изображенную на рис. 6.3, можно реализовать посредством таблицы страниц, в которой количество элементов равно количеству страниц в виртуальном адресном пространстве. Здесь для простоты мы показали только первые 16 элементов. Когда программа пытается обратиться к слову из первых 64 Кбайт виртуальной памяти, чтобы вызвать команду или данные или чтобы сохранить данные, сначала она генерирует виртуальный адрес от 0 до 65 532 (предполагается, что адреса слов должны делиться на 4). Для этого могут использоваться любые стандартные механизмы адресации, в том числе индексирование и косвенная адресация.

На рисунке 6.3, б изображена физическая память, состоящая из восьми страничных кадров по 4 Кбайт. Эту память можно ограничить до 32 К, поскольку: 1) это вся память машины (для процессора, встроенного в стиральную машину или микроволновую печь, этого достаточно) или 2) оставшаяся часть памяти занята другими программами.

Реализация страничной организации памяти

Рис. 6.3. Первые 64 Кбайт виртуального адресного пространства разделены на 16 страниц по 4 Кбайт каждая (а); 32 Кбайт основной памяти разделены на 8 страничных кадров по 4 Кбайт каждый (б)

А теперь посмотрим, как 32-разрядный виртуальный адрес можно отобразить на физический адрес основной памяти. В конце концов, память воспринимает только реальные, а не виртуальные адреса, поэтому такое отображение должно быть сделано. Каждый компьютер с виртуальной памятью содержит устройство для отображения виртуальных адресов на физические. Это устройство называется диспетчером памяти (Memory Management Unit, MMU). Он может находиться на микросхеме процессора или на отдельной микросхеме рядом с процессором. В нашем примере диспетчер памяти отображает 32-разрядный виртуальный адрес на 15-разрядный физический адрес, поэтому ему требуется 32-разрядный входной регистр и 15-разрядный выходной.

Чтобы понять, как работает диспетчер памяти, рассмотрим пример на рис. 6.4. Когда в диспетчер памяти поступает 32-разрядный виртуальный адрес, он разделяет этот адрес на 20-разрядный номер виртуальной страницы и 12-разрядное смещение внутри этой страницы (поскольку страницы в нашем примере имеют размер 4 Кбайт). Номер виртуальной страницы используется в качестве индекса в таблице страниц для нахождения нужной страницы. На рис. 6.4 номер виртуальной страницы равен 3, поэтому в таблице выбирается элемент 3.

Сначала диспетчер памяти проверяет, находится ли нужная страница в текущий момент в памяти. Поскольку у нас есть 220 виртуальных страниц и всего 8 страничных кадров, не все виртуальные страницы могут находиться в памяти одновременно. Диспетчер памяти проверяет бит присутствия в данном элементе таблицы страниц. В нашем примере этот бит равен 1. Это значит, что страница в данный момент находится в памяти.

Реализация страничной организации памяти

Рис. 6.4. Формирование адреса основной памяти из адреса виртуальной памяти

Далее из выбранного элемента таблицы нужно взять значение страничного кадра (в нашем примере - 6) и скопировать его в старшие 3 бита 15-разрядного выходного регистра. Нужно именно 3 бита, потому что в физической памяти находится 8 страничных кадров. Параллельно с этой операцией младшие 12 бит виртуального адреса (поле смещения страницы) копируются в младшие 12 бит выходного регистра. Затем полученный 15-разрядный адрес отправляется в кэшпамять или основную память для поиска.

На рис. 6.5 показан возможный вариант отображения виртуальных страниц на физические страничные кадры. Виртуальная страница 0 находится в страничном кадре 1. Виртуальная страница 1 находится в страничном кадре 0. Виртуальной страницы 2 нет в основной памяти. Виртуальная страница 3 находится в страничном кадре 2. Виртуальной страницы 4 нет в основной памяти. Виртуальная страница 5 находится в страничном кадре 6 и т. д.

Реализация страничной организации памяти

Рис. 6.5. Возможное отображение первых 16 виртуальных страниц в основную память, содержащую 8 страничных кадров

Страничная организация памяти || Оглавление || Вызов страниц по требованию и рабочее множество