Шрифт:
Флаг | Влияние на страницы памяти в созданном интервале адресов |
---|---|
PROT_READ | Соответствует флагу VM_READ |
PROT_WRITE | Соответствует флагу VM_WRITE |
PROT_EXEC | Соответствует флагу VM_EXEC |
PROT_NONE | К страницам памяти нет доступа |
Параметр
Таблица 14.3. Флаги защиты страниц памяти
Флаг | Влияние на созданный интервал адресов |
---|---|
MAP_SHARED | Отображение может быть совместно используемым |
MAP_PRIVATE | Отображение не может быть совместно используемым |
MAP_FIXED | Создаваемый интервал адресов должен начинаться с указанного адреса addr |
MAP_ANONYMOUS | Отображение является анонимным, а не отображением файла |
MAP_GROWSDOWN | Соответствует флагу VM_GROWSDOWN |
MAP_DENYWRITE | Соответствует флагу VM_DENYWRITE |
MAP_EXECUTABLE | Соответствует флагу VM_EXECUTABLE |
MAP_LOCKED | Соответствует флагу VM_LOCKED |
MAP_NORESERVE | Нет необходимости резервировать память для отображения |
MAP_POPULATE | Предварительно заполнить (prefault) таблицы страниц |
MAP_NONBLOCK | Не блокировать при операциях ввода-вывода |
Если какой-либо из параметров имеет недопустимое значение, то функция
Системный вызов
Возможности функции
Этот системный вызов имеет имя
Функции
Функция
Первый параметр указывает адресное пространство, из которого удаляется интервал адресов, начинающийся с адреса
Системный вызов
Системный вызов
Данный системный вызов реализован в виде очень простой интерфейсной оболочки (wrapper) функции
Таблицы страниц
Хотя пользовательские программы и работают с виртуальной памятью, которая отображается на физические адреса, процессоры работают непосредственно с этими физическими адресами. Следовательно, когда приложение обращается к адресу виртуальной памяти, этот адрес должен быть конвертирован в физический адрес, чтобы процессор смог выполнить запрос. Соответствующий поиск выполняется с помощью таблиц страниц. Таблицы страниц работают путем разбиения виртуального адреса на части. Каждая часть используется в качестве индекса (номера) записи в таблице. Таблица содержит или указатель на другую таблицу, или указатель на соответствующую страницу физической памяти.
В операционной системе Linux таблицы страниц состоят из трех уровней [83] . Несколько уровней позволяют эффективно поддерживать неравномерно заполненные адресные пространства даже для 64-разрядных машин. Если бы таблицы страниц были выполнены в виде одного статического массива, то их размер, даже для 32-разрядных аппаратных платформ, был бы чрезвычайно большим. В операционной системе Linux трехуровневые таблицы страниц используются даже для тех аппаратных платформ, которые аппаратно не поддерживают трехуровневых таблиц (например, для некоторых аппаратных платформ поддерживается только два уровня или аппаратно реализовано хеширование). Три уровня соответствуют своего рода "наибольшему общему знаменателю". Для аппаратных платформ с менее сложной реализацией работа с таблицами страниц в ядре при необходимости может быть упрощена с помощью оптимизаций компилятора.
83
Начиная с ядра версии 2.6.11 таблицы страниц в ОС Linux для 64-разрядных аппаратных платформ стали 4-уровневыми, что позволяет в полном объеме использовать все виртуальное адресное пространство. Для 32-разрядных аппаратных платформ осталось 3 уровня, как и раньше. — Примеч. ред.