Linux Memory Management

7
Linux Memory Management High-Level versus Low- Level

description

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_tpid; char comm[16]; struct mm_struct*mm; - PowerPoint PPT Presentation

Transcript of Linux Memory Management

Page 1: Linux Memory Management

Linux Memory Management

High-Level versus Low-Level

Page 2: Linux Memory Management

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 */ };

Page 3: Linux Memory Management

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

Page 4: Linux Memory Management

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 */ };

Page 5: Linux Memory Management

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 */};

Page 6: Linux Memory Management

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

Page 7: Linux Memory Management

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’