Виртуальная память


«Виртуальным (virtual) называется ресурс, который пользовательской программе представляется обладающим свойствами отличными от тех, что она действительно имеет» [Бек].

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

Перевод виртуальных адресов в реальные называется динамическим преобразованием адресов.

Поскольку физическая память разделена на страницы, то удобно отображать виртуальную память на физическую постранично. Для каждого процесса в операционной системе имеется своя таблицы отображения страниц PMTPage Map Table.

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

При «выталкивании» страницы из оперативной памяти она переписывается во внешнюю память только если она была модифицирована с момента загрузки. Информация о факте модификации страницы также хранится в таблице отображения страниц.

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

Еще один пример алгоритма выбора выталкиваемой страницы – метод выталкивания дольше всего не использованной страницы LRULeast Recently Used. Для применения этого метода фиксируются времена последнего обращения к странице и выталкивания выбирается та страница, к которой дольше всего не было обращений.



Реализация виртуальной памяти в процессоре ARM


1. Преобразование виртуального адреса в модифицированный виртуальный адрес


ARM поддерживает аппаратное переключение контекстов процессов. Для этого используется регистр 13 сопроцессора CP15, названный FCSE (Fast Context Switch Extension) PID (Process Identifier) (см. Рис. 1).

Биты 31:25 регистра 13 CP15 содержат идентификатор процесса: FCSE PID.

При обращении процессора к ячейке памяти с виртуальным адресом VA в диапазоне 0 - 32 MB вызывает преобразование этого адреса в модифицированный виртуальный адрес MVA.

Адрес MVA вычисляется по формуле:


MVA = VA + (FCSE_PID * 32 MB)


Модифицированный виртуальный адрес используется в MMU и в кэш-памяти.


Рисунок 1. Вычисление виртуального адреса по виртуальному адресу процесса



2. Возможности MMU:


- маппирование диапазонов, доменов и схема защиты доступа;

- диапазон маппирования: 1 MB (секции), 64KB (большие страницы), 4KB (малые страницы), 1KB (tiny - крошечные страницы).

- разрешение доступа к секциям;

- разрешение доступа к большим и малым страницам – на уровне подстраниц (четверти страниц);

- 16 доменов, реализованных аппаратно;

- возможность задания 64 буферов для инструкций и 64 буферов для данных в TLB;

- аппаратное переключение страниц;

- round-robin (циклический) алгоритм вытеснения страниц;

- возможность выключить все TLB посредством регистра сопроцессора (регистр 8);

- возможность выключить буфер TLB, выбранный MVA, посредством регистра сопроцессора (регистр 8);

- независимый захват TLB инструкций и TLB данных посредством регистра сопроцессора (регистр 10).


Регистр

Номер

Биты

Описание

Control

1

M,A,S,R

Bit M – включить MMU;

A – включить проверку выравнивания адресов данных;

S,R – управление схемой защиты доступа

Translation table base

2

31:14

Содержит физический адрес таблицы трансляции в основной памяти. Адрес должен быть кратен 214

Domain access control

3

31:0

Содержит 16 2-битовых полей. Каждое поле определяет атрибуты доступа к одному из 16 доменов (D15-D0)

Fault status

5 (I и D)

7:0

Указывает на причину Data или Prefetch Abort (3:0), а также на номер домена, обращение к которому послужило причиной Abort’а (7:4).

Fault address

6 (D)

31:0

Содержит виртуальный адрес (VA), обращение по которому вызвало Data Abort.

TLB operations

8

31:0

Запись в этот регистр вызывает выполнение MMU операций с TLB (translation lookaside buffers).

TLB lockdown

10 (I и D)

31:20 и 0

Позволяет захватить определенные страницы в TLB, а также читать/писать victim (могущие быть сброшенными) индексы.


Таблица 1. Регистры сопроцессора CP15, программирующие MMU


Пример TTB (Translation table base):

TTB:

.data 0x80000D9E – смещение физического адреса для виртуальных адресов 0 - (2^14-1)

.data 0x80004D9E – смещение физического адреса для виртуальных адресов 2^14 - (2^15-1)

.data 0x84000D92

.data 0x84004D92

.data 0x84008D92

.data 0x8400CD92

.data 0x84010D92

...


3. Преобразование модифицированного виртуального адреса в физический


Преобразование MVA в физический адрес происходит в один-два этапа:


  1. Извлечение типа адресации из TTB (таблицы трансляции, адрес которой задается регистром 2 сопроцессора CP15).

  2. Если тип адресации страничный, то извлечение физического адреса из таблицы страниц.


Таблица трансляции адресов TT (translation table). Адрес этой таблицы программируется регистром TTB (translation table base): регистром 2 сопроцессора CP15. Биты 31:14 этого регистра задают адрес TT. Это значит, что адрес таблицы TT должен быть кратен 214.

TTB содержит 4096 32-битных ячеек, каждая из которых описывает 1 MB виртуальной памяти (таким образом можно адресоваться к 4 GB виртуальной памяти).

30-битный адрес (младшие два бита равны 0) ячейки TT вычисляется так: к битам 31:14 регистра TTB приписываются биты 31:20 адреса MVA.

Содержимое ячейки TT описано в таблице 2.

Биты 1:0 ячейки TT содержат тип адресации:


00 – неудача

01 – по грубой таблице страниц

10 – по секции

11 – по точной таблице страниц


Биты 8:5 определяют номер домена.

При адресации по секции биты 31:20 ячейки TT содержат базовый адрес 1 MB памяти. В этом случае MVA прямо используется как физический адрес.

При адресации по грубой таблице страниц биты 31:10 ячейки TT содержат базовый адрес грубой таблицы страниц. Биты 19:12 адреса используются в качестве индекса в грубой таблице страниц, биты 11:0 – смещение относительно адреса, извлеченного из грубой таблицы страниц.

При адресации по точной таблице страниц биты 31:12 ячейки TT содержат базовый адрес грубой таблицы страниц. Биты 19:10 адреса используются в качестве индекса в точной таблице страниц, биты 9:0 – смещение относительно адреса, извлеченного из точной таблицы страниц.


Биты

Описание

По секциям

По грубой таблице

По точной таблице

31:20

31:10

31:12

Формируют соответствующие биты физического адреса

19:20

-

-

Должны быть 0

11:10

-

-

Тип разрешения доступа

9

9

11:9

Должны быть 0

8:5

8:5

8:5

Биты номера домена

4

4

4

Должен быть 1

3:2

-

-

Кэшируемость области памяти: кэшируемая write-back, кэшируемая write-through, некэшируемая буферизуемая или некэшируемая небуферизуемая.

-

3:2

3:2

Должны быть 0

1:0

1:0

1:0

Тип адресации


Таблица 2. Формат ячейки таблицы трансляции TT.


Грубая таблица страниц содержит 256 входов, разбивающих 1 MB памяти на 256 блоков по 4 KB. Служит для адресации к большим и малым страницам.

Точная таблица страниц содержит 1024 входа, разбивающих 1 MB памяти на 1024 блоков по 1 KB. Служит для адресации к крошечным страницам.


Биты

Описание

Большие страницы

Малые страницы

Крошечные страницы

31:16

31:12

31:10

Формируют соответствующие биты физического адреса

15:12

-

9:6

Должны быть 0

11:4

11:4

5:4

Тип разрешения доступа

3:2

3:2

3:2

Кэшируемость области памяти: кэшируемая write-back, кэшируемая write-through, некэшируемая буферизуемая или некэшируемая небуферизуемая.

1:0

1:0

1:0

Тип страницы: неверная, большая, малая, крошечная


Таблица 3. Формат ячейки таблицы страниц.


4. Доступ к домену:


Значение

Тип

Описание

00

Нет доступа

Любой доступ вызывает ошибку домена

01

Клиент

Доступ определяется битами доступа в дескрипторе секции или страницы

10

Зарезервировано

В данный момент поведение как в пункте «нет доступа»

11

Менеджер

Доступ не проверяется, ошибка неразрешенного доступа не генерируется


Таблица 4. Интерпретация битов управления доступом в регистре контроля домена (3)


5. Трансляция с использованием TLB:


Каждая таблица TLB содержит 64 модифицированных виртуальных адреса, результаты их трансляции в физический адрес и информацию о доступе к этим адресам.

Если TLB не содержит транслированный адрес для MVA, то после трансляции адреса он добавляется в таблицу.




6. Взаимодействие MMU и кэш-памяти


Чтобы включить MMU:


  1. Программируется TTB и регистры доступа к доменам.

  2. Программируются таблицы страниц уровней 1 и 2.

  3. Включается MMU заданием бита 0 в контрольном регистре.


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


Одновременно с включением MMU можно включить кэш-память.


При выключении MMU кэш данных должен быть выключен заранее или одновременно.

TLB сохраняется при включениях и выключениях MMU, поэтому при необходимости ее надо выключить до включения MMU.