Selling an Idea or a Product
Download
Report
Transcript Selling an Idea or a Product
This lecture…
Options for managing memory:
–
–
–
–
–
Paging
Segmentation
Multi-level translation
Paged page tables
Inverted page tables
Comparison among options
Hardware Translation Overview
Virtual address
CPU
Translation
Box (MMU)
Physical
address
Physical
memory
Data read or write
(untranslated)
Think of memory in two ways:
– View from the CPU – what program sees, virtual memory
– View from memory – physical memory
Translation implemented in hardware; controlled in
software.
There are many kinds of hardware translation schemes.
Start with the simplest!
Base and Bounds
Each program loaded into contiguous regions of physical
memory, but with protection between programs.
First built in the Cray-1.
bounds
CPU
virtual
address
base
yes
<
no
+
physical
address Memory
MMU
error
relocation: physical addr = virtual addr + base register
protection: check that address falls in (base, base+bound)
Base and Bounds
Program has illusion it is running on its own dedicated machine,
with memory starting at 0 and going up to size = bounds.
Like linker-loader, program gets contiguous region of memory.
But unlike linker-loader, protection: program can only touch
locations in physical memory between base and base + bounds.
0
Code
bound
6250
Data
Virtual memory
stack
6250 + bound
Physical memory
Base and Bounds
Provides level of indirection: OS can move bits around
behind the program’s back, for instance, if program
needs to grow beyond its bounds, or if need to
coalesce fragments of memory.
Stop program, copy bits, change base and bounds
registers, restart.
Only the OS gets to change the base and bounds!
Clearly, user program can’t, or else lose protection.
Base and Bounds
With base&bounds system, what gets saved/restored
on a context switch?
– Everything from before + base/limit values
– Complete contents of memory out to disk (Called
“Swapping”)
Hardware cost:
– 2 registers, Adder, Comparator
– Plus, slows down hardware because need to take time to
do add/compare on every memory reference.
Base and bound tradeoffs
Pros:
–
Simple, fast
Cons:
1. Hard to share between programs
– For example, suppose two copies of “vi”
» Want to share code
» Want data and stack to be different
– Can’t do this with base and bounds!
2. Complex memory allocation
3. Doesn’t allow heap, stack to grow dynamically – want to put
these as far apart as possible in virtual memory, so that
they can grow to whatever size is needed.
Base and bound: Cons (complex allocation)
Variable-sized partitions
– Hole – block of available memory; holes of various size
are scattered throughout memory.
– New process allocated memory from hole large enough to
fit it
– Operating system maintains information about:
a) allocated partitions
b) free partitions (hole)
OS
process 5
OS
OS
process 5
process 5
process 9
10 arrive
9 arrive
8 done
OS
process 8
process 9
process 10
5 done
process 2
process 2
process 2
process 2
Dynamic Storage-Allocation Problem
How to satisfy a request of size n from a list of free
holes?
– First-fit: Allocate the first hole that is big enough.
– Best-fit: Allocate the smallest hole that is big enough; must
search entire list, unless ordered by size. Produces the
smallest leftover hole.
– Worst-fit: Allocate the largest hole; must also search
entire list. Produces the largest leftover hole.
First-fit and best-fit better than worst-fit in terms
of speed and storage utilization.
Particularly bad if want address space to grow
dynamically (e.g., the heap).
Internal Fragmentation
OS
Process 7
Process 4 request for
18,462 bytes
Process 4
Process 2
Hole of 18,464 bytes
Internal fragment of
2 bytes
Internal Fragmentation – allocated memory may be
slightly larger than requested memory but not being
used.
External Fragmentation
External Fragmentation - total memory space exists
to satisfy request but it is not contiguous
50-percent rule: one-third of memory may be
unusable.
– Given N allocated blocks, another 0.5N blocks will be lost
due to fragmentation.
OS
50k
125k
Process 9
?
process 3
process 8
100k
process 2
Compaction
Shuffle memory contents to place all free memory
together in one large block
Only if relocation dynamic!
Same I/O DMA problem
OS
OS
125k Process 9
50k
process 3
process 3 90k
process 8
process 8 60k
process 8
process 3
100k
process 2
OS
process 2
process 2
Segmentation
A segment is a region of logically contiguous memory.
Idea is to generalize base and bounds, by allowing a
table of base&bound pairs.
Virtual address: <segment-number, offset>
Segment table – maps two-dimensional user defined
address into one-dimensional physical address
– base - starting physical location
– limit - length of segment
Hardware support
– Segment Table Base Register
– Segment Table Length Register
Segmentation
Segmentation example
Assume 14 bit addresses divided up as:
– 2 bit segment ID (1st digit), and a 12 bit segment offset
physical memory
(last 3).
Virtual memory
0
Seg
base
limit
0 code
0x4000
0x700
1 Data
0x0000
0x500
2
-
3 Stack 0x2000 0x1000
Segment table
6ff
1000
14ff
0
4ff
2000
2fff
3000
3fff
where is 0x0240?
0x1108?
0x265c?
0x3002?
0x1600?
4000
46ff
Observations about Segmentation
This should seem a bit strange: the virtual address
space has gaps in it!
Each segment gets mapped to contiguous locations in
physical memory, but may be gaps between segments.
But a correct program will never address gaps; if it
does, trap to kernel and then core dump.
Minor exception: stack, heap can grow.
In UNIX, sbrk() increases size of heap segment.
For stack, just take fault, system automatically
increases size of stack.
Observations about Segmentation cont’d
Detail: Need protection mode in segmentation table.
For example, code segment would be read-only (only
execution and loads are allowed).
Data and stack segment would be read-write (stores
allowed).
What must be saved/restored on context switch?
– Typically, segment table stored in CPU, not in memory,
because it’s small.
– Might store all of processes memory onto disk when
switched (called “swapping”)
Segment Translation Example
Example: What happens with the segment table shown earlier,
with the following as virtual memory contents? Code does:
Physical memory
Initially PC = 240
Virtual memory strlen(x);
Main:
240
store 1108, r2
244
store pc +8, r31
248
jump 360
24c
…
…
Strlen: 360
loadbyte (r2), r3
jump (r31)
1108
666
…
Main: 4240
store 1108, r2
4244
store pc +8, r31
4248
jump 360
424c
…
Strlen: 4360
loadbyte (r2), r3
…
…
x:
108
...
…
420
x:
a b c \0
4420
jump (r31)
Segmentation Tradeoffs
Pro:
–
–
–
–
Efficient for sparse address spaces
Multiple segments per process
Easy to share whole segments (for example, code segment)
Don’t need entire process
in memory!!!
Con:
– Complex memory allocation
– Extra layer of translation
speed = hardware support
– Still need first fit, best fit, etc., and re-shuffling to
coalesce free fragments, if no single free space is big
enough for a new segment.
How do we make memory allocation simple and easy?
Paging
Logical address space can be noncontiguous; process is
allocated physical memory whenever available.
Divide physical memory into fixed-sized blocks called
frames.
Divide logical memory into blocks of same size called
pages (page size is power of 2, 512 bytes to 16 MB).
Simpler, because allows use of a bitmap. What’s a
bitmap?
001111100000001100
Each bit represents one page of physical memory – 1
means allocated, 0 means unallocated.
Lots simpler than base&bounds or segmentation
Address Translation Architecture
Operating system controls mapping: any page of
virtual memory can go anywhere in physical memory.
virtual address
CPU
error
Virtual page #
No
physical address
Phys frame #
Offset
Offset
d
Page table size
<
yes
p
f
PTBR
Page
table
Phys frame #
Page table
physical memory
Paging Example
Paging Example
Paging Tradeoffs
What needs to be saved/restored on a context
switch?
– Page table pointer and limit
Advantages
– no external fragmentation (no compaction)
– relocation (now pages, before were processes)
Disadvantages
– internal fragmentation
» consider: 2048 byte pages, 72,766 byte proc
35 pages + 1086 bytes = 962 bytes fragment
» avg: 1/2 page per process
» small pages!
– overhead
» page table / process (context switch + space)
» lookup (especially if page to disk)
Free Frames
Frame table: keeps track of which frames are
allocated and which are free.
Free frames (a) before allocation (b) After allocation
Implementation of Page Table
Page table kept in registers
Fast!
Only good when number of frames is small
Expensive!
Instructions to load or modify the page-table
registers are privileged.
Registers
Memory
Disk
Implementation of Page Table
Page table kept in main memory
Page Table Base Register (PTBR)
Page 0
Page 1
Virtual memory
0 2
1
1
Page table
PTBR
0
2 1
1
Page 1
2
Page 0
3
Physical memory
Page Table Length
Two memory accesses per data/inst access.
– Solution? Associative Registers or translation look-aside
buffers (TLBs).
Associative Register
Associative memory – parallel search
Page #
Frame #
Address translation (A´, A´´)
– If A´ is in associative register, get frame # out.
– Otherwise get frame # from page table in memory
TLB full – replace one (LRU, random, etc.)
Address-space identifiers (ASIDs): identifies each
process, used for protection, many processes in TLB
Translation Look-aside Buffer (TLB)
Paging Hardware With TLB
10-20% mem time
(Intel P3 has 32 entries)
(Intel P4 has 128 entries)
Effective Access Time
Associative Lookup = time unit
Assume memory cycle time is 1 microsecond
Hit ratio – percentage of times that a page number is found in
the associative registers; ratio related to number of associative
registers.
Hit ratio =
Effective Access Time (EAT)
EAT = (1 + ) + (2 + )(1 – )
=2+–
Example:
– 80% hit ratio, = 20 nanoseconds, memory access time = 100
nanoseconds
– EAT = 0.8 x 120 + 0.20 x 220 = 140 nanoseconds
Memory Protection
Protection bits with each frame
– “valid” - page in process’ logical address space
– “invalid” - page not in process’ logical address space.
Store in page table
Expand to more perms
14-bit address space –
– 0 to 16,383
Program’s addresses –
– 0 to 10,468
beyond 10,468 is illegal
Page 5 classified as valid
– Due to 2K page size,
– internal fragmentation
Multilevel Paging
Most modern operating systems support a very large
logical address space (232 or 264).
Example
–
–
–
–
logical address space = 32 bit
suppose page size = 4K bytes (212)
page table = 1 million entries (232/212 = 220)
each entry is 4 bytes, space required for page table = 4 MB
Do not want to allocate the page table contiguously in
main memory.
Solution
– divide the page table into smaller pieces (Page the page
table)
Two-Level Paging
page number
page offset
p1
p2
d
10
10
12
p1 – index into outer page table
p2 – displacement within the
page of the page table
On context-switch: save single
PageTablePtr register
Address-Translation Scheme
Address-translation scheme for a two-level 32-bit
paging architecture
Paging + segmentation: best of both?
simple memory allocation,
easy to share memory, and
efficient for sparse address spaces
Virtual address
virt seg # virt page #
Physical address
offset
phys frame# offset
page-table page-table
base
size
>
No
error
yes
Segment table
Physical memory
+
Phys frame #
Page table
Paging + segmentation
1.
2.
Questions:
What must be saved/restored on context switch?
How do we share memory? Can share entire segment, or a
single page.
Example: 24 bit virtual addresses = 4 bits of segment #, 8
bits of virtual page #, and 12 bits of offset.
Segment table
Page-table base Page-table size
0x2000
–
0x1000
–
0x14
–
0xD
–
Physical memory
What do the
0x1000
0x6
following addresses
0xb
translate to?
0x4
…
0x2000
0x13 0x002070?
0x2a 0x201016 ?
0x14c684 ?
0x3
0x210014 ?
…
portions of the page tables
for the segments
Multilevel translation
What must be saved/restored on context switch?
– Contents of top-level segment registers (for this example)
– Pointer to top-level table (page table)
Pro:
– Only need to allocate as many page table entries as we need.
» In other words, sparse address spaces are easy.
– Easy memory allocation
– Share at segment or page level (need additional reference
counting)
Cons:
– Pointer per page (typically 4KB - 16KB pages today)
– Page tables need to be contiguous
– Two (or more, if > 2 levels) lookups per memory reference
Hashed Page Tables
What is an efficient data structure for doing
lookups? Hash table.
Why not use a hash table to translate from virtual
address to a physical address.
Common in address spaces > 32 bits.
Each entry in the hash table contains a linked list of
elements that hash to the same location (to handle
collisions).
Take virtual page #, run hash function on it, index
into hash table to find page table entry with physical
page frame #.
Hashed Page Table
Hashed Page Table
Independent of size of address space,
Pro:
– O(1) lookup to do translation
– Requires page table space proportional to how many pages
are actually being used, not proportional to size of address
space – with 64 bit address spaces, this is a big win!
Con:
– Overhead of managing hash chains, etc.
Clustered Page Tables
– Each entry in the hash table refers to several pages (such as
16) rather than a single page.
Inverted Page Table
One entry for each real (physical) page of memory.
Entry consists of the virtual address of the page
stored in that real memory location, with information
about the process that owns that page.
Address-space identifier (ASID) stored in each entry
maps logical page for a particular process to the
corresponding physical page frame.
Inverted Page Table Architecture
Inverted Page Table
Pro:
– Decreases memory needed to store each page table
Con:
– increases time needed to search the table
Use hash table to limit the search
One virtual memory reference requires at least two
real memory reads: one for the hash table entry and
one for the page table.
Associative registers can be used to improve
performance.