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