Ch06 Memory

36
1 Chöông 6: 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

description

d

Transcript of Ch06 Memory

Page 1: Ch06 Memory

1

Chöông 6: 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

Page 2: Ch06 Memory

2

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ù

Page 3: Ch06 Memory

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ø

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

Page 4: Ch06 Memory

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ù

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

Page 5: Ch06 Memory

5

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)

Systemlibrary

Systemlibrary

System library

System library

static linking

dynamic linking

Page 6: Ch06 Memory

6

Thöïc hieän (static) linking

Linker chuyeån ñoåi ñòa chæ töông ñoái sang ñòa chæ tuyeät ñoái

Module A

CALL B

Return

length L

Module B

CALL C

Return

length M

Module C

Return

length N

0

L 1

Module A

JMP “L”

Return

Module B

JMP “L+M”

Return

Module C

Return

L

L M 1

L M

L M N 1

relocatableobject modules

load module

0

L 1

0

M 1

0

N 1

Page 7: Ch06 Memory

7

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…) Vaøo 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

0

250

2000

2250

relative addressphysical memory

symbolic address

int i;goto p1;

p1

Page 8: Ch06 Memory

8

Sinh ñòa chæ tuyeät ñoái vaøo thôøi ñieåm bieân dòch

Symbolicaddresses

Absoluteaddresses

Physical memory addresses

PROGRAM

JUMP i

LOAD j

DATA

i

j

Source code

1024

JUMP 1424

LOAD 2224

1424

2224

Absolute load module

Compile Load

1024

JUMP 1424

LOAD 2224

1424

2224

Process image

Page 9: Ch06 Memory

9

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 chæ naøo Khoâng caàn linker Loader raát ñôn giaûn Hieám ñöôïc duøng (vd MSDOS .COM files)

Page 10: Ch06 Memory

10

Chuaån bò sinh ñòa chæ vaät lyù (2)

Vaøo thôøi ñieåm link 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 Linker (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

Page 11: Ch06 Memory

11

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

Page 12: Ch06 Memory

12

Sinh ñòa chæ vaät lyù

Trong khi thöïc thi Ñòa chæ ñöôïc chuyeån ñoåi ñoäng trong khi thöïc thi Khoâng gian ñòa chæ vaät lyù coù theå noncontiguous 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

Page 13: Ch06 Memory

13

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

Caùc kyõ thuaät Dynamic linking Dynamic loading Overlay Swapping

Page 14: Ch06 Memory

14

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

Caùc laàn goïi routine sau seõ xaûy ra bình thöôøng, khoâng toán overhead

Page 15: Ch06 Memory

15

Dynamic linking (2)

Nhaéc laïi static linking

main: ... call printf

printf: ... ret

0x08048000

program

copy từ libc

Page 16: Ch06 Memory

16

Dynamic linking (3)

main: ... call printf

0x40001234 printf: ... ret

0x08048000

program

libc

printf: call GOT[5] ... [5]: dlfixup ...

PLT(r/o

code)GOT(r/w

data)

dlfixup: GOT[5] = &printf call printf

Fig from M. Rosenblum

Page 17: Ch06 Memory

17

Ö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

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

Page 18: Ch06 Memory

18

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 Kieåm tra xem routine ñaõ ñöôïc naïp vaøo boä nhôù chöa

Page 19: Ch06 Memory

19

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

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 Heä ñieàu haønh cung caáp moät soá thuû tuïc thö vieän

hoã trôï

Page 20: Ch06 Memory

20

Dynamic loading (2)

Caùc thuû tuïc ñeå ngöôøi duøng thöïc hieän dynamic loading trong UNIX:

dlopen() – Open moät file thö vieän dlsym() – Doø tìm moät kyù hieäu (symbol) trong file thö

vieän dlclose() – Close moät file thö vieän

Page 21: Ch06 Memory

21

Dynamic loading – Ví duï

Page 22: Ch06 Memory

22

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”

Page 23: Ch06 Memory

23

Pass 1 70K

Pass 2 80K

Symbol table 20K

Common routines 30K

Pass 1 70K

Pass 2 80K

Symbol table 20K

Common routines 30K

Assembler

Total memory available = 150KB

Kyõ thuaät overlay (2/2)

symboltable

20K

commonroutines 30K

overlaydriver

10K

pass 1 pass 2

80K70K

Ñôn vò: byte

naïp vaø thöïc thi

Page 24: Ch06 Memory

24

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: Round-robin: swap out P1 (vöøa tieâu thuï heát quantum

cuûa noù), swap in P2 , thöïc thi P3 ,… Roll out, roll in: duøng trong ñònh thôøi theo ñoä öu tieân

(priority-based scheduling) 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

Page 25: Ch06 Memory

25

Swapping -- Cô cheá

Page 26: Ch06 Memory

26

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”!]

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

Phaân chia coá ñònh (fixed partitioning) Phaân chia ñoäng (dynamic partitioning)

Page 27: Ch06 Memory

27

Hieän töôïng phaân maûnh

Phaân maûnh ngoaïi (external fragmentation) 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 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) Vuøng nhôù ñöôïc caáp phaùt lôùn hôn vuøng nhôù yeâu

caàu Ví duï: caáp moät khoaûng troáng 18.464 byte cho moät

process yeâu caàu 18.462 byte 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

Page 28: Ch06 Memory

28

Phaân maûnh noäi

operatingsystem

(used)

yeâu caàu keá tieáp laø 18.462 byte

hole kích thöôùc18.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

Page 29: Ch06 Memory

29

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ù

Page 30: Ch06 Memory

30

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

Page 31: Ch06 Memory

31

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

Neáu coøn partition troáng process môùi seõ ñöôïc naïp vaøo partition ñoù

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

Page 32: Ch06 Memory

32

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

Giaûi phaùp 1 Gaùn moãi process vaøo

partition nhoû nhaát (troáng hay khoâng troáng) ñuû chöùa noù [best fit]

Coù haøng ñôïi cho moãi partition

Ñ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

Page 33: Ch06 Memory

33

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

Giaûi phaùp 2 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]

Chæ coù moät haøng ñôïi chung cho moïi partition

Page 34: Ch06 Memory

34

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

Page 35: Ch06 Memory

35

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 Best-fit: choïn khoái nhôù

troáng nhoû nhaát First-fit: choïn khoái nhôù

troáng phuø hôïp ñaàu tieân keå töø ñaàu boä nhôù

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

Worst-fit: choïn khoái nhôù troáng lôùn nhaát

Page 36: Ch06 Memory

36

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