Chapter 7: 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)
Giaûi phaùp fixed partitioning
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û
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ôù
Caáp phaùt vuøng nhôù cho caùc process
Baûo veä: kieåm tra truy xuaát boä nhôù coù hôïp leä khoâng
Chia seû: cho pheùp caùc process chia seû vuøng nhôù chung
Chuyeån ñoåi ñòa chæ luaän lyù sang ñòa chæ vaät lyù
2
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ø
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
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
3
1
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ù
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
4
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
taùi ñònh vò ñòa chæ töông ñoái vaø phaân giaûi caùc external reference
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
5
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
CALL B
length L
relocatable
object modules
L - 1 Return
0
M-1
0
Module A
JMP “L”
L - 1 Return
L Module B
Module B
CALL C
0
length M
JMP “L+M”
load module
L M - 1 Return
Return
LM
Module C
Module C
length N
L M N - 1 Return
N - 1 Return
6
2
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ôù
Trong source code: symbolic (caùc bieán, haèng, pointer…)
Thôøi ñieåm bieân dòch: thöôøng laø ñòa chæ töông ñoái
Ví duï: a ôû vò trí 14 byte so vôùi vò trí baét ñaàu cuûa module
Thôøi ñieåm linking/loading: coù theå laø ñòa chæ tuyeät ñoái
2000
0
int i;
goto p1;
p1
2250
250
symbolic address
relative address
physical memory
7
Sinh ñòa chæ tuyeät ñoái vaøo thôøi ñieåm bieân dòch
Symbolic
addresses
PROGRAM
Absolute
addresses
JUMP i
i
Physical memory
addresses
1024
1024
JUMP 1424
JUMP 1424
1424
LOAD j
DATA
j
1424
LOAD 2224
Compile
LOAD 2224
Load
2224
Source code
Absolute load module
2224
Process image
8
Chuaån bò sinh ñòa chæ vaät lyù (1)
Vaøo thôøi ñieåm bieân dòch
Compiler sinh ñòa chæ tuyeät ñoái
Caàn thoâng tin cho bieát load module seõ ñöôïc naïp ôû ñaâu
Khoâng caàn linker
Loader raát ñôn giaûn
Hieám ñöôïc duøng (MSDOS .COM files)
9
3
Chuaån bò sinh ñòa chæ vaät lyù (2)
Vaøo thôøi ñieåm link-edit
Compiler
Sinh ñòa chæ töông ñoái (a.k.a. relocatable) cho moãi ñôn vò bieân
dòch
Tham chieáu ñeán ñòa chæ ngoaøi
Linkage editor
Chuyeån ñoåi ñòa chæ relocatable sang ñòa chæ tuyeät ñoái
Phaân giaûi caùc tham chieáu ñeán ñòa chæ ngoaøi
Caàn thoâng tin cho bieát linked program seõ ñöôïc naïp ôû ñaâu
Loader vaãn coøn raát ñôn giaûn
Yeâu caàu veà phaàn cöùng thaáp
Moät chöông trình chæ coù theå ñöôïc naïp taïi nôi ñaõ ñöôïc ñaëc taû vaø
khoâng theå dòch chuyeån sau khi ñöôïc naïp
Khoâng coøn ñöôïc duøng nhieàu
10
Chuaån bò sinh ñòa chæ vaät lyù (3)
Vaøo thôøi ñieåm naïp
Töông töï thôøi ñieåm link-edit, nhöng khoâng giöõ coá ñònh ñòa chæ baét
ñaàu
Chöông trình coù theå ñöôïc naïp ôû baát cöù ñaâu
Chöông trình coù theå dòch chuyeån nhöng khoâng taùch ñöôïc
Chæ caàn phaàn cöùng ñôn giaûn: caùc thanh ghi base/limit
Loader thieát laäp trò cho caùc thanh ghi base/limit
Khoâng coøn ñöôïc duøng phoå bieán
11
Sinh ñòa chæ vaät lyù
Vaøo thôøi ñieåm thöïc thi
Ñòa chæ ñöôïc chuyeån ñoåi ñoäng trong khi thöïc thi
Caàn coù phaàn cöùng ñeå chuyeån ñoåi ñòa chæ aûo sang ñòa chæ vaät lyù
ñöôïc nhanh
“Phaân trang” (“paging”)
“Phaân ñoaïn” (“segmentation”)
Raát phoå bieán hieän nay
12
4
Söû duïng vuøng nhôù bôùt phí phaïm
Caùc kyõ thuaät hoã trôï söû duïng vuøng nhôù bôùt phí phaïm:
Dynamic linking
Dynamic loading
Overlay
Swapping
13
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
MS Windows: module ngoaøi laø caùc file .dll
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
Khi process goïi routine laàn ñaàu, stub seõ 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
Caùc laàn goïi routine sau seõ xaûy ra bình thöôøng, khoâng toán
overhead
14
Dynamic linking (2)
Nhaéc laïi static linking
0x08048000
program
main:
...
call printf
printf:
...
ret
copy từ libc
15
5
nguon tai.lieu . vn