Tải bản đầy đủ (.pdf) (51 trang)

Quản lý bộ nhớ

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (538.2 KB, 51 trang )

HỆ ĐIỀU HÀHH
Quản lý bộ nhớ
Quản lý bộ nhớ

Các kiểu đòa chỉ nhớ

Chuyển đổi đòa chỉ nhớ

Overlay và swapping

Mô hình quản lý bộ nhớ đơn giản
– Fixed partitioning
– Dynamic partitioning
Cơ chế phân trang (paging)– Cơ che phan trang (paging)
– Cơ chế phân đoạn (segmentation)
-9.2-
Vì sao phải quản lý bộ nhớ

Một chương trình muốn chạy thì phải được nạp vào
trong bộ nhớ chính.

Vấn đề:Vấn đề:

Khi nào nạp?

Nạp vào đâu?

Nạp những phần nào?

Quản lý bộ nhớ giúp tối ưu hóa hoạt động của bộ nhớ


Tối ưu hóa số tiến trình cùng lúc ở trong bộ nhớ chính  nâng
cao tính đa chươn
gg

Tận dụng tối đa bộ nhớ của máy tính
-9.3-
Bộ nhớ

Là một dãy các ô nhớ liên tục nhau

Mỗi ô nhớ (một word) có một địa chỉ

Chương trình = tập các câu lệnh (chỉ thị máy) + dữ liệug ập ệ ( ị y) ệ

Nạp chương trình vào bộ nhớ  đặt các chỉ thị và dữ liệu vào các ô
nhớ  xác định ánh xạ giữa các chỉ thị, dữ liệu vào địa chỉ trong bộ
nhớ
0
4
MOV AX, 10
8
12
MOV BX, 20
ADD AX, AX, BX
16
-9.4-
Các kiểu đòa chỉ nhớ

Đòa chỉ vật lý
(physical address) (đòa chỉ

thực
, đòa chỉ
tuyệt đối
) là
một vò trí thực trong bộ nhớ chính.

Đòa chỉ luận lý
(logical address) là một vò trí nhớ độc lập với cấu
trúc, tổ chức vật lý của bộ nhớ.
– Các trình biên dòch (compiler) tao ra mã lệnh chương trình mà trong ò( p)ï äg g
đó mọi tham chiếu bộ nhớ đều là đòa chỉ luận lý

Đòa chỉ tương đối
(relative address) là một kiểu đòa chỉ luận lý
òg
()äòäy
trong đó các đòa chỉ được biểu diễn tương đối so với một điểm
xác đònh nào đó trong chương trình (ví dụ: 12 byte so với điểm
bắt đầu chương trình)

Khi một lệnh được thực thi, các tham chiếu đến đòa chỉ luận lý
phải được chuyển đổi thành đòa chỉ thực. Thao tác chuyển đổi
-9.5-
pïy ò ï y
này thường có sự hỗ trợ của phần cứng để đạt hiệu suất cao.
Nạp chương trình vào bộ nhớ

Bộ linker: kết hợp các object module thành một file nhò phân khả
thực thi gọi là
load module.


Bộ loader: nap load module vào bộ nhớ chính

Bộ loader: nạp load module vao bộ nhơ chính
System
Library
static linking
y
St
-9.6-
System
Library
dynamic linking
Cô cheá thöïc hieän linking
Module A
CALL B LthL
0
Module A
JMP “L”
Relocatable
object modules
0
CALL B
Return
Length L
L-1
JMP “L”
Return
Module BL
object modules

L-1
Module B
CALL C
Length M
Module B
JMP “L+M”
L
Load module
0
Return
Module C
Return
Module C
L+M-1
L+M
M-1
0
Return
Length N
Return
L+M+N-1
N-1
-9.7-
N 1
Chuyển đổi đòa chỉ nhớ

Chuyển đổi đòa chỉ
là quá trình ánh xạ một đòa chỉ từ không gian
đòa chỉ này sang không gian đòa chỉ khác.


Biểudiễn đòa chỉ nhớ

