Friday, May 18th

Last update12:13:00 PM GMT

Вы находитесь на: FreeBSD Управление памятью Переносимость

Переносимость

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

Машинно-зависимые части системы виртуальной памяти управляют аппаратурой блока управления памятью (memory-management unit - MMU). MMU реализует трансляцию адресов и управление доступом при отображении виртуальной памяти в физическую память.

Одна из распространенных организаций MMU использует постоянно находящиеся в памяти таблицы страниц прямого отображения (forward-mapped page tables).

Эти таблицы страниц являются большими непрерывными массивами, индексируемыми виртуальным адресом. Для каждой виртуальной страницы в адресном пространстве в массиве есть один элемент - элемент таблицы страниц (page-table entry - PTE). Этот элемент содержит физическую страницу, на которую отображена виртуальная страница, а также права доступа, биты состояния, сообщающие о том, была ли ссылка на страницу или ее модификация, и бит, указывающий, содержит ли элемент действительную информацию. Для 4-гигабайтного адресного пространства с 4-килобайтными виртуальными страницами и 32-разрядным элементом таблицы страниц для описания всего адресного пространства потребовался бы 1 миллион элементов, или 4 Мбайта. Поскольку большинство процессоров используют небольшую часть своих адресных пространств, большая часть элементов была бы недействительной, и выделение 4 Мбайтов физической памяти каждому процессу было бы расточительно. Поэтому большинство структур таблиц страниц являются иерархическими, использующими два или более уровней отображения. При иерархической структуре различные части виртуального адреса используются для индексирования различных уровней таблиц страниц. Промежуточные уровни таблицы содержат адреса следующего нижележащего уровня таблицы страниц. Ядро может пометить неиспользующиеся большие непрерывные области адресного пространства, вводя недействительные элементы в вышележащих уровнях таблицы страниц, устраняя необходимость в недействительных дескрипторах для каждой отдельной неиспользующейся виртуальной страницы.

Эта иерархическая структура таблиц страниц требует от аппаратного обеспечения делать частые ссылки на память для трансляции виртуальных адресов. Чтобы ускорить процесс трансляции, большинство основанных на таблицах страниц MMU имеют также небольшой, быстрый, полностью ассоциативный аппаратный кеш недавних транслированных адресов, структуру, обычно известную как буфер быстрого преобразования адреса (translation lookaside buffer - TLB). Когда транслируется ссылка на память, сначала просматривается TLB, и лишь если действительный элемент там не найден, проходится структура таблиц страниц для текущего процесса. Поскольку большинство программ демонстрируют пространственную близость своих паттернов доступа к памяти, TLB не нужно быть большим; многие включают всего лишь 128 элементов.

Когда адресные пространства вырастают из 32 до 48, а недавно и до 64 разрядов, простые индексированные структуры данных становятся громоздкими с тремя или более уровнями таблиц, необходимых для обработки трансляции адреса. Ответом на этот рост таблиц страниц является инвертированная таблица страниц, известная также как таблица страниц с обратным отображением. В инвертированной таблице страниц аппаратура по-прежнему поддерживает резидентную в памяти таблицу, но эта таблица содержит один элемент на физическую страницу и индексируется по физическому адресу вместо виртуального. Элемент содержит виртуальный адрес, на который в настоящее время отображена физическая страница, а также атрибуты защиты и состояния. Аппаратура осуществляет трансляцию адреса с виртуального в физический путем вычисления хеш-функции виртуального адреса, чтобы выбрать

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

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

Последняя распространенная организация MMU состоит лишь из TLB. Эта архитектура представляет простейший аппаратный дизайн. Она дает программному обеспечению максимум гибкости, давая ему возможность управлять информацией о трансляции с помощью любых структур, которыми пожелает.

Часто перенос на другую архитектуру со сходной организацией управления памятью может использоваться в качестве отправного пункта для нового переноса. Архитектура PC использует типичную двухуровневую организацию таблиц страниц, показанную на рисунке выше. Адресное пространство разделено на 4-килобайтные виртуальные страницы, причем каждая страница идентифицируется 32-разрядным элементом в таблице страниц. Каждый элемент таблицы страниц содержит номер физической страницы, назначенной виртуальной странице, права доступа, сведения о модификации и ссылках и бит, показывающий, что элемент содержит действительную информацию. 4 Мбайта элементов таблиц страниц таким же образом делятся на 4-килобайтные страницы таблицы страниц, каждая из которых описывается одним 32-разрядным элементом в каталоге страниц (directory table). Элементы каталога страниц почти идентичны элементам таблицы страниц: они содержат биты доступа, биты изменения и ссылок, бит действительности и номер физической страницы описываемой страницы таблицы страниц. Одна 4-килобайтная страница - 1024 элемента каталога страниц - охватывает адресное пространство с максимальным размером 4 Гбайта. Аппаратный регистр CR3 содержит физический адрес каталога страниц для текущего активного процесса.

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

1. 10 самых старших битов виртуального адреса используются в качестве индекса в активном каталоге страниц.

2. Если выбранный элемент каталога страниц действительный и биты прав доступа разрешают произвести доступ, следующие 10 битов виртуального адреса используются в качестве индекса в странице таблицы страниц, на которую ссылается элемент каталога страниц.

3. Если выбранный элемент таблицы страниц действительный и биты прав доступа совпадают, последние 12 битов виртуального адреса объединяются с физической страницей, на которую ссылается элемент таблицы страниц, для получения физического адреса доступа.

Сейчас 52 гостей онлайн