Книга: Разработка ядра Linux

Операции с областями VMA

Операции с областями VMA

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

Таблица операций представлена с помощью структуры vm_operations_struct, которая определена в файле <linux/mm.h> следующим образом.

struct vm_operations_struct {
 void (*open)(struct vm_area_struct*);
 void (*close)(struct vm_area_struct*);
 struct page* (*nopage)(struct vm_area_struct*, unsigned long, int);
 int (*populate)(struct vm_area struct*, unsigned long,
  unsigned long, pgprot_t, unsigned long, int);
};

Рассмотрим каждый метод в отдельности.

• void open(struct vm_area_struct *area);

Эта функция вызывается, когда соответствующая область памяти добавляется в адресное пространство.

• void close(struct vm_area_struct *area);

Эта функция вызывается, когда соответствующая область памяти удаляется из адресного пространства.

• struct page* nopage(struct vm_area_struct *area,
  unsigned long address, int unused);

Эта функция вызывается обработчиком прерывания из-за отсутствия страницы (page fault), когда производится доступ к странице, которая отсутствует в физической памяти.

• int populate(struct vm_area_struct *area,
  unsigned long address, unsigned long len, pgprot_t prot,
  unsigned long pgoff, int nonblock);

Эта функция вызывается из системного вызова remap_pages() для предварительного заполнения таблиц страниц области памяти (prefault) при создании нового отображения.

Оглавление книги


Генерация: 1.228. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз