2.3.2 Управление виртуальной памятью

iDevice ikoon 2.3.2 Управление виртуальной памятью

Процессам выделяется линейное логическое адресное пространство. Устройство управления памятью процессора переводит логические адреса в физические. Если поделить 4ГБ памяти на страницы размером 4кБ, то получится 1 миллион страниц. Процессор применяет двумерную структуру для обращения к этому миллиону страниц. Это можно представить себе как матрицу 1024х1024. Первая размерность называется каталогом страниц (Page Directory), а вторая таблицей страниц (Page Table). Располагая подобной структурой, можно создать каталог страниц, в котором 1024 записи, и каждая запись указывает на таблицу страниц. Каждая таблица страниц содержит в свою очередь 1024 записи, каждая из которых указывает на физический адрес 4кБ-ной страницы. Каждая запись в каталоге и таблице странице имеет 4 байта в длину, таким образом, чтобы разбить 4ГБ адресное пространство на 4кБ страницы, требуется структура размером 4х1024х1024 = 4МБ. Адреса памяти имеют 32 бита в длину, из которых 20 бит (10 бит на каталог страниц + 10 бит на таблицу страниц) являются физическим адресом страницы, а 12 бит - индексом внутри выбранной страницы.

В среде Windows у каждого процесса есть свой каталог страниц и таблица страниц, для которых ОС выделяет 4МБ места. Когда процесс создаётся, каждая запись в каталоге страниц содержит физический адрес таблицы страниц. Записи в таблице страниц могут быть как действительными, так и недействительными. Действительные записи содержат физический адрес 4кБ-овых страниц. Процесс ничего не знает о физических адресах и при обращении использует лишь виртуальные адреса. Преобразованием виртуального адреса в физический занимаются менеджер памяти Windows и процессор. Адрес, по которому в физической памяти находится каталог страниц, называется базовым адресом каталога страниц (Page Directory Base Address). Этот адрес записывается в специальный регистр процессора CR3 (в процессорах х86). При переключении контекста Windows загружает в регистр CR3 новое значение, чтобы направить запуск на адрес каталога старниц нового процесса.

Применение такой технологии позволяет процессу использовать 4ГБ адресного логического (виртуального) адресного пространства. Логические адресные пространства процессов не пересекаются, и логический адрес одного процесса не может указывать на физический адрес другого. Это называется виртуальным адресным пространством, поскольку хоть у процесса и есть 4ГБ виртуального адресного пространства, использовать он может лишь столько памяти, сколько ему выделено.

Общий объём памяти, одновременно занимаемый всеми процессами, не может превысить сумму основной памяти и файла подкачки (Pagefile). Это называется пределом для выделения памяти (Commit Limit). Если процесс запрашивает больше памяти (Commit), то ОС проверяет, имеется в свободная память, и если есть, выделяет её процессу. Таким образом ОС гарантирует, что процессу реально выделена память, будь то в области физическая или массовой памяти. Объём всей виртуальной памяти, выделенной всем процессам, называется текущей выделенной памятью (Current Commit Charge). Для определения оптимального размера файла подкачки необходимо знать, сколько виртуальной памяти процессы реально занимают. Для этого нужно найти пик выделенной памяти (Peak Commit Charge), что чего можно, например, проследить за пиком выделенной памяти при одновременном запуске всех процессов, и из полученной величины вычесть объём физической памяти компьютера. Полученная разница и составит размер файла подкачки.

Инструментом, с помощью которого можно провести такие измерения, может быть, например, Process Explorer: http://technet.microsoft.com/en-us/sysinternals/default.aspx

Рисунок 2‑10. Принцип адресации виртуальной памяти (Источник: http://en.wikipedia.org/wiki/File:X86_Paging_4K.svg)

В 32-битной среде Windows процесс реально не может получить в пользование всё 4ГБ адресное пространство. Менеджер памяти Windows поделит это пространство на две части, одни из которых получит процесс, а другая будет зарезервирована для самой ОС.

Рисунок 2‑11. Распределение виртуальной памяти процессу в среде Windows