Linux Memory Management HighLevel versus LowLevel Assigning memory

  • Slides: 7
Download presentation
Linux Memory Management High-Level versus Low-Level

Linux Memory Management High-Level versus Low-Level

Assigning memory to tasks • Each Linux process has a ‘process descriptor’ with a

Assigning memory to tasks • Each Linux process has a ‘process descriptor’ with a pointer inside it named ‘mm’: struct task_struct { pid_t pid; char comm[16]; struct mm_struct *mm; /* plus many additional fields */ };

struct mm_struct • • • Describes the task’s ‘memory map’ Where’s the code, the

struct mm_struct • • • Describes the task’s ‘memory map’ Where’s the code, the data, the stack? Where are the ‘shared libraries’? What are attributes of each memory area? How many distinct memory areas? Where is the task’s ‘page directory’?

Virtual Memory Areas • Inside ‘mm_struct’ is a pointer to a list • Name

Virtual Memory Areas • Inside ‘mm_struct’ is a pointer to a list • Name of this pointer is ‘mmap’ struct mm_struct { struct vm_area_struct /* plus many other fields */ *mmap; };

Linked List of VMAs • Each ‘vm_area_struct’ points to another struct vm_area_struct { unsigned

Linked List of VMAs • Each ‘vm_area_struct’ points to another struct vm_area_struct { unsigned long vm_start; unsigned long vm_end; unsigned long vm_flags; struct vm_area_struct *vm_next; /* plus some other fields */ };

Structure relationships The ‘process descriptor’ for a task Task’s mm structure task_struct mm_struct *mmap

Structure relationships The ‘process descriptor’ for a task Task’s mm structure task_struct mm_struct *mmap VMA *mm VMA VMA Linked list of ‘vm_area_struct’ structures

Demo ‘vma. c’ module • Creates a pseudo-file: /proc/vma • Lets user see the

Demo ‘vma. c’ module • Creates a pseudo-file: /proc/vma • Lets user see the list of VMAs for a task • Also shows the ‘pgd’ field in ‘mm_struct’ EXERCISE • Compare our demo to ‘/proc/self/maps’