Professional Documents
Culture Documents
Ch6 Memory
Ch6 Memory
1
Quaûn lyù boä nhôù
< Kernel chieám moät vuøng coá ñònh cuûa boä nhôù, vuøng coøn laïi
daønh ñeå caáp phaùt cho caùc process
< Caáp phaùt vuøng nhôù cho caùc process sao cho heä thoáâng
hoaït ñoäng hieäu quaû
l Vd: Naïp caøng nhieàu process vaøo boä nhôù caøng toát ñeå gia taêng
möùc ñoä multiprogramming
< Quaûn lyù boä nhôù
l Caáp phaùt vuøng nhôù cho caùc process
l Baûo veä: kieåm tra truy xuaát boä nhôù coù hôïp leä khoâng
l Chia seû: cho pheùp caùc process chia seû vuøng nhôù chung
l Chuyeån ñoåi ñòa chæ luaän lyù sang ñòa chæ vaät lyù
2
Layout bộ nhớ
Process A
Process B
Uni-programming Multi-programming
3
Caùc kieåu ñòa chæ nhôù (1/2)
< Ñòa chæ vaät lyù -- physical (memory) address -- laø ñòa chæ
maø CPU, hay MMU (neáu coù), göûi ñeán boä nhôù chính
< Ñòa chæ luaän lyù (logical address) laø ñòa chæ maø moät quaù
trình sinh ra
< Caùc ñòa chæ sinh bôûi trình bieân dòch (compiler) laø
l töông ñoái hay khaû taùi ñònh vò (relocatable): compiler giaû thieát
khoâng gian ñòa chæ cuûa ñôn vò bieân dòch (compilation unit) baét ñaàu
töø ñòa chæ 0
hoaëc
l tuyeät ñoái: keát quaû bieân dòch coù theå naïp ñöôïc ngay vaøo boä nhôù ñeå
thöïc thi; ít ñöôïc duøng
4
Caùc kieåu ñòa chæ nhôù (2/2)
< Khi moät leänh ñöôïc thöïc thi, caùc ñòa chæ luaän lyù phaûi ñöôïc
chuyeån ñoåi thaønh ñòa chæ vaät lyù
l Söï chuyeån ñoåi naøy thöôøng coù söï hoã trôï cuûa phaàn cöùng ñeå ñaït
hieäu naêng cao
5
Không gian nhớ quá trình
6
Töø maõ nguoàn ñeán file thöïc thi ñöôïc
< Linker: keát hôïp caùc object module thaønh moät file thöïc thi ñöôïc
l taùi ñònh vò ñòa chæ töông ñoái vaø phaân giaûi caùc external reference
l keát hôïp caùc object module thaønh moät load module (file nhò phaân khaû thöïc
thi)
System
static linking
library
< Linker chuyeån ñoåi ñòa chæ töông ñoái sang ñòa chæ tuyeät ñoái
0 Module A 0 Module A
relocatable
CALL B
object modules JMP “L”
length L
L + M - 1 Return
M-1 Return
L+M Module C
0 Module C
length N
L+M+N-1 Return
N-1 Return
8
Chuyeån ñoåi ñòa chæ
< Chuyeån ñoåi ñòa chæ: quaù trình aùnh xaï moät ñòa chæ töø khoâng
gian ñòa chæ naøy sang khoâng gian ñòa chæ khaùc
< Bieåu dieãn ñòa chæ nhôù
l Trong source code: symbolic (caùc bieán, haèng, pointer…)
l Vaøo thôøi ñieåm bieân dòch: thöôøng laø ñòa chæ töông ñoái
4 Ví duï: a ôû vò trí 14 byte so vôùi vò trí baét ñaàu cuûa module
l Thôøi ñieåm linking/loading: coù theå laø ñòa chæ tuyeät ñoái
0 2000
int i;
goto p1;
p1
250 2250
symbolic address relative address
physical memory
9
Sinh ñòa chæ vaät lyù
10
Tieát kieäm vuøng nhôù
11
Dynamic linking (1)
(external module) ñöôïc thöïc hieän sau khi ñaõ taïo xong L
l MS Windows: module ngoaøi laø caùc file .dll
l Unix: module ngoaøi laø caùc file .so (shared library)
< Load module chöùa caùc stub tham chieáu (refer) ñeán caùc
routine cuûa external module
l Khi process goïi routine laàn ñaàu, stub seõ kích hoaït naïp routine
vaøo boä nhôù (neáu routine chöa ñöôïc naïp tröôùc ñoù), thay theá ñòa
chæ mình baèng ñòa chæ routine, vaø goïi routine ñeå thöïc thi
l Caùc laàn goïi routine sau seõ xaûy ra bình thöôøng, khoâng toán
overhead
12
Dynamic linking (2)
0x08048000 main:
program ...
call printf
printf:
... copy từ libc
ret
13
Dynamic linking (3)
0x40001234
printf:
libc ...
ret
< Chöông trình thöïc thi coù theå goïi phieân baûn môùi (ví duï
phieân baûn ñaõ söûa loãi) cuûa external module maø khoâng
caàn ñöôïc söûa ñoåi vaø/hay bieân dòch laïi
< Chia seû maõ (code sharing): chæ caàn naïp external module
vaøo boä nhôù moät laàn
l Caùc process söû duïng dynamic link vôùi external module naøy chia
seû vuøng maõ cuûa external module Þ tieát kieäm khoâng gian nhôù vaø
khoâng gian ñóa
15
Dynamic linking
< Caùc external module thöôøng laø thö vieän cung caáp caùc
tieän ích (như libc)
< Stub caàn söï hoã trôï cuûa OS
l Kieåm tra xem routine ñaõ ñöôïc naïp vaøo boä nhôù chöa
16
Dynamic loading (1)
< Chæ khi naøo caàn ñöôïc goïi ñeán thì moät thuû tuïc môùi ñöôïc
naïp vaøo boä nhôù chính
l Caùc thuû tuïc khoâng ñöôïc goïi ñeán seõ khoâng chieám choã trong boä
nhôù
< Raát hieäu quaû khi chöông trình coù khoái löôïng lôùn maõ coù
taàn suaát söû duïng thaáp (ví duï caùc thuû tuïc xöû lyù loãi)
17
Dynamic loading (2)
< Caùc thuû tuïc ñeå ngöôøi duøng thöïc hieän dynamic loading
trong UNIX:
l dlopen() – Open moät file thö vieän
l dlsym() – Doø tìm moät kyù hieäu (symbol) trong file thö vieän
l dlclose() – Close moät file thö vieän
18
Dynamic loading – Ví duï
19
Kyõ thuaät overlay (1/2)
< Chæ giöõ trong boä nhôù nhöõng leänh hoaëc döõ lieäu caàn thieát,
giaûi phoùng caùc leänh/döõ lieäu chöa hoaëc khoâng caàn duøng
ñeán
< Kyõ thuaät naøy raát höõu duïng khi kích thöôùc moät process
lôùn hôn kích thöôùc vuøng nhôù caáp cho noù
< Quaù trình töï ñieàu khieån vieäc overlay (coù söï hoã trôï cuûa
thö vieän laäp trình)
< Coù theå ñöôïc xem laø tieàn thaân cuûa kyõ thuaät “boä nhôù aûo”
20
Kyõ thuaät overlay (2/2)
Pass 1 70K Ñôn vò: byte
Pass 2 80K symbol
20K
Symbol table 20K table
Common routines 30K
Assembler common
30K
routines
Total memory
available = 150KB overlay
10K
driver naïp vaø thöïc thi
pass 1 pass 2
70K 80K
21
Swapping
< Cô cheá: di chuyeån moät process khoûi boä nhôù chính vaø löu
treân boä nhôù phuï (swap out). Khi thích hôïp, naïp process
vaøo boä nhôù (swap in) ñeå coù theå tieáp tuïc thöïc thi
< Chính saùch:
l Round-robin: swap out P1 (vöøa tieâu thuï heát quantum cuûa noù),
swap in P2 , thöïc thi P3 ,…
l Roll out, roll in: duøng trong ñònh thôøi theo ñoä öu tieân (priority-
based scheduling)
4 Process coù ñoä öu tieân thaáp hôn seõ bò swap out nhöôøng choã
cho process coù ñoä öu tieân cao hôn vöøa ñeán
22
Swapping -- Cô cheá
23
Vaán ñeà caáp phaùt boä nhôù lieân tuïc
< Trong phaàn coøn laïi cuûa chöông naøy, moâ hình quaûn lyù boä
nhôù laø moät moâ hình ñôn giaûn [khoâng duøng “boä nhôù aûo”!]
l Moät process phaûi ñöôïc naïp hoaøn toaøn vaøo boä nhôù (ngoaïi tröø khi
duøng kyõ thuaät overlay) vaø nằm lieân tuïc (contiguous)
< Seõ thaûo luaän caùc giaûi phaùp caáp phaùt boä nhôù sau
l Phaân chia coá ñònh (fixed partitioning)
l Phaân chia ñoäng (dynamic partitioning)
24
Hieän töôïng phaân maûnh
25
Phaân maûnh noäi
(used)
26
Fixed partitioning (1)
27
Giaûi phaùp fixed partitioning (2)
< Neáu process coù kích thöôùc lôùn hôn partition thì phaûi
duøng kyõ thuaät overlay
< Khoâng hieäu quaû do bò phaân maûnh noäi: moät quaù trình duø
lôùn hay nhoû ñeàu ñöôïc caáp phaùt troïn moät partition
28
Chieán löôïc placement khi fixed partitioning (1/3)
< Tröôøng hôïp caùc partition coù kích thöôùc baèng nhau
l Neáu coøn partition troáng Þ process môùi seõ ñöôïc naïp vaøo partition
ñoù
l Neáu khoâng coøn partition troáng, nhöng coù process ñang bò
blocked Þ swap out process ñoù ra boä nhôù phuï, daønh partition
cho process môùi
29
Chieán löôïc placement khi fixed partitioning (2/3)
30
Chieán löôïc placement khi fixed partitioning (3/3)
31
Giaûi phaùp dynamic partitioning
< Soá löôïng vaø vò trí partition khoâng coá ñònh vaø partition coù theå coù kích
thöôùc khaùc nhau
< Moãi process ñöôïc caáp phaùt chính xaùc dung löôïng boä nhôù caàn thieát
< Gaây ra hieän töôïng phaân maûnh ngoaïi
32
Chieán löôïc placement khi dynamic partitioning
33
Nhaän xeùt
< Caû hai giaûi phaùp fixed vaø dynamic partitioning haàu nhö
khoâng coøn ñöôïc duøng trong caùc heä thoáng hieän ñaïi
34