Linux Memory Issues - PowerPoint PPT Presentation

About This Presentation
Title:

Linux Memory Issues

Description:

Besides IA-32, Linux runs on other CPUs (e.g., PowerPC, MC68000, IBM360, Sparc) ... So on 80x86 Linux uses just one node' Zones: to accommodate distinct regions ... – PowerPoint PPT presentation

Number of Views:41
Avg rating:3.0/5.0
Slides: 26
Provided by: ProfessorA2
Learn more at: https://www.cs.usfca.edu
Category:
Tags: issues | linux | memory

less

Transcript and Presenter's Notes

Title: Linux Memory Issues


1
Linux Memory Issues
  • An introduction to some low-level and some
    high-level memory management concepts

2
Some Architecture History
  • 8080 (late-1970s) 16-bit address (64-KB)
  • 8086 (early-1980s) 20-bit address (1-MB)
  • 80286 (mid-80s) 24-bit address (16-MB)
  • 80386 (late-80s) 32-bit address (4-GB)
  • 80686 (late-90s) 36-bit address (64-GB)
  • Core2 (mid-2000s) 40-bit address (1-TB)

3
Backward Compatibility
  • Many buyers resist early obsolescence
  • New processors need to run old programs
  • Early design-decisions leave their legacy
  • 8086 could run recompiled 8080 programs
  • 80x86 can still run most 8086 applications
  • Win95/98 could run most MS-DOS apps
  • But a few areas of incompatibility existed

4
Linux must accommodate legacy
  • Legacy elements hardware and firmware
  • CPU reset-address and interrupt vectors
  • ROM-BIOS data area and boot location
  • Display Controllers VRAM video BIOS
  • Support chipsets 15MB Memory Window
  • DMA 24-bit memory-address bus
  • SMP combined Local and I/O APICs

5
Other CPU Architectures
  • Besides IA-32, Linux runs on other CPUs
  • (e.g., PowerPC, MC68000, IBM360, Sparc)
  • So must accommodate their differences
  • Memory-Mapped I/O
  • Wider address-buses
  • Non-Uniform Memory Access (NUMA)

6
Nodes, Zones, and Pages
  • Nodes to accommodate NUMA systems
  • However 80x86 doesnt support NUMA
  • So on 80x86 Linux uses just one node
  • Zones to accommodate distinct regions
  • Three zones on 80x86
  • ZONE_DMA (memory below 16-MB)
  • ZONE_NORMAL (from 16-MB to 896-MB)
  • ZONE_HIGHMEM (memory above 896-MB)

7
Zones divided into Pages
  • 80x86 supports 4-KB page-frames
  • Linux uses an array of page descriptors
  • Array of page descriptors mem_map
  • physical memory is mapped by CPU

8
How 80x86 Addresses RAM
  • Two-stages segmentation plus paging
  • First logical address ? linear address
  • Then linear address ? physical address
  • CPU employs special caches
  • Segment-registers contain hidden fields
  • Paging uses Translation Lookaside Buffer

9
Logical to Linear
virtual address-space
segment-register
operand-offset
selector
memory segment
global descriptor table
base-address
descriptor
and segment-limit
GDTR
10
Segment Descriptor Format
31
0
Limit 19..16
Base 23..16
Base 31..24
Base 15..0
Limit 15..0
11
Linear to Physical
linear address
physical address-space
offset
table-index
dir-index
page table
page frame
page directory
CR3
12
CR3 and CR4
  • Register CR3 holds the physical address of the
    current tasks page-directory table
  • Register CR4 was added in the 80486 so software
    would have the option of turning on certain
    advanced new CPU features, yet older software
    still could execute (by just leaving the new
    features turned off)

13
Example Page-Size Extensions
  • 80586 can map either 4KB or 4MB pages
  • With 4MB pages middle table is omitted
  • Entire 4GB address-space is subdivided
  • into 1024 4MB-pages
  • Demo-module cr3.c creates a pseudo-file
    showing the values in CR3 and in CR4

14
Linear to Physical
linear address
physical address-space
offset
dir-index
page directory
page frame
CR3
4-MB page-frames
15
PageTable Entry Format
31
0
11
12
Frame Address
Frame attributes
Some Frame Attributes P (present1,
not-present0) R/W (writable1,
readonly0) U/S (user1, supervisor0) D
(dirty1, clean0) A (accessed1,
not-accessed0) S (size 4MB 1, size 4KB
0)
16
Visualizing Memory
  • Our pgdir.c module creates a pseudo-file that
    lets users see a visual depiction of the CPUs
    current map of virtual memory
  • Virtual address-space (4-GB)
  • subdivided into 4MB pages (1024 pels)
  • Text characters 16 rows by 64 columns

17
Virtual Memory Visualization
  • Shows which addresses are mapped
  • Display granularity is 4MB
  • Data is gotten from tasks page-directory
  • Page-Directory location is in register CR3
  • Legend
  • - frame not mapped
  • 3 r/w by supervisor
  • 7 r/w by user

18
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 comm16
  • struct mm_struct mm
  • / plus many additional fields /

19
struct mm_struct
  • It describes the tasks memory map
  • Wheres 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 tasks page directory?

20
Demo mm.c
  • It creates a pseudo-file /proc/mm
  • Allows users to see values stored in some of the
    mm_struct objects important fields

21
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 /

22
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 /

23
Structure relationships
The process descriptor for a task
task_struct
Tasks mm structure
mm_struct
mm
mmap
VMA
VMA
VMA
VMA
VMA
Linked list of vm_area_struct structures
24
Demo vma.c module
  • It 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

25
In-class exercise 2
  • Try running our domalloc.cpp demo
  • It lets you see how a call to the malloc()
    function would affect an application list of
    vm_area_struct objects
  • NOTE You have to install our vma.ko
    kernel-object before running domalloc
Write a Comment
User Comments (0)
About PowerShow.com