Операции с областями 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) при создании нового отображения.
Лето — время эзотерики и психологии! ☀️
Получи книгу в подарок из специальной подборки по эзотерике и психологии. И скидку 20% на все книги Литрес
ПОЛУЧИТЬ СКИДКУ