Флаги областей VMA

Флаги областей VMA

Поле флагов vm_flags содержит битовые флаги, которые определены в файле <linux/mm.h>. Они указывают особенности поведения и содержат описательную информацию о страницах памяти, которые входят в данную область памяти. В отличие от прав доступа, которые связаны с определенной физической страницей памяти, флаги областей VMA указывают особенности поведения, за которые отвечает ядро, а не аппаратное обеспечение. Более того, поле vm_flags содержит информацию, которая относится к каждой странице в области памяти или, что то же самое, ко всей области памяти в целом. В табл. 14.1 приведен список возможных значений флагов vm_flags.

Таблица 14.1. Флаги областей VMA

Флаг Влияние на область VMA и на ее страницы памяти
VM_READ Из страниц памяти можно считывать информацию
VM_WRITE В страницы памяти можно записывать информацию
VM_EXEC Можно выполнять код, хранящийся в страницах памяти
VM_SHARED Страницы памяти являются совместно используемыми
VM_MAYREAD Можно устанавливать флаг VM_READ
VM_MAYWRITE Можно устанавливать флаг VM_WRITE
VM_MAYEXEC Можно устанавливать флаг VM_EXEC
VM_MAYSHARE Можно устанавливать флаг VM_SHARED
VM_GROWSDOWN Область памяти может расширяться "вниз"
VM_GROWSUP Область памяти может расширяться "вверх"
VM_SHM Область используется для разделяемой (совместно используемой) памяти
VM_DENYWRITE В область отображается файл, в который нельзя выполнять запись
VM_EXECUTABLE В область отображается выполняемый файл
VM_LOCKED Страницы памяти в области являются заблокированными
VM_IQ В область памяти отображается пространство ввода-вывода аппаратного устройства
VM_SEQ_READ К страницам памяти, вероятнее всего, осуществляется последовательный доступ
VM_RAND_READ К страницам памяти, вероятнее всего, осуществляется случайный доступ
VM_DONTCOPY Область памяти не должна копироваться при вызове fork()
VM_DONTEXPAND Область памяти не может быть увеличена с помощью вызова remap()
VM_RESERVED Область памяти не должна откачиваться на диск
VM_ACCOUNT Область памяти является объектом, по которому выполняется учет ресурсов
VM_HUGETLB В области памяти используются гигантские (hugetlb) страницы памяти
VM_NONLINEAR Область памяти содержит нелинейное отображение

Рассмотрим подробнее назначение наиболее интересных и важных флагов. Флаги VM_READ, VM_WRITE и VM_EXEC указывают обычные права на чтение-запись и выполнение для страниц памяти, которые принадлежат данной области памяти. При необходимости их можно комбинировать для формирования соответствующих прав доступа. Например, отображение выполняемого кода процесса может быть выполнено с указанием флагов VM_READ и VM_EXEC, но никак не с указанием флага VM_WRITE. С другой стороны, сегмент данных из выполняемого файла может отображаться с указанием флагов VM_READ и VM_WRITE, указывать при этом флаг VM_EXEC не имеет смысла. Файл данных, который отображается только для чтения, должен отображаться с указанием только флага VM_READ.

Флаг VM_SHARED указывает на то, что область памяти содержит отображение, которое может совместно использоваться несколькими процессами. Если этот флаг установлен, то такое отображение называют совместно используемым (shared mapping), что интуитивно понятно. Если этот флаг не установлен, то такое отображение доступно только одному процессу и оно называется частным отображением, (private mapping).

Флаг VM_IO указывает, что область памяти содержит отображение области ввода-вывода аппаратного устройства. Этот флаг обычно устанавливается драйверами устройств при выполнении вызова mmap() для отображения в память области ввода-вывода аппаратного устройства. Кроме всего прочего, этот флаг указывает, что область памяти не должна включаться в файл core процесса. Флаг VM_RESERVED указывает, что область памяти не должна откачиваться на диск. Этот флаг также укалывается при отображении на память областей ввода-вывода аппаратных устройств.

Флаг VM_SBQ_READ является подсказкой ядру, что приложение выполняет последовательное (т.е. линейное и непрерывное) чтение из соответствующего отображения. При этом ядро может повысить производительность чтения за счет выполнения упреждающего чтения (read-ahead) из отображаемого файла. Флаг VM_RAND_READ указывает обратное, т.е. приложение выполняет операции чтения из случайно выбранных мест отображения (т.е. не последовательно). При этом ядро может уменьшить или совсем отключить выполнение упреждающего чтения из отображаемого файла. Эти флаги устанавливаются с помощью системного вызова madvice() путем указания соответственно флагов MADV_SEQUENTIAL и MADV_RANDOM для этого вызова. Упреждающее чтение — это последовательное чтение несколько большего количества данных, чем было запрошено, в надежде на то, что дополнительно считанные данные могут скоро понадобиться. Такой режим полезен для приложений, которые считывают данные последовательно. Однако если считывание данных выполняется случайным образом, то режим упреждающего чтения не эффективен.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Флаги.

Из книги 64 килобайта о Фидо автора Filimonov Nick

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


Закрепление областей

Из книги Excel. Мультимедийный курс автора Мединов Олег

Закрепление областей Предположим, что вы работаете с большой таблицей. В процессе работы вам приходится часто использовать полосы прокрутки, чтобы ввести данные в различные ячейки. При этом заголовки столбцов (самые различные, например: Товар, Цена, Количество,


2.2.7.1 . Зеркалирование дисковых областей

Из книги Руководство администратора баз данных Informix. автора Кустов Виктор

2.2.7.1 . Зеркалирование дисковых областей Зеркалирование в INFORMIX-OnLine DS - это дублирование связной дисковой области, выделенной под базу данных, на такую же по размеру область. Исходная область называется первичной, а ее копия - зеркальной. Цели, для которых применяется


Создание областей

Из книги XSLT автора Хольцнер Стивен

Создание областей В версии 1.0 спецификации XSL у шаблонов страниц имелось пять областей (region). Центральная область, соответствующая основной части, телу страницы, называется областью тела (body region). Верхняя часть страницы, верхний колонтитул (header), называется передней


13.2.3. Отмена отображения областей

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

13.2.3. Отмена отображения областей После окончания отображения в памяти процесс может отменить отображение памяти с помощью munmap(). Это приводит к тому, что последующие доступы к этому адресу будут генерировать SIGSEGV (если только память не будет перераспределена) и сохраняет


13.2.4. Синхронизация областей памяти на диск

Из книги Бесплатные разговоры через Интернет автора Фрузоров Сергей

13.2.4. Синхронизация областей памяти на диск Если для записи в файл используется карта памяти, модифицированные страницы памяти и файл будут в течение некоторого времени отличаться. Если процессу необходимо немедленно записать страницы на диск, для этого служит msync().#include


13.2.5. Блокировка областей памяти

Из книги КОМПАС-3D для студентов и школьников. Черчение, информатика, геометрия автора Большаков Владимир

13.2.5. Блокировка областей памяти В Linux и многих других современных операционных системах для областей памяти можно организовать страничный обмен с диском (или отклонять, если их невозможно заменить каким-либо другим способом), когда возникает дефицит памяти. На


16.5.3. Флаги

Из книги Введение в QNX/Neutrino 2. Руководство по программированию приложений реального времени в QNX Realtime Platform автора Кёртен Роб

16.5.3. Флаги Четыре флаговых переменных — c_iflag, с_oflag, c_cflag и c_lflag — хранят флаги, управляющие определенными характеристиками. Заголовочный файл <termios.h> предоставляет символические константы битовых масок, которые, в свою очередь, предоставляют эти флаги. Устанавливайте


16.5.6. Управляющие флаги

Из книги Разработка ядра Linux автора Лав Роберт

16.5.6. Управляющие флаги Флаги режима управления влияют на такие параметры протокола, как четность и управление потоком[114]. Флаги, устанавливаемые в с_cflag, описаны ниже. CLOCAL При установке CLOCAL линии управления модемом игнорируются. Если он не установлен, open() блокируется до


Флаги пользователей

Из книги автора

Флаги пользователей Здесь будут перечислены все флаги пользователей, которые в настоящее время используются в программе TeamSpeak.? U (Unregistered, Незарегистрированный) — обозначает незарегистрированного пользователя. Обычно такие пользователи имеют самые малые права и


Флаги каналов

Из книги автора

Флаги каналов Теперь перечислим флаги, которые могут иметь каналы.? R (Registered, Зарегистрированный) — обозначает зарегистрированный канал. Если канал не имеет этого флага, то он автоматически удаляется с сервера после того, как все пользователи его покинут. В противном


1.4.2. Штриховка замкнутых областей

Из книги автора

1.4.2. Штриховка замкнутых областей Штриховка замкнутых областей на чертежах в двумерных редакторах выполняется автоматически после задания границ и параметров штриховки. Границы штриховки, как правило, можно задавать вручную и (или) автоматически. Автоматический способ


Флаги канала

Из книги автора

Флаги канала Когда мы вначале книги изучали сервер (в параграфе «Сервер»), мы упомянули, что функция ChannelCreate() принимает параметр flags (флаги); правда, тогда мы вместо этого параметра передавали нуль.Теперь пришло время более подробно изучить назначение параметра flags.


Флаги gfp_mask

Из книги автора

Флаги gfp_mask Выше были показаны различные примеры использования флагов, которые модифицируют работу системы выделения памяти, как при вызове низкоуровневых функций, работающих на уровне страниц, так и при использовании функции kmalloc(). Теперь давайте рассмотрим их более


Списки и деревья областей памяти

Из книги автора

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