Chương 5 – Quản lý bộ nhớ
SinhVienZone.com
/>
1
Nội dung
n
Tổng quan
n
n
n
Chuyển đổi đòa chỉ
n
n
n
Các công đoạn
Các mô hình chuyển đổi đòa chỉ
Vai trò Quản lý bộ nhớ của HĐH
n
n
Nhu cầu bộ nhớ của tiến trình
Các vấn đề về bộ nhớ
Các yêu cầu
Các mô hình tổ chức bộ nhớ
n
n
Mô hình Liên tục
Mô hình Không liên tục
SinhVienZone.com
/>
2
Tổng quan
n
Chương trình cần được nạp vào Bộ nhớ
chính để thi hành
n
n
n
n
CPU chỉ có thể truy xuất trực tiếp Main Memory
Chương trình khi được nạp vaò BNC sẽ được tổ
chức theo cấu trúc của tiến trình tương ứng
Ai cấp phát BNC cho tiến trình ?
Chương trình nguồn sử dụng đòa chỉ symbolic
n
n
Tiến trình thực thi truy cập điạ chỉ thực trong BNC
Ai chuyển đổi đòa chỉ ?
HĐH
Bộ phận Quản lý Bộ nhớ
Mô hình tổ chức ?
SinhVienZone.com
Cơ chế hỗ trợ
Chiến lược thực hiện
/>
3
Tổng quan : Các vấn đề về Bộ nhớ
n
Cấp phát Bộ nhớ :
n Uniprogramming :
Không khó
n Multiprogramming :
n
n
BNC giới hạn, N tiến trình ?
Bảo vệ ? Chia sẻ ?
Tiến trình thay đổi kích thước ?
n Tiến trình lớn hơn BNC ?
Chuyển đổi đòa chỉ tiến trình
n Thời điểm chuyển đổi đòa chỉ ?
n Công thức chuyển đổi ?
n
n
n
n
n
Phụ thuộc vào Mô hình tổ chức BNC ?
Cần sự hỗ trợ của phần cứng ?
Tiến trình thay đổi vò trí trong BNC ?
SinhVienZone.com
/>
4
Ví dụ
OS
Môi trường đa nhiệm
gcc
nachos
emacs
n
n
n
n
0x9000
0x7000
0x4000
0x3000
0x0000
Nếu nachos cần thêm không gian ?
Nếu nachos có lỗi và thực hiện thao tác ghi vào
đòa chỉ 0x7100?
Khi nào gcc biết rằng nó thường trú tại 0x4000?
Nếu emacs cần nhiều bộ nhớ hơn dung lượng
vật lý hiện có?
SinhVienZone.com
/>
5
Caùc böôùc chuyeån ñoåi chöông trình
C program: test.c
Compiler
Object:test.o
Linker
lib.o
Executable: test.exe
Loader
Memory
SinhVienZone.com
/>
6
Caùc böôùc huyeån ñoåi
source program -> .exe
SinhVienZone.com
/>
7
A.C
B.C
int x;
int y;
x = 12;
y = 5;
F();
F()
{
printf(“Hi”);
}
B.O
A.O
0 // x
2 // y
4 // [0] = 12;
5 // [2] = 5;
6 // jmp F
//external
// object
0 -2 // F() …
0 //
3 //
5 //
7 //
8 //
9 //
F()
x
y
[3] = 12;
[5] = 5;
jmp 0
OS
?
?
?
?
?
?
//
//
//
//
//
//
F()
x
y
[?] = 12;
[?] = 5;
jmp ?
Test.exe
SinhVienZone.com
/>
8
Thuật ngữ
n
n
n
n
Đòa chỉ logic – còn gọi là đòa chỉ ảo , là tất
cả các đòa chỉ do bộ xử lý tạo ra
Đòa chỉ physic - là đòa chỉ thực tế mà
trình quản lý bộ nhớ nhìn thấy và thao tác
Không gian đòa chỉ – là tập hợp tất cả các
đòa chỉ ảo phát sinh bởi một chương trình
Không gian vật lý – là tập hợp tất cả các
đòa chỉ vật lý tương ứng với các đòa chỉ ảo
SinhVienZone.com
/>
9
Nhu cau boọ nhụự cuỷa tieỏn trỡnh
low address
Tin trỡnh gm cú:
n
code segment
n
n
n
n
read from program file by exec
usually read-only
can be shared
data segment
n
n
n
initialized global variables (0 / NULL)
uninitialized global variables
heap
n
n
n
n
stack segment
n
n
n
n
n
n
n
8048314 <add>:
segment pointers
pid
program and stack pointers
code segment
8048314:
8048315:
push
mov
%ebp
%esp,%ebp
8048317:
804831a:
mov
add
0xc(%ebp),%eax
0x8(%ebp),%eax
804831d:
804831e:
pop
ret
%ebp
initialized variables
804831f <main>:
804831f:
push
%ebp
8048320:
8048322:
8048325:
mov
sub
and
%esp,%ebp
$0x18,%esp
$0xfffffff0,%esp
8048328:
mov
$0x0,%eax
804832d:
sub
%eax,%esp
804832f:
8048336:
movl
movl
$0x0,0xfffffffc(%ebp)
$0x2,0x4(%esp,1)
movl
call
$0x4,(%esp,1)
8048314 <add>
mov
leave
%eax,0xfffffffc(%ebp)
804834d:
804834e:
804834f:
ret
nop
variables in a function
804833e:
8048345:
stored register states (e.g. calling function
EIP)
804834a:
grows against lower addresses
system data segment (PCB)
n
n
dynamic memory
e.g., allocated using malloc
grows against higher addresses
system data segment (PCB)
uninitialized variables
data segment
process A
heap
...
Stack cho cỏc thread
stack
possible
stacks
for more threads
high address
SinhVienZone.com
data segment
n
/>
10
Logical and Physical Address Spaces
SinhVienZone.com
/>
11
Truy xuất bộ nhớ
n
Đòa chỉ của Instruction và data trong program
source code là symbolic:
n
n
n
n
n
goto errjmp;
X = A + B;
Những đòa chỉ symbolic này cần được liên kết
(bound) với các đòa chỉ thực trong bộ nhớ vật lý
trước khi thi hành code
Address binding: ánh xạ đòa chỉ từ không gian
đòa chỉ (KGĐC) này vào KGĐC khác
Thời điểm thực hiện address binding ?
n
n
n
compile time
load time
execution time.
SinhVienZone.com
/>
12
Thời điểm kết buộc đòa chỉ ?
Có thể thực hiện việc kết buộc đòa chỉ
tại 1 trong 3 thời điểm :
n
§
Compile-time:
Phát sinh đòa chỉ tuyệt đối
Phải biết trước vò trí nạp chương trình
Phải biên dòch lại chương trình khi vò trí nạp thay
đổi
§
§
§
§
Load-time:
Khi biên dòch chỉ phát sinh đòa chỉ tương đối
Khi nạp, biết vò trí bắt đầu sẽ tính lại đòa chỉ
tuyệt đối
Phải tái nạp khi vò trí bắt đầu thay đổi
§
§
§
§
Execution-time:
Khi biên dòch,nạp chỉ phát sinh đòa chỉ tuong đối
Trì hoãn thời điểm kêt buộc đòa chỉ tuyệt đối đến
khi thi hành
Khi đó ai tính toán đòa chỉ tuyệt đối ?
§
§
§
§
Phần cứng :
SinhVienZone.com
MMU
/>
13
Chuyeån ñoåi ñòa chæ
MMU
gcc
Translation box
Load Store
CPU
virtual
address
data
SinhVienZone.com
legal addr?
Illegal?
Physical
address
Physical
memory
error
/>
14
CPU, MMU and Memory
SinhVienZone.com
/>
15
Yêu cầu quản lý bộ nhớ
Tăng hiệu suất sử dụng CPU
n
Cần hỗ trợ Multiprogramming
n
n
n
Lưu trữ cùng lúc nhiều tiến trình trong BNC ?
Các yêu cầu khi tổ chức lưu trữ tiến
trình:
1.
2.
3.
4.
5.
Relocation
Protection
Sharing
Logical Organization
Physical Organization
SinhVienZone.com
/>
16
Tái đònh vò (Relocation)
n
n
Không biết trước chương trình sẽ được nạp
vào BN ở vò trí nào để xử lý.
Một tiến trình có thể được di dời trong bộ
nhớ sau khi đã nạp C
n
n
Tiến trình tăng trưởng ?
HĐH sắp xếp lại các tiến trình để có thể sử
dụng BNC hiệu qủa hơn.
SinhVienZone.com
/>
17
Bảo vệ (Protection)
n
n
n
Không cho phép tiến trình truy cập đến
các vò trí nhớ đã cấp cho tiến trình khác
(khi chưa có phép).
Không thể thực hiện việc kiểm tra hợp lệ
tại thời điểm biên dòch hay nạp, vì
chương trình có thể được tái đònh vò.
Thực hiện kiểm tra tại thời điểm thi hành
n
Cần sự hỗ trợ của phần cứng.
SinhVienZone.com
/>
18
Chia sẻ (Sharing)
n
Cần cho phép nhiều tiến trình tham
chiếu đến cùng một vùng nhớ mà không
tổn hại đến tính an toàn hệ thống :
n
n
Tiết kiệm chỗ lưu trữ cho các module dùng
chung.
Cho phép các tiến trình cộng tác có khả năng
chia sẻ dữ liệu.
SinhVienZone.com
/>
19
Tổ chức logic (Logical Organization)
n
Người dùng viết chương trình gồm nhiều
module, với các yêu cầu bảo vệ cho từng
module có thể khác nhau:
n
n
n
n
instruction modules : execute-only.
data modules : read-only hay read/write.
một số module là private, số khác có thể là
public.
OS cần hỗ trợ các cơ chế có thể phản
ánh mô hình logic của chng trình
SinhVienZone.com
/>
20
Tổ chức vật lý (Physical Organization)
n
n
Cấp phát vùng nhớ vật lý sao cho hiệu
quả
Và dễ dàng chuyển đổi chương trình qua
lại giữa BNChính và BNPhụ
SinhVienZone.com
/>
21
Các mô hình tổ chức bộ nhớ
n
Cấp phát Liên tục (Contigous Allocation)
n
n
n
Linker – Loader
Base & Bound
Cấp phát Không liên tục (Non Contigous
Allocation)
n
n
Segmentation
Paging
SinhVienZone.com
/>
22
Cấp phát Liên tục (Contigous Allocation)
n
Nguyên tắc :
n
n
n
n
Không gian đòa chỉ : liên tục
Không gian vật lý : có thể tổ chức
n
n
n
Chương trình được nạp toàn thể vào BNC để
thi hành
Cần một vùng nhớ liên tục, đủ lớn để chứa
Chương trình
Fixed partition
Variable partition
2 mô hình đơn giản
n
n
Linker – Loader
Base & Bound
SinhVienZone.com
/>
23
Fixed Partitioning
n
n
Phân chia KGVL thành
các partitions
Có 2 cách phân chia
partitions :
n
n
n
kích thước bằng nhau
kích thước khác nhau
Mỗi tiến trình sẽ được
nạp vào một partition
để thi hành
n
Chiến lược cấp phát
partition ?
SinhVienZone.com
/>
24
Chiến lược cấp phát partitions cho tiến trình
n
Kích thước partition
bằng nhau
n
n
không có gì phải suy
nghó !
Kích thước partition
không bằng nhau :
n
Sử dụng nhiều hàng đợi
n Cấp cho tiến trình
partition với kích
thước bé nhất (đủ lớn
để chứa tiên trình)
n Khuyết điểm : phân
bố các tiến trình vào
các partition không
đều, một số tiến trình
phải đợi trong khi có
SinhVienZone.com
/>
25