本文是我在上UCSD的 CSE 120: Principles of Operating Systems (Winter 2020) 整理的笔记,这一课主要介绍了操作系统里面逻辑内存的概念,包括页(page)和段(segment)的概念和实现。
Introduction
-
Definition
- Logical memory = a process’s memory
- As viewed (referenced) by a process
- Allocated without regard to physical memory
-
Problems with sharing memory
-
The addressing problem
- Compiler generates memory reference
- Unknown where process will be located
-
The protection problem
- Modifying another process’s memory
-
The space problem
- The more processes there are, the less memory each individually can have
-
-
Logical vs. Physical Addressing
-
Logical addresses
- Assumes seperate memory starting at 0
- Compiler generated
- Independent of location in physical memory
-
Convert logical to physical
- Via software: at load time
- Via hardware: at access time
-
Hardware for Logical addressing
- Base register filled with start address
- To translate logical address, add base
- Achieves relocation
- To more process: change base
-
Protection
-
Bound register works with base register
-
Is address < bound
- Yes: add to base
- No: invalid address, TRAP
-
Achieves protection
-
-
Memory Registers are part of context
-
On every context switch
- Load base/bound register for selected process
- Only kernel does loading of these register
- Kernel must be proetced from all processes
-
Benefit
- Allows each proces to be seperated located
- Protecs each process from all others
-
-
-
Process mempory allocation
-
Process address space
-
Text: program instruction
- excute-only, fixed size
-
Data: varaible (static, heap)
- read/write, variable size
- dynamic allocation by request
-
Stack: activation records, local variable
- read/write, varibale size
- Automatic growth/shrinkage
-
-
Fitting process into memory
- Must find large enough hole
- May not succeed even if enought fragment space
- Even successul, it’s inefficient since space must be allocated for potential growth area
-
Solution: break process into pieces
- Distribute into available holes
- Two approaches: Segment and Page
-
Segementation
-
Segemented Address Space
-
Address space is a set of segments
-
Segment: a linearly addressed memory
- Typically contains logically-related information
- Examples: program code, data, stack
-
Each segment has an identifier s, and a size N
- s between 0 and S-1, S = max number of segments
-
Logical addresses are of the form (s, i)
- offset i within segment s, i must be less than N
-
Example
-
-
Segment-based address translation
-
Problem: how to translate a logical address (s, i) into physical address a?
-
Solution: use a segment (translate) table (ST)
- to segment s into base physical address b = ST(s)
- then add b and i
-
physical address a = ST(s) + i
-
-
Segment Table
-
One table per process (typically)
-
Table entry elements
- V: valid bit
- Base: segment location
- Bound: segment size
- Perm: permissions
-
Location in memory given by
- Segment table base register(hardware)
- Segment table size register(hardware)
-
Address translation
-
physical address a = base of s + i
-
do a series of checks
-
s < STSR? -> is segment identifier valid or not?
-
V == 1? -> the corresponding entry is valid?
-
i < Bound? -> logical address is out of bound?
-
Perm(op) -> that block has required operation(r/w/x)?
-
Then access that physical address
-
-
-
-
Sizing the segment table
-
Given 32 bit logical, 1 GB physical memory (max)
- 5 bit segment number, 27 bit offset
-
Logical address
-
Segement s: number of bits n specifies maxsize of table, where number of entries =
$2^n$
- if 32 entries, n = 5
-
Offset i: number of bits n specifies maxsize of segment
- 27 bits needed to size up to 128MB
-
-
segment table
-
V: 1 bit
-
Base: number of bits needed to address physical memory
- 30 bits needed to address 1GB
-
Bound: number of bits needed to specify max segment size
- 27 bits needed to size up to 128MB
-
Perm: assume 3 bit (r/w/x)
-
one entry:
$1 + 30 + 27 + 3 + ... = 61$
+ bits$\approx$
8 bytes -
whole table: 32 * 8 = 256 bytes
-
-
-
Pros and Cons
-
Pros: Each segment can be
- located independently
- seperately protected
- grown/shrunk independently
- Segments can be shared by processes (via segment table)
-
Cons: Variable-size allocation
- Difficult to find holes in physical memory
- External fragmentation
-
Paging
-
Paged Address Space
-
Logical (process) memory
- Linear sequence of pages
-
Physical memory
- Linear sequence of frames
-
Pages and frames
- Frame: a physical unit of information
- A page fits exactly into a frame
- Fixed size, all pages/frames same size
-
-
Page-based Logical Addressing
-
Form of logical address: (p, i)
- p is page number, 0 to N - 1
- i is offset within page, since page size is fixed, i is guaranteed to be less than page size, no need to check
-
Size of logical address space
$N_L$
= max number of pages$N_L \times$
page size = size of logical address space
-
-
Frame-based Physical Addressing
-
Form of physical address: (f, i)
- f is frame number, 0 to N - 1
- i is offset within frame, less than frame size
-
Size of physical address space
$N_p$
= max number of frames$N_p \times$
frame size = size of physical address space
-
-
Page-based address translation
-
Problem: how to translate logical address (p, i) into physical address (f, i)
-
Solution: use a page (translation) table PT
- translate page p into frame f = PT(p)
- then concatenate f and i
-
Physical address (f, i) = PT(p) || i = (PT(p), i)
-
-
Page table
-
Each page of logical memory correspondings to entry in page table
-
Page table maps logical page into frame of physical memory
-
One table per process (typically)
-
Table entry elements
- V: valid bit
- DPB: demand paging bits
- Frame: page location
-
Location in memory given by
- Page table base register(PTBR) (hardware)
- Page table size register(PTSR) (hardware)
-
Address translation
-
Physical address = frame of p || offset i
-
Do a series of checks (similar to segmenatation)
- p < PTSR?
- V == 1?
- Perm(op)?
-
-
-
Sizing the page table
-
Given 32 bit logical, 1 GB physical memory (max)
- 20 bit page number, 12 bit offset
-
Logical address
- page p: 20 bits to address
$2^{20} =$
1M entries - offset i: 12 bits, page size = frame size =
$2^{12} =$
4096 bytes.
- page p: 20 bits to address
-
Page table
- V: 1 bit
- DPB: 3 bits
- Frame: 18 bits to address
$2^{30}/2^{12}$
frames - Perm: 3bits
- One entry:
$1+3+18+3+...= 25$
+ bits$\approx$
4 bytes - Whole table size = 1M * 4 = 4 MB
-
Address translation
-
Segments vs. Pages
-
Segment is good “logical” unit of information
- Can be sized to fit any contents
- Makes sense to share (e.g., code, data)
- Can be protected according to contents
-
Page is good “physical” unit of information
- Simple memory management
-
-
Combining segments and pages
-
Logical memory
- composed of segments
-
Each segment
- composed of pages
-
Segment table
- Maps each segment to a page table
-
Page tables
- Maps each page to physical page frames
-
-
Address Translation
-
Logical address: [segment s, page p, offset i]
-
Do various checks
- s < STSR, V == 1, p < bound, perm(op)
- May get a segmentation violation
-
Use s to index segment table to get page table
-
Use p to index page table to get frame f
-
Physical address = concatenate (f, i)
-
More on addressing
-
Cost of translation
-
Each lookup costs another memory reference
- For each reference, additional references required
- Slows machine down by factor of 2 or more
-
Take advantage of locality of reference
- Most references are to a small number of pages
- Keep translation of these in high-speed memory
-
Problem: don’t know which pages till accessed
-
-
Translation Look-aside Buffer (TLB)
-
Fast memory keeps most recent translations
-
If key matches, get frame number
-
else wait for normal translation (in parallel)
-
-
Translation Cost with TLB
-
Cost is determined by
- Speed of memory: ~100 nsec
- Speed of TLB: ~5 nsec
- Hit ratio: fraction of refs satisfied by TLB, ~99%
-
Speed with no address translation: 100 nsec
-
Speed with address translation
- TLB miss: 200 nsec (100% slowdown)
- TLB hit: 105 nsec (5% slowdown)
- Average: 105 x 0.99 + 200 x 0.01 ~ 106 nsec
-
-
TLB Design Issues
-
The larger the TLB
- the higher the hit rate
- the slower the reponse
- the greater the expense
-
TLB has a major effect on performance!
- Must be flushed on context switched
- Alternative: tagging entries with PIDs
-