Xem mẫu

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

LM

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