Ch06 Memory
-
Upload
khong-cam-xuc -
Category
Documents
-
view
263 -
download
2
description
Transcript of 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
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ù
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
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
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
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
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
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
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)
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
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
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
13
Tieát kieäm vuøng nhôù
Caùc kyõ thuaät Dynamic linking Dynamic loading Overlay Swapping
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
15
Dynamic linking (2)
Nhaéc laïi static linking
main: ... call printf
printf: ... ret
0x08048000
program
copy từ libc
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
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
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
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ôï
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
21
Dynamic loading – Ví duï
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”
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
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
25
Swapping -- Cô cheá
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)
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
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
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ù
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
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
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
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
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
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
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