Presentation is loading. Please wait.

Presentation is loading. Please wait.

Linux Memory Management High-Level versus Low-Level.

Similar presentations


Presentation on theme: "Linux Memory Management High-Level versus Low-Level."— Presentation transcript:

1 Linux Memory Management High-Level versus Low-Level

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

3 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’?

4 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*mmap; /* plus many other fields */};

5 Linked List of VMAs Each ‘vm_area_struct’ points to another struct vm_area_struct { unsigned longvm_start; unsigned longvm_end; unsigned longvm_flags; struct vm_area_struct*vm_next; /* plus some other fields */};

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

7 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’


Download ppt "Linux Memory Management High-Level versus Low-Level."

Similar presentations


Ads by Google