chapter8_memoryManagment
chapter8_memoryManagment
Memory Management
Objectives
Program must be brought (from disk) into memory and placed within a process for it to
be run
Main memory and registers are only storage CPU can access directly
Register access in one CPU clock (or less)
Main memory can take many cycles
Cache sits between main memory and CPU registers
Protection of memory required to ensure correct operation
Background
Main Memory
CPU cache
instructions
Registers
data Process
program image
in memory
Operating
System
Disk
Program addresses and
memory
When code is generated (or assembly
program is written) we use memory func variable
addresses for variables, functions and
branching/jumping. func variable
func variable
Those addresses can be physical or logical
memory addresses. main
program
In very early systems they are just physical
memory addresses.
A program has to be loaded to that
address to run.
No relocation
Program addresses and
memory
Assume they are physical addresses 44 RAM
physical addresses
40 of RAM
36
Program
32
28
Add 12
24
Mov 8
20
… 4
16
Jump 8 0
Add 12
Mov 8
… 4
Jump 8 0
Program addresses and
memory
44 RAM
40 physical addresses
of RAM
36
32
Cmp 28
Program 2
Sub 24
Program 1 Program 2
… 20
Jump 12 16
Add 12 Cmp 12
Add 12
Mov 8 Sub 8 Program 1
Mov 8
… 4 … 4
… 4
Jump 8 0 Jump 12 0
Jump 8 0
Logical address space
concept
We need logical address space concept, that is
different that the physical RAM (main RAM
memory) addresses. phy_max
0
Logical address space has to be mapped
somewhere in physical memory 0
Base and Limit Registers
A pair of base and limit registers define the address space of a process
A process should be accessing
and using that range.
Logical and physical addresses are the same in compile-time and load-time address-
binding schemes; logical (virtual) and physical addresses differ in execution-time
address-binding scheme
Logical and physical
addresses
CPU Main Memory (RAM)
base limit 60
24 32 56
int x 52
PC int y; 48
physical addresses
M[28+base] cmp .. 44
IR mov r1, M[28] mov r1, M[28] 40
M[28+24] mov r2, M[24] 36
M[52] add r1, r2, r3 32
a relocatable program
28 int x jmp 16 28
logical addresses
24 int y; mov .. 24
20 cmp ..
20
16 mov r1, M[28]
16
12 mov r2, M[24]
12
08 add r1, r2, r3
08
04 jmp 16
04
00 mov ..
00
Memory-Management Unit (MMU)
In MMU scheme, the value in the relocation register (i.e., base register) is added to every
address generated by a user process at the time it is sent to memory
The user program deals with logical addresses; it never sees the real physical addresses
Dynamic relocation using a
relocation register
Contiguous Memory Allocation
(Dynamic Memory Allocation Problem)
Main memory is partitioned usually into two partitions:
Resident operating system, usually held in low memory with interrupt vector
User processes then held in high memory
Relocation registers used to protect user processes from each other, and from changing operating-
system code and data
Base register contains value of smallest physical address
Limit register contains range of logical addresses – each logical address must be less than the
limit register
MMU maps logical addresses dynamically
Basic Memory Allocation
Strategies
In this chapter, we will cover 3 basic main memory allocation strategies to processes
1) Contiguous allocation
2) Paging
3) Segmentation
Hardware Support for Relocation and Limit
Registers
Contiguous Allocation (Cont)
Multiple-partition allocation
Hole – block of available memory; holes of various size are scattered throughout memory
When a process arrives, it is allocated memory from a hole large enough to accommodate it
Operating system maintains information about:
a) allocated partitions b) free partitions (hole)
OS OS OS OS
process 8 process 10
Physical address space of a process can be noncontiguous; process is allocated physical memory
whenever the latter is available
Physical address space will also be noncontiguous.
Divide physical memory into fixed-sized blocks called frames (size is power of 2, between 512
bytes and 8,192 bytes)
Divide logical memory into blocks of same size called pages
Keep track of all free frames
To run a program of size n pages, need to find n free frames and load program
Set up a page table to translate logical to physical addresses
Internal fragmentation
Paging
RAM (Physical Memory)
a program
0
0
logical address space
1 a frame
1 (size = 2x)
2
2
3
3
4 physical memory:
4
5 set of fixed sized
5 frames
7
program: set of pages
6
8
Page size = Frame size
9
Paging
a program 0
0 0 1
1 2 2
RAM
2 3
3 load 1 4
4 5
5 0 mapped_to 1 3 7
1 mapped_to 4
2 mapped_to 2 5 6
3 mapped_to 7 8
4 mapped_to 9
page table 5 mapped_to 6 4 9
Example
Address Translation Scheme
– Assume Logical Addresses are m bits. Then logical address space is 2m bytes.
– Assume page size is 2n bytes.
32 byte memory
LA = 11
PA = ?
11 is 1011
PA = 00111
offset
page (dispacement) LA = 13
number inside PA = ?
page
13 is 1101
PA = 01001
Address translation example
2
0000
m=3; 23 = 8 logical addresses 2 bits for offset
0001 frame 00
n=2; page size = 22 = 4
0010
000 A 0011
001 B 0100
page 0
010 C 0101
011 D frame 01
0110
100 E 0111
1 bit for page# page 1 101 F 1000 E
110 G 1001 F frame 10
111 H 1010 G
Logical Memory 1011 H
page table 1100 A
0 11 1101 B frame 11
1 10 1110 C
each entry is used to map 1111 D
4 addresses (page size addresses) 2 bits for frame# Physical Memory
Free Frames
OS keeps info
about the frames
in its frame table
The two memory access problem can be solved by the use of a special fast-lookup hardware
cache called associative memory or translation look-aside buffers (TLBs)
Some TLBs store address-space identifiers (ASIDs) in each TLB entry – uniquely identifies
each process to provide address-space protection for that process
Implementation of Page
Table
RAM
Program Program
CPU
P1 P2
PC
Currently running
process is process 1 (P1)
PCB1 PCB2
TLB Associative Memory
• Associative memory – parallel search
Page # Frame #
Hierarchical Paging
00
01
00
01
10
11
10
PT
11
PT
Log Mem Log Mem
Two-Level Paging Scheme
Two-Level Paging Scheme
logical address logical address
offset offset
00
0000 01
0001 10
0010 11
0011
0100 00
0101 01
0110 00 10
0111 01 11
1000 10
1001 11 00
1010 01
1011 10
1100 11
1101
1110
1111 two-level 00
01
single level page table 10
Page table 11
Two-Level Paging Example
• A logical address (on 32-bit machine with 1K page size) is divided into:
– a page number consisting of 22 bits
– a page offset consisting of 10 bits
• Since the page table is paged, the page number is further divided into:
– a 12-bit page number
– a 10-bit page offset
• Thus, a logical address is as follows:
12 10 10
where pi is an index into the outer page table, and p2 is the index into the
inner page table
Address-Translation Scheme
Example(Duplicate): two level
page table need
logical address length = 32 bits
pagesize = 4096 bytes
used 8 MB
logical address division: 11, 9, 12
64 bit addresses
Hashed Page Tables
Common in address spaces > 32 bits
Virtual page numbers are compared in this chain searching for a match
If a match is found, the corresponding physical frame is extracted
Hashed Page Table
frame number
virtual page number
Inverted Page Table
• One entry for each real page frame of physical memory
• Entry consists of the page number of the virtual page stored in that real memory
location (frame), with information about the process that owns that page
• Entry content: <pid, virtual page number>
• Decreases memory needed to store each page table, but increases time needed to
search the table when a page reference occurs
Inverted Page Table
Architecture
Linear Address in Linux
Broken into four parts:
• In a 32 bit Intel machine, that uses two-level paging, we ignore the middle directory (its size is 0), and use 3 parts.
Three-level Paging in Linux
Linux Paging: some kernel
structures
struct task_struct
{
…
…
struct mm_struct *mm;
struct mm_struct
} {
the PCB object …
top level
of a process X pgd_t *pgd;
page table
….
of process X
}
(called
mm object
page
of process X
global
(keeps memory
directory)
management
related
information)