Friday, May 18th

Last update12:13:00 PM GMT

Вы находитесь на: FreeBSD Управление памятью Обзор системы виртуальной памяти FreeBSD

Обзор системы виртуальной памяти FreeBSD

Система виртуальной памяти FreeBSD основана на системе виртуальной памяти Mach 2.0, с обновлениями из Mach 2.5 и Mach 3.0. Виртуальная система Mach была принята, поскольку она характеризуется эффективной поддержкой разделения памяти и чистым разделением машинно-независимых и машинно-зависимых возможностей, а также поддержкой многопроцессорности. От оригинального интерфейса системных вызовов Mach не осталось ничего. Он был заменен интерфейсом, вначале предложенным для 4.2BSD, который был широко принят в индустрии UNIX.

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

Виртуальное адресное пространство большинства архитектур разделено на две части. Для FreeBSD, работающей на 32-разрядных архитектурах, верхний 1 Гбайт адресного пространства зарезервирован для использования ядром. Системы со множеством небольших процессов, интенсивно использующих возможности ядра, такие, как использование сети, могут быть сконфигурированы для использования ядром верхних 2 Гбайт. Оставшееся адресное пространство доступно для использования процессами. Здесь ядро и связанные с ним структуры данных находятся на вершине адресного пространства. Начальные области текста и данных процесса пользователя начинаются в начале памяти или около него. Обычно первые 4 или 8 Кбайт памяти являются запрещенными для процесса. Причина этого ограничения в том, чтобы облегчить отладку программы; обращение через указатель null вызовет отказ недействительного адреса вместо чтения или записи кода программы. Выделение памяти, сделанное работающим процессом с использованием библиотечной процедуры malloc() (или системного вызова sbrk), осуществляется из кучи, которая начинается сразу после области данных и растет по направлению к старшим адресам. Массив аргументов и массивы окружения находятся на вершине пользовательской части адресного пространства. Стек пользователя начинается сразу под этими массивами и растет по направлению к младшим адресам. Подвергаясь лишь административным ограничениям, стек и куча могут расти до тех пор, пока они не встретятся. В этот момент процесс, работающий на 32-разрядной машине, будет использовать около 3 Гбайт адресного пространства.

В FreeBSD и других современных системах UNIX, поддерживающих системный вызов ттар, использование адресного пространства структурировано меньше. Реализации разделяемых библиотек могут размещать код или данные произвольным образом, делая представление о предопределенных областях устаревшим. Для совместимости FreeBSD по-прежнему поддерживает вызов sbrk, который malloc() использует для предоставления непрерывной области кучи, а область стека автоматически увеличивается до своего предельного размера. По умолчанию разделяемые библиотеки помещаются сразу под сконфигурированной во время выполнения максимальной областью стека.

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

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

    Vmspace - Структура, включающая как машинно-зависимые, так и машинно-независимые структуры, описывающие адресное пространство процесса. Vmjnap - Структура данных самого верхнего уровня, которая описывает машинно-независимое виртуальное адресное пространство. Vmmapentry - Структура, описывающая виртуально смежную область адресов, которые разделяют атрибуты защиты и наследования и которые используют один и тот же объект резервного хранения. Object - Структура, описывающая источник данных для диапазона адресов. Shadow object - Специальный объект, представляющий модифицированную копию оригинальных данных. Vmpage - Структура данных самого нижнего уровня, представляющая используемую системой виртуальной памяти физическую память.

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

На рисунке показано типичное адресное пространство процесса и связанные с ним структуры данных. Структура vmspace инкапсулирует состояние виртуальной памяти определенного процесса, включая как машинно-зависимые, так и машинно-независимые структуры данных, а также статистику. Машинно-зависимая структура является непрозрачной для всех уровней системы, кроме самого нижнего, и содержит всю необходимую информацию для управления аппаратным обеспечением управления памятью. Машинно-независимые структуры данных включают адресное пространство, которое представлено структурой vmjnap. vmjnap содержит связанный список структур vm entry, подсказки для ускорения поиска во время выделений памяти и обработки отказов страниц, и указатель на связанную машинно-зависимую структуру ртар, содержащуюся в vmspace. Структура vmmapentry описывает виртуально смежный диапазон адресов, имеющих одни и те же атрибуты защиты и наследования. Каждый vm_map_entry указывает на цепочку структур vm object, которая описывает источники данных (объекты), отображенные на указанный диапазон адресов. В конце цепочки находится оригинальный отображенный объект данных, обычно представляющий постоянный источник данных, такой, как файл. Между этим объектом и элементом отображения вставлены один или более временных теневых объектов (shadow objects), представляющих модифицированные копии первоначальных данных.

Каждая структура vm_object содержит связанный список структур vm_page, представляющих кеш физической памяти объекта, так же как тип и указатель на структуру pager, содержащую сведения о том, как загружать данные с запоминающего устройства или выгружать данные на него. Для каждой страницы физической памяти, управляемой системой виртуальной памяти, имеется выделенная структура vm_page, где страница может быть набором нескольких смежных аппаратных страниц, которые машинно-зависимым уровнем будут рассматриваться, как если бы они были одной единицей. Структура содержит также состояние страницы (например, модифицирована или осуществлялся доступ) и ссылки на различные очереди подкачки. Структуру vmjpage чаще и быстрее всего находят через глобальный хеш, ключом которого служит объект и логическая страница внутри этого объекта, содержимое которого хранится в странице.

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


Похожие:
Еще по теме:
Советуем прочитать:

недорого в Латвии. Разработка и создание сайтов , веб-дизайн.
Сейчас 57 гостей онлайн

Реклама на сайте:

Актуальные вакансии обучение имиджмейкеров Имидж.

В данном разделе нашего сайта вы можете скачать игры для android отличное.

Лучшая читалка андроид.