Download as pdf or txt
Download as pdf or txt
You are on page 1of 34

Boä Nhôù Thöïc

< Caùc kieåu ñòa chæ nhôù


< Chuyeån ñoåi ñòa chæ nhôù
< Overlay vaø swapping
< Vaán ñeà caáp phaùt boä nhôù lieân tuïc (contiguous memory
allocation)
l Giaûi phaùp fixed partitioning
l Giaûi phaùp dynamic partitioning

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ớ

Operating System Operating System

Process A

Current Program Process C

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

dynamic linking System


library
7
Thöïc hieän (static) linking

< 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-1 Return L-1 Return


L Module B
0 Module B

load module JMP “L+M”


CALL C length M

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ù

< Trong khi thöïc thi


l Ñòa chæ ñöôïc chuyeån ñoåi ñoäng trong khi thöïc thi
l Khoâng gian ñòa chæ vaät lyù coù theå noncontiguous
l Caàn coù phaàn cöùng ñeå chuyeån ñoåi ñòa chæ aûo sang ñòa chæ vaät lyù
ñöôïc nhanh
4 “Phaân trang” (“paging”)
4 “Phaân ñoaïn” (“segmentation”)
l Raát phoå bieán hieän nay

10
Tieát kieäm vuøng nhôù

< Caùc kyõ thuaät


l Dynamic linking
l Dynamic loading
l Overlay
l Swapping

11
Dynamic linking (1)

Trong dynamic linking


< Vieäc link moät load module L ñeán moät module ngoaøi

(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)

< Nhaéc laïi static linking

0x08048000 main:
program ...
call printf

printf:
... copy từ libc
ret

13
Dynamic linking (3)

0x08048000 main: dlfixup:


program ... GOT[5] = &printf
call printf call printf
PLT printf:
(r/o code) call GOT[5]
...
GOT
[5]: dlfixup
(r/w data)
...

0x40001234
printf:
libc ...
ret

Fig from M. Rosenblum


14
Öu ñieåm cuûa dynamic linking

< 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)

< Chính quaù trình töï ñieàu khieån dynamic loading


l Heä ñieàu haønh cung caáp moät soá thuû tuïc thö vieän hoã trôï

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

< Phaân maûnh ngoaïi (external fragmentation)


l Vuøng nhôù coøn troáng ñuû lôùn ñeå thoûa maõn moät yeâu caàu caáp phaùt,
nhöng laïi khoâng lieân tuïc
l Duøng keát khoái (compacting), neáu coù theå, ñeå gom laïi thaønh vuøng
nhôù lieân tuïc

< Phaân maûnh noäi (internal fragmentation)


l Vuøng nhôù ñöôïc caáp phaùt lôùn hôn vuøng nhôù yeâu caàu
4 Víduï: caáp moät khoaûng troáng 18.464 byte cho moät process yeâu caàu
18.462 byte
l Thöôøng xaûy ra khi boä nhôù thöïc ñöôïc chia thaønh caùc khoái kích
thöôùc coá ñònh (fixed-sized block) vaø caùc process ñöôïc caáp phaùt
theo ñôn vò khoái

25
Phaân maûnh noäi

operating yeâu caàu keá tieáp laø


system 18.462 byte

(used)

hole kích thöôùc


18.464 byte

Ñeå traùnh overhead quaûn lyù chæ 2 byte, OS


seõ caáp phaùt haún khoái 18.464 byte cho
process Þ dö ra 2 byte khoâng duøng

26
Fixed partitioning (1)

< Khi khôûi ñoäng heä thoáng,


boä nhôù chính ñöôïc chia
thaønh nhieàu phaàn coá ñònh
rôøi nhau, goïi laø caùc
partition, coù kích thöôùc
baèng nhau hoaëc khaùc
nhau
< Process naøo coù kích
thöôùc nhoû hôn hoaëc baèng
kích thöôùc partition thì coù
theå ñöôïc naïp vaøo
partition ñoù

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)

< Tröôøng hôïp caùc partition


coù kích thöôùc khoâng baèng
nhau
l Giaûi phaùp 1
4 Gaùn moãi process vaøo
partition nhoû nhaát (troáng
hay chöa troáng) ñuû chöùa
noù [best fit]
4 Coù haøng ñôïi cho moãi
partition
l Ñieåm yeáu cuûa giaûi phaùp: coù
theå coù moät soá haøng ñôïi
troáng (vì kích thöôùc partition
‘quaù lôùn’ ñoái vôùi process)
vaø moät soá haøng ñôïi daøi

30
Chieán löôïc placement khi fixed partitioning (3/3)

< Tröôøng hôïp caùc partition


coù kích thöôùc khoâng baèng
nhau
l Giaûi phaùp 2
4 Khi caàn naïp moät
process vaøo boä nhôù
chính Þ choïn partition
nhoû nhaát coøn troáng vaø
ñuû chöùa noù [best fit]
4 Chæ coù moät haøng ñôïi
chung cho moïi partition

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

< Quyeát ñònh caáp phaùt khoái boä


nhôù troáng naøo cho moät process
< Muïc tieâu: giaûm chi phí
compaction
< Caùc chieán löôïc placement
l Best-fit: choïn khoái nhôù troáng
nhoû nhaát
l First-fit: choïn khoái nhôù troáng
phuø hôïp ñaàu tieân keå töø ñaàu boä
nhôù
l Next-fit: choïn khoái nhôù troáng
phuø hôïp ñaàu tieân keå töø vò trí
caáp phaùt cuoái cuøng
l Worst-fit: choïn khoái nhôù troáng
lôùn nhaát

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

You might also like