Opis struktury vm_area_struct

Bloki VMA są implementowane przez strukturę vm_area_struct. Oto ona:

struct vm_area_struct {
struct mm_struct *vm_mm;
unsigned long vm_start;
unsigned long vm_end;
struct vm_area_struct *vm_next;
pgprot_t vm_page_prot;
unsigned long vm_flags;
short vm_avl_height;
struct vm_area_struct *vm_avl_left;
struct vm_area_struct *vm_avl_right;
struct vm_area_struct *vm_next_share;
struct vm_area_struct **vm_pprev_share;
struct vm_operations_struct *vm_ops;
unsigned long vm_pgoff;
struct file *vm_file;
unsigned long vm_raend;
void *vm_private_data;
};

Znaczenie pól:

*vm_mm wskaźnik (zwrotny) do struktury mm_struct procesu będącego właścicielem VMA.
vm_start adres początku wirtualnego obszaru pamięci, reprezentowanego przez ten vm_area_struct.
vm_end adres końca wirtualnego obszaru pamięci.
*vm_next pole organizujące struktury vm_area_struct procesu w listę posortowaną ze względu na pole vm_start.
vm_page_prot znaczniki ochrony dostępu do VMA. Fladze tej można przypisać takie same wartości jak fladze do ochrony pojedynczej strony pamięci.
vm_flags różne flagi opisujące typ VMA. Flagi te są opisane poniżej.
vm_avl_height pole wysokości dla AVL'a.
*vm_avl_left lewy potomek AVL'a.
*vm_avl_right prawy potomek AVL'a.
*vm_next_share wraz z polem vm_pprev_share organizują w listę cykliczną struktury vm_area_struct, które są przydzielone do jakiejś przestrzeni adresowej20 (ang. address space) lub w listę odwzorowań dla obszarów pamięci dzielonej IPC lub są nieużywane.
**vm_pprev_share patrz wyżej.
*vm_ops wskaźnik na strukturę vm_operations_struct. Patrz opis dwa punkty dalej.
vm_pgoff gdy VMA mapuje plik to vm_pgoff zawiera offset w tym pliku podany w jednostkach rozmiaru strony PAGE_SIZE.
*vm_file wskaźnik na plik mapowany w tym VMA, może to być NULL.
vm_raend gdy plik mapowany w tym VMA jest czytany z wyprzedzeniem, to zmienna ta pomaga przy obsłudze tej sytuacji, wpp. jest zawsze równa 0.
*vm_private_data zmienna używana w przypadku używania pamięci dzielonej, dawniej nazywała się vm_pte


Tomasz Szymko 27 listopada 2001