Bieu dien đòa chỉ nhơ
– Trong
source code
: symbolic (các biến, hằng, pointer,...)
– Thời điểm
biên dòch
: là đòa chỉ khả tái đònh vò (relocatable address),
hay là đòa chỉ tương đối (relative address) g( )
 Ví dụ: a ở vò trí 14 bytes so với phần header của module.
– Thời điểm
linking/loading
: là đòa chỉ tuyệt đối. Ví dụ: dữ liệu nằm tại
đòa chỉ bộ nhớ thực: 2030
0
2000
int I;
goto p1;
250
2250
Relocatable address
Absolute address
(Ph i l )
Symbolic address
p1
-9.8-
(Physical memory)
Chuyển đổi đòa chỉ
ûå


Đòa chỉ của lệnh (instruction) và dữ liệu (data) được chuyển
đổi thành đòa chỉ vật lý, việc này có thể xảy ra tại ba thời
điểm khác nhau

Compile time
: nếu biết trước đòa chỉ bộ nhớ thì có thể kết gán
đòa chỉ vật lý lúc biên dòch.
 Ví du: chương trình COM củaMSDOS phátbiểu assemply Ví dụ: chương trình .COM cua MS-DOS, phat bieu assemply
 Khuyết điểm: phải biên dòch lại nếu thay đổi đòa chỉ

Load time
: tại thời điểm biên dòch, nếu không biết đòa chỉ thực
thì vào thời điểm loading, phải chuyển đổi đòa chỉ khả tái đònh
v
ò (relocatable) theo một đòa chỉ nền (base address).ò( ) ä ò ( )
 Đòa chỉ thực được tính toán lại vào thời điểm chương trình thực thi
 phải tiến hành reload nếu đòa chỉ base thay đổi.
-9.9-
Chuyển đổi đòa chỉ vào thời điểm thực
thi

Execution time
: quá trình chuyển đổi
được trì hoãn đến thời điểm thực thi
(run time)
Tùìhhhi ù
Relative (relocatable)
addresses
 Trong quá trình thực thi, process có

thể được di chuyển từ segment này
sang segment khác trong bộ nhớ.
 CPU tao ra các đòa chỉ tương đối
0
JMP 400
CPU tạo ra cac đòa chỉ tương đoi
cho process
 Cần sự hỗ trợ của phần cứng cho
việc ánh xạ đòa chỉ (ví dụ có thanh
hi b ø li it )
JMP 400
LOAD 1200
400
ghi base va limit,...)
 Sử dụng trong đa số các OS đa
dụng (general-purpose) trong đó có
các cơ chế swapping, paging,
1200
pp g, p g g,
segmentation
1200
max
= 2000
-9.10-
Dynamic linking

Quá trình link một số
module ngoài
(external module) được thực
hiện sau khi đã tạo xong load module (i.e. file có thể thực thi)

–Ví du: trong Windows, module ngoài là các file .DLL; còn trong Unix, dụ to g do s, odue goa acac e ;co to gU ,
các module ngoài là các file .so (shared library)

Load module chỉ chứa các tham chiếu (reference) đến các ()
external module. Các tham chiếu này có thể được chuyển đổi vào
hai thời điểm sau:
– Loading time (load-time dynamic linking)
– Run time: khi có một lời gọi đến thủ tục được đònh nghóa trong
external module (run-time dynamic linking)

Hệ điều hành chòu trách nhiệm tìm các external module và kết
nối vào load module (kiểm tra xem external module đã nạp vào
bộ nhớ chưa)
-9.11-
Ưu điểm của dynamic linking

Thông thường, external module là một thư viện cung cấp các tiện
ích của OS. Các chương trình thực thi có thể dùng các phiên bản
khác nhau của external module mà khôn
g cần sửa đổi, biên dòch g,ò
lại.

Chia sẻ mã
(code sharing): một external module chỉ cầnnapvào

Chia se ma
(code sharing): một external module chỉ can nạp vao
bộ nhớ một lần. Các process cần dùng external module này thì
cùng chia sẻ đoạn mã của external module  tiết kiệm không
gian nhớ và đóa.g


Dynamic linking cần sự hỗ trợ của OS trong việc kiểm tra xem
một thủ tuc nàó có thể đươc chia sẻ giữacác process hay làmột thu tục nao đo co the được chia se giưa cac process hay la
phần mã của riêng một process ( bởi vì chỉ có OS mới có quyền
thực hiện việc kiểm tra này).
-9.12-
Dynamic loading

Cơ che
á: chỉ khi nào được gọi đến thì một thủ tục mới được nạp
vào bộ nhớ chính  tăng độ hiệu dụng của bộ nhớ (memory
utilization
) bởi vì các thủ tục ít được dùng sẽ không chiếm chỗ )ïïgg
trong bộ nhớ

Rất hiệu quả trong trường hơp tồn tai khối lương lớn mã chương äq g g ïp ïïgg
trình không được sử dụng thường xuyên (ví dụ các thủ tục xử lý
lỗi)

Không cần sự hỗ trợ đặc biệt của hệ điều hành
– Thông thường, user chòu trách nhiệm thiết kế và hiện thực các
chương trình có dynamic-loading.gy g
– Hệ điều hành chủ yếu cung cấp một số thủ tục thư viện hỗ trợ, tạo
điều kiện dễ dàng hơn cho lập trình viên
-9.13-
Cơ chế overlay

Tại mỗi thời điểm, chỉ giữ lại trong bộ nhớ những lệnh hoặc dữ
liệu cần thiết, giải phóng các lệnh/dữ liệu chưa hoặc không cần
dùn

g đến.g

Cơ chế này rất hữu dụng khi kích thước một process lớn hơn
khôn
g gian bộ nhớ cấp cho process đó.gg ä p p

Cơ chế này được điều khiển bởi người sử dụng (thông qua sự hỗ
trơ củacác thư viện lập trình) chứ không cầnsưhỗ trơ của hệtrợ cua cac thư viện lập trình) chư khong can sự ho trợ cua hệ
điều hành
-9.14-
Cô cheá overlay (tt)
Pass 1 70KB
Pass 2 80KB
Symbol table 20KB
symbol
table
20KB
Symbol table 20KB
Common routines 30KB
Assembler
common
Assembler
Total memory
available = 150KB
routines
30KB
overlayoverlay
driver
10KB
80KB

pass 1
pass 2
-9.15-
70KB
Cơ chế swapping

Một process có thể tạm thời bò swap ra khỏi bộ nhớ
chính và lưu trên một hệ thống lưu trữ phụ. Sau đó,
process có thể đươc nap lai vàobộnhớ để tiếptucprocess co the được nạp lại vao bộ nhơ đe tiep tục
quá trình thực thi
– Round-robin: swap-out A, swap-in B, thực thi C
– Roll out, roll in – dùng trong cơ chế đònh thời theo độ ưu tiên
(priority-based scheduling)
 Process có đo
ä ưu tiên thấp hơn sẽ bò swap-out nhường äpòpg
chỗ cho process có độ ưu tiên cao hơn được nạp vào bộ
nhớ để thực thi
– Medium-term scheduler
-9.16-
Minh hoïa cô cheá swapping
-9.17-
Mô hình quản lý bộ nhớ thực

Trong chương này, mô hình quản lý bộ nhớ là một mô hình đơn
giản, không có bộ nhớ ảo.

Một process phải được nạp hoàn toàn vào bộ nhớ thì mới được
thực thi (ngoại trừ việc sử dụng cơ chế overlay).

Các cơ chế quản lý bộ nhớ thực sau đây rất ít (hầu như không

còn) được dùng trong các hệ thống hiện đại, tuy nhiên đó là các
ý tưởng cơ sở cho mô hình quảnlý bộ nhớ ảo sau này:y tương cơ sơ cho mo hình quan ly bộ nhơ ao sau nay:
– Phân chia cố đònh (fixed partitioning)
– Phân chia động (dynamic partitioning)
– Phân trang đơn giản (simple paging)Phan trang đơn gian (simple paging)
– Phân đoạn đơn giản (simple segmentation)
-9.18-
Phân mảnh (fragmentation)

Phân mảnh ngoại
(external fragmentation)
– Kích thước không gian bộ nhớ còn trống đủ để thỏa mãn một
yêucầucấp phát tuy nhiênkhông gian nhớ nàykhông liênyeu cau cap phat, tuy nhien khong gian nhơ nay khong lien
tục  phải dùng cơ chế
kết khối
(compaction).
Ph â û h äi
(i t l f t ti )

Phân mảnh nội
(internal fragmentation)
– Kích thước vùng nhớ được cấp phát hơi lớn hơn vùng nhớ yêu
cầu. Ví dụ: cấp một khoảng trống 18.464 bytes cho một
àprocess yêu cầu 18.462 bytes
– Hiện tượng phân mảnh nội thường xảy ra khi bộ nhớ thực
(physical memory) được chia thành các khối kích thước cố
đònh(fixed-sized block) và các process được cấp phát theo
đơn vò khối. Ví dụ: cơ chế phân trang (paging)
-9.19-
Phân mảnh nội

operating
system
yêu cầu kế tiếp là
18.462 bytes!!!
y
(used)
hole kích thước
18 464 bytes
cần quản lý khoảng
18.464 bytes
trống 2 bytes!?!
OS sẽ cấp phát hẳn khối 18.464 bytes cho yêu cầu
của
process  dư ra 2 bytes không dùng!
-9.20-
p ygg
Fixed partitioning

Chia bộ nhớ chính thành nhiều
phần không trùng lấp gọi là các
partition
có kích thước bằng
p
g
nhau hoặc khác nhau

Process nào có kích thước nhỏ
hơn hoa
ëc bằng kích thước ëg
partition thì có thể nạp vào

partition đó.

Nếu chương trình có kích thước g
lớn hơn partition thì phải dùng
cơ chế overlay.

Nhận xét
– Không hiệu quả do bò phân
mảnh nội: một chươn
g trình dù
-9.21-
g
lớn hay nhỏ đều chiếm trọn một
partition.
Chiến lược placement

Partition có kích thước bằng nhau
– Còn một partition trống  process
mới được nạp vào partition đóïïp p
– Không còn partition trống nhưng
trong đó có process đang bò blocked
 swap process đó ra bộ nhớ phụ
hườ h ã h ớinhường chỗ cho process mới.

Partition có kích thước không bằng
nhau
Gù ãi ø ii hû– Gán mỗi process vào partition nhỏ
nhất phù hợp với nó
– Có hàng đợi cho mỗi partition
Giảmthiểu phânmảnh nội– Giam thieu phan manh nội

– Vấn đề: có thể có một số hàng đợi
trống không (vì không có process với
kích thước tương ứng) và hàng đơi
-9.22-
kích thươc tương ưng) va hang đợi
dày đặc
Chiến lược placement (tt)

Partition có kích thước không
bằng nhau
– Chỉ có một hàng đơi chung ägï g
cho các partition
– Khi cần nạp một process vào
bộ nhớ chính  chọn
ii h û h á ø ápartition nhỏ nhất còn trống
-9.23-
Dynamic partitioning

Số lượng partition không cố đònh và partition có kích thước khác
nhau

Mỗi process được cấp phát chính xác dung lượng bộ nhớ cần
thiết

Gây ra hiện tượng phân mảnh ngoại (external fragmentation)
-9.24-
Chiến lược placement

Dùng để quyết đònh cấp phát
khối bộ nhớ trống nào cho

một process

Mục tiêu: giảm thiểu chi phí
compaction (time consuming)

Các chiến lươc placementCac c e ượcpace e

Best-fit
: chọn khối nhớ trống
nhỏ nhất

First-fit
: chọn khối nhớ trống g
phù hợp đầu tiên kể từ đầu
bộ nhớ

Next-fit
: chọn khối nhớ trống
h ø hơ đ à ti â k å từ òtíphu hợp đau tien ke tư vò trí
cấp phát cuối cùng

Worst fit
: chọn khối nhớ
trống lớn nhất
-9.25-
trong lơn nhat

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×