Области памяти

Области памяти

Области памяти (memory areas) представляются с помощью объектов областей памяти, которые хранятся в структурах типа vm_area_struct. Эта структура определена в файле <linux/mm.h>. Области памяти часто называются областями виртуальной памяти (virtual memory area, или VMA).

Структура vm_area_struct описывает одну непрерывную область памяти в данном адресном пространстве. Ядро рассматривает каждую область памяти, как уникальный объект. Для каждой области памяти определены некоторые общие свойства, такие как права доступа и набор соответствующих операций. Таким образом, одна структура VMA может представлять различные типы областей памяти, например файлы, отображаемые в память, или стек пространства пользователя. Это аналогично объектно-ориентированному подходу, который используется в подсистеме VFS (см. главу 12, "Виртуальная файловая система").

Ниже показана эта структура данных с комментариями, описывающими назначение каждого поля.

struct vm_area_struct {

 struct mm_struct      *vm_mm;       /* соответствующая структура mm_struct */

 unsigned long         vm_start;     /* начало диапазона адресов */

 unsigned long         vm_end;       /* конец диапазона адресов */

 struct vm_area_struct *vm_next;     /* список областей VMA */

 pgprot_t              vm_page_prot; /* права доступа */

 unsigned long         vm_flags;     /* флаги */

 struct rb_node        vm_rb;        /* узел текущей области VMA */

 union { /* связь с address_space->i_mmap, или i_mmap_nonlinear */

  struct {

   struct list_head      list;

   void                  *parent;

   struct vm_area_struct *head;

  } vm_set;

  struct prio_tree_node prio_tree_node;

 } shared;

 struct list_head            anon_vma_node;    /* анонимные области */

 struct anon_vma             *anon_vma;        /* объект анонимной VMA */

 struct vm_operations_struct *vm_ops;          /* операции */

 unsigned long               vm_pgoff;         /* смещение в файле */

 struct file                 *vm_file;         /* отображенный файл (если есть) */

 void                        *vm_private_data; /* приватные данные */

};

Как уже было рассказано, каждый дескриптор памяти связан с уникальным диапазоном (интервалом) адресов в адресном пространстве процесса. Поле vm_start — это начальный (минимальный) адрес, а поле vm_end — конечный (максимальный) адрес данного интервала. Следовательно, значение (vm_end - vm_start) — это размер (длина) интервала адресов в байтах. Интервалы адресов разных областей памяти одного адресного пространства не могут перекрываться.

Поле vm_mm указывает на структуру mm_struct, связанную с данной областью VMA. Заметим, что каждая область VMA уникальна для той структуры mm_struct, с которой эта область связана. Поэтому, даже если два разных процесса отображают один и тот же файл на свои адресные пространства, то для каждого процесса создается своя структура vm_area_struct, чтобы идентифицировать уникальные области памяти каждого процесса. Следовательно, два потока, которые совместно используют адресное пространство, также совместно используют и все структуры vm_area_struct в этом адресном пространстве.

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

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

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

6.2.1 Области

Из книги Архитектура операционной системы UNIX автора Бах Морис Дж


6.5.2 Выделение области

Из книги Основы AS/400 автора Солтис Фрэнк

6.5.2 Выделение области Ядро выделяет новую область (по алгоритму allocreg, Рисунок 6.18) во время выполнения системных функций fork, exec и shmget (получить разделяемую память). Ядро поддерживает таблицу областей, записям которой соответствуют точки входа либо в списке свободных


6.5.5 Загрузка области

Из книги Инфраструктуры открытых ключей автора Полянская Ольга Юрьевна

6.5.5 Загрузка области В системе, где поддерживается подкачка страниц по обращению, ядро может «отображать» файл в адресное пространство процесса во время выполнения функции exec, подготавливая последующее чтение по запросу отдельных физических страниц (см. главу 9). Если же


6.5.6 Освобождение области

Из книги Сетевые средства Linux автора Смит Родерик В.

6.5.6 Освобождение области Если область не присоединена уже ни к какому процессу, она может быть освобождена ядром и возвращена в список свободных областей (Рисунок 6.25). Если область связана с индексом, ядро освобождает и индекс с помощью алгоритма iput, учитывая значение


Области данных

Из книги Язык программирования Си для персонального компьютера автора Бочков C. О.

Области данных Области данных содержат записи базы данных. Все записи одной области данных схожи: однородны и имеют фиксированную длину. Записи хранятся в порядке их поступления, и все удаленные записи по-прежнему занимают место.Объект «область данных» состоит из


Индексы области данных

Из книги Программирование для карманных компьютеров автора Волков Владимир Борисович

Индексы области данных Индекс области данных задает альтернативный порядок записей в области данных. Для альтернативного упорядочения используется дерево с двоичным основанием. В разделе «Деревья с двоичным основанием» мы рассмотрим такое дерево и его использование


Определение области

Из книги Операционная система UNIX автора Робачевский Андрей М.

Определение области Как правило, для определения областей в файлы krb5.conf и kdc.conf включаются специальные записи. Отредактировав файл, рассмотренный выше в качестве примера, вы измените конфигурацию KDC, серверов приложений и клиентов. Для того чтобы изменения были учтены


Администрирование области

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

Администрирование области Отредактировав конфигурационные файлы Kerberos и вызвав kdb5_util для создания основного ключа и инициализации базы данных Kerberos, можно приступать к администрированию области. Этот процесс в основном сводится к определению принципалов. Для выполнения


Области значений

Из книги QT 4: программирование GUI на С++ автора Бланшет Жасмин

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


Области применения. NET

Из книги Идеальный программист. Как стать профессионалом разработки ПО автора Мартин Роберт С.

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


Области

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

Области CombineRgn Функция CombineRgn объединяет две области и сохраняет результат в третьей. Две области объединяются согласно указанному режиму объединения. int CombineRgn ( HRGN hrgnDest , // дескриптор результирующей области HRGN hrgnSrc 1 , // дескриптор исходной области HRGN hrgnSrc 2 , // дескриптор


Области

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

Области В SCO UNIX адресное пространство процесса разделено на несколько участков, называемых областями (region). Область представляет собой непрерывный участок виртуального адресного пространства процесса, который рассматривается ядром системы как отдельный объект,


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

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

Области памяти в реальной жизни Рассмотрим пример адресного пространства процесса и области памяти в этом адресном пространстве. Для этой цели можно воспользоваться полезной файловой системой /proc и утилитой pmар(1). В качестве примера рассмотрим следующую простую


Области с прокруткой

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

Области с прокруткой Класс QScrollArea содержит область отображения, которую можно прокручивать, и две полосы прокрутки. Если мы хотим добавить в виджет полосы прокрутки, значительно проще использовать класс QScrollArea, чем создавать свои собственные экземпляры QScrollBar и самим


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

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

Знание предметной области Каждый профессионал обязан понимать предметную область программируемых им решений. Если вы пишете бухгалтерскую систему, вы должны разбираться в бухгалтерии. Если вы пишете приложение для туристической фирмы, вы должны разбираться в туризме.