Memory Basics

advertisement
OS Memory Addressing
Architecture
• CPU
–
–
–
–
•
•
•
•
•
Processing units
Caches
Interrupt controllers
MMU
Memory
Interconnect
North bridge
South bridge
PCI, etc
PC Architecture
Address Spaces
• Translation from logical to physical addresses
2N
Address space 1
2N
Process 1
0
Process 3
2N
0
Address space 3
Process 2
2N
Address space 2
OS
0
0
Virtual/Logical Address spaces
Physical Address space
Hardware Support
• Two operating modes
– Privileged (protected, kernel) mode: OS context
• Result of OS invocation (system call, interrupt, exception)
• Allows execution of privileged instructions
• Allows access to all of memory (sort of)
– User Mode: Process context
• Only access resources (memory) in its context (address
space)
• Segmentation (Logical addressing)
– Base register: Start location for address space
– Limit register: Size of segment making up address
space
Implementation
• Translation on every memory access in user process
– Compare logical address to limit register
• If logical address is greater, ERROR
– Physical Address = base register + logical address
Managing Processes w/ Base and Limits
• Context Switch
– Add base and limit registers to process context
– Context Switch steps
•
•
•
•
Change to privileged mode
Save base and limit registers of old process
Load base and limit registers of new process
Change to user mode and jump to new process
• Protection Requirement
– User process can not change base and limit
– User process can not run in privileged mode
• What if base and limit registers don’t change during
context switch?
Pros and Cons of Segmentation
• Advantages
–
–
–
–
Supports dynamic relocation of address spaces
Supports protection across multiple address spaces
Cheap: Few registers and little logic
Fast: Add and Compare is easy
• Disadvantages
– Each process must be allocated contiguously in real
memory
• Fragmentation: Cannot allocate a new process
– Must allocate memory that may not be used
– No Sharing: Cannot share limited memory regions
Using Segments
• Divide address space into logical segments
– Each logical segment can be in separate part of physical memory
– Separate base and limit for each segment (+ protection bits)
• Read and write bits for each segment
• How to designate segment?
– Use part of logical address
• Top bits of logical address select segment
• Low bits of logical address select offset within segment
– Implicitly by type of memory reference
• Code vs. Data segments
– Special registers
Segment Table
• Segment Table: Base and limit for every segment in
process
– Translation: Indirection -> Table lookup before Add and
Compare
0x3800
Seg 2
0x3000
Base
Limit
R/W
0
0x4000
0x06FF
10
1
0x0000
0x04FF
11
2
0x3000
0x0FFF
11
Where is:
0x0240
0x1108
0x265c
0x3002
0x2a00
Seg 1
0x2000
0x1000
Seg 0
0x0000
Logical
Segment
Physical
Caveat:
Assume segments are selected via the logical address.
NOT A REAL SYSTEM
Pros and Cons of Segmentation
• Advantages
– Different protection for different segments
• E.g Code segment is read only
– Enables sharing of selected segments
– Easier to relocate segments than entire address space
– Enables sparse allocation of address space
• Disadvantages
– Still expensive/difficult to allocate contiguous memory to
segments
– Fragmentation: Wasted memory
• Next approach: Paging
– Allocation is easier
– Reduces fragmentation
Example
• Rep movs
– See Architecture Manual
x86 Segments
•
•
•
•
CS = Code Segment
DS = Data Segment
SS = Stack Segment
ES, FS, GS = Auxiliary segments
– Explicit or implicitly specified by instructions
• Accessed via special registers
– 16 bit “Selectors”
– Identify the segment to the hardware MMU
• Functionality depends on CPU operating mode
Memory Map
• Early PC’s depended on BIOS for
hardware interactions
– Standard library
– Implemented as Real Mode code
• (16 bit instructions)
– Hardwired directly into memory
• All x86 CPUs start execution at 0xffff0
– Where is that?
• 1MB of available memory
– On a 16 bit architecture?
Real Mode (16 bits)
• Segment registers act as base address
– 16 bits
– Segment size = 64K (216)
• Translation:
– Physical Addr = (seg addr << 4) + logical addr
• x86 init values:
– CS: 0xf000
– IP: 0xfff0
• Goal when in Real Mode:
– Get Out of Real Mode
– First thing OS does is transition to Protected (32 bit) mode
32 bit Memory Map
• 32 bit addresses
– Up to 4GB (232)
– Top of memory used by hardware
again
• “Who would ever need more than
3GB of memory?”
• BIOS is still there
– Why?
– Is it still useful?
Protected Mode (32 bits)
• Segment information now stored as a table
– GDT (Global Descriptor Table)
• Where is the GDT?
– Array of segment descriptions (base, limit, flags)
• Segment registers now indicate array index
– Segment registers select segment descriptor
• CS points to Code Segment descriptor in GDT
– Still 16 bits
• How does Linux use segments?
• Check architecture manuals
Linear address calculation
Segment descriptors
Segmentation Registers
Paging
• Memory divided into fixed-sized pages
– Typical page size: 512-16k bytes
Address space 1
Address space 2
Free Page
Address space 3
Free Page
Free Page
Virtual Memory
Physical Memory
Page Translation
• How are virtual addresses translated to physical addresses
– Upper bits of address designate page number
Virtual
Address
20 Bits
12 Bits
Page Number
Page Offset
4K Pages
Page Table
Physical
Address
Page Base Address
Page Offset
• No comparison or addition: Table lookup and bit substitution
• 1 page table per process: One entry per page in address space
– Base address of each page in physical memory
– Read/Write protection bits
• How many entries in page table?
Page Table Example
• Mapping of virtual addresses to physical memory
Address space 1
0x3000
4KB Pages
0x2000
0x1000
0x0000
Page Table for process 1
Free Page
Base Address
Protection
1
10
4
11
6
11
10
11
Free Page
Free Page
Physical Memory
Advantages of Paging
• Fast to allocate and free
– Alloc: Keep free list of pages and grab first page in list
• No searching by first-fit, best-fit
– Free: Add page to free list
• No inserting by address or size
• Easy to swap-out memory to disk
– Page size matches disk block size
– Can swap-out only necessary pages
– Easy to swap-in pages back from disk
Disadvantages of Paging
• Additional memory reference -> Inefficient
– Page table too large to store as registers in MMU
• Page tables kept in main memory
• MMU stores only base address of page table
• Storage for page tables may be substantial
– Simple page table -> Require entry for all pages in address space
• Even if actual pages are not allocated
– Solution: Hierarchical page tables
• Increase granularity of page table entries
• Internal fragmentation: Page size does not match allocation
size
– How much memory is wasted (on average) per process?
– Wasted memory grows with larger pages
Paging with Large Address Spaces
• Mapping of logical addresses to physical memory
• Page table for process
Base Address
Protection
0
10
1
10
4
11
… skipped entries..
00
6
11
10
11
How are entries skipped?
Free Page
Free Page
Physical Memory
Combine paging and segmentation
• Structure
– Segments correspond to logical units: code, data, stack
• Segments very in size and are often large
– Each segment contains one or more (fixed-size) pages
• But no longer needs to be contiguous
• Multiple ways to combine them:
– System 370: Each segment got own page tables
Seg #
(4 bits)
Page #
(8 bits)
Page offset
(12 bits)
Why 12 Bits?
– x86: First calculate segment offset then do page table lookup
• logical address -> linear address -> physical address
Segments + Pages Advantages
• Advantages of Segments
– Supports large memory regions
• Single entry can cover all memory
• Translation is fast and cheap
• Advantages of Paging
– Memory does not have to exist (on demand)
– Can remap memory without copying
• Advantages of both
– Can use protection of segments without preallocating
memory
– Other advantages?
Protected Mode + Paging
• Segmentation -> Paging -> Physical address
– Every address in a page table points to a physical address
• Virtual addresses are only an INDEX into page tables
• Page size: 4KB
– Data and page table pages
• Page table page?
– 1024 entries per page table page
• 2 Level Page Tables
– Page tables set via CR3 (What is this?)
– Top Level: Entire 4GB of virtual address space
– 2nd level: 4MB of virtual address space
• Large Pages
– Contiguous mappings of virtual addresses to physical addresses
Page Table formats
Paging Translation
Long Mode (64 bits)
• Segments no longer used
– Present but must be set to a flat model
• Addresses now 64 bits
– But pages are still 4KB
• Page table hierarchy now has 4 levels
– Check architecture manuals
• Page table pages now only include 512 entries
– Last level page table only covers 2MB of addresses
Early Memory (un)management
A history of the x86
• Simple layout with a single segment per
process
– Early batch monitors
– Personal computers
2N
OS
User
Process
0
• Disadvantages
– Only one process can run at a time
– Process can destroy OS
OS resides in
High memory
Process has memory
0 to OS break
Goals for Multiprogramming
• Sharing
– Several processes coexist in main memory
• Transparency
– Processes not aware memory is shared
– Run regardless of number and/or locations of processes
• Protection
– Cannot corrupt OS or other processes
– Privacy: Cannot read data of other processes
• Efficiency should not be severely degraded
– Purpose of sharing is to increase efficiency
– CPU and memory resources not wasted
Static Relocation
• Transparency == Relocation
– Processes can run anywhere in memory
• Can’t predict in advance
– Modify addresses statically (ala linking)
• when process is loaded
2N
OS
Process 3
• Advantages
– Allow multiple processes to run
– Requires no hardware support
Process 2
Process 1
0
Disadvantages of Static Relocation
• Process allocation must be contiguous
– Fragmentation: May not be able to allocate new process
• What Kind?
– Processes may not be able to increase address space
– Can’t move process after it has been placed
2N
OS
• No Protection:
Process 3
– Destroy other processes and/or OS
Process 2
Process 1
0
Dynamic Relocation
• Translate address dynamically at every reference
CPU
Logical
Addresses
MMU
Physical
Addresses
Memory
• Program-generated address translated to hardware
address
– Program addresses: Logical or virtual addresses
– Hardware addresses: Physical or real addresses
• Address space: View of memory for each process
Managing Processes with Segments
• Process Creation
– Find contiguous space for each segment
– Fill in each base and limit value in segment table
• Additional memory allocation when no contiguous space
– Compact memory (move all segments, update bases)
– Swap one or more segments to disk
• Context Switch
– Include segment table in process context
• Process Exit
– Free segments
Download