Linux Memory Management
-
Upload
jacqueline-frederick -
Category
Documents
-
view
27 -
download
0
description
Transcript of Linux Memory Management
Linux Memory Management
High-Level versus Low-Level
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 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 of this pointer is ‘mmap’
struct mm_struct {struct vm_area_struct *mmap;
/* plus many other fields */ };
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
VMA VMA VMA VMA VMA
mm_structtask_struct
*mm*mmap
Linked list of ‘vm_area_struct’ structures
The ‘process descriptor’ for a task
Task’s mm structure
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’