You are on page 1of 92

Ban học tập

Khoa Kỹ thuật máy tính

Training cuối học kỳ I năm học 2021-2022

HỆ ĐIỀU HÀNH

Email : bht.ktmt@gmail.com
Fanpage : www.facebook.com/bht.ktmt
1
Chương 5

Minigame Chương 6

Chương 8 Chương 7

MỤC LỤC 2
C5 3 tính chất

Busy waiting

ĐỒNG BỘ Sleep & wake-up

3
Phân loại giải pháp
Nhóm giải pháp Nhóm giải pháp
Sleep & Wakeup Busy Waiting
Sử dụng
các biến cờ hiệu
Semaphone
Sử dụng
Monitor việc kiểm tra luân phiên

Message Giải pháp của Peterson

Cấm ngắt

Chỉ thị TSL

4
Các giải pháp “Busy waiting”

1
Tiếp tục tiêu thụ Không đòi hỏi
CPU khi chờ vào sự trợ giúp của
vùng tranh chấp hệ điều hành
2

While (chưa có quyền) do nothing();

CS; Khi đã có quyền thì vào CS

Từ bỏ quyền sử dụng CS Sử dụng xong CS

5
Các giải pháp “Sleep & wake-up”

1
Từ bỏ CPU khi
chưa vào vùng Cần hệ điều

tranh chấp hành hỗ trợ

if (chưa có quyền) sleep();

CS; Khi đã có quyền thì vào CS

Wake-up (tiến trình khác) Sử dụng xong CS

6
Giải thuật luân phiên

Giải thuật cờ hiệu

Giải thuật Peterson

Busy waiting Giải thuật Bakery

Một số giải thuật khác

Bài tập

7
Giải thuật luân phiên

Đặc điểm 3 tính chất


Biến chia sẻ: turn (khởi tạo = 0) Thỏa 1
N ế u t u r n = i t h ì P i đ ư ợ c p h é p v à o C S , v ớ i i = 0 h a y 1 Không thỏa 2 và 3

Minh họa Process P0: Process P1:


do do
while (turn != 0); while (turn != 1);
Điều gì xảy ra nếu P0 có
critical section critical section
RS (remainder section) rất turn := 1; turn := 0;
lớn còn P1 có RS nhỏ? remainder section remainder section
while (1); while (1);
turn = 1 -> P1 vào CS, P0 vào RS0.
R S 0 q u á l ớ n = > P 0 v ẫ n c h ư a v à o v ò n g l ặ p m ớ i , c h ư a v ô đ ư ợ c C S - > c h ư a
gán turn tiếp theo = 1, trong khi RS1 nhanh hơn => P1 đang chờ ở vòng
lặp tiếp theo cũng bị delay 8
Giải thuật cờ hiệu

Đặc điểm 3 tính chất


Mảng boolean flag[2] (khởi tạo bằng false) Thỏa mãn 1
N ế u fl a g [ i ] = t r u e t h ì P i s ẵ n s à n g v à o C S Không thỏa mãn 2

do {
Minh họa P i đ ã s ẵ n s à n g
flag[i] = true;
Nếu Pj đang dùng thì chờ Pj dùng xong while ( flag[j] );

Thực hiện xong thì gán false critical section


flag[i] = false;
Không thỏa mãn 2 vì chẳng hạn có 3 process, remainder section
i 0 đ a n g t h ự c h i ệ n n h ư n g l â u , i 1 c h ờ , i 2 v ừ a } while (1);
thực hiện xong cũng chờ
=> nhiều flag cùng true thì bị delay mãi mãi
9
Giải thuật Peterson (kết hợp)

Đặc điểm 3 tính chất


K ế t h ợ p 2 g i ả i t h u ậ t t r ư ớ c : c ả t u r n v à f l a g Thỏa mãn all

Process P0 Process P1
Minh họa
do { do {
P 0 s ẵ n s à n g , g á n t u r n = 1 flag[0] = true; flag[1] = true;
turn = 1; turn = 0;
để nhường P1 nếu P1
while (flag[1]&&turn ==1); while (flag[0] && turn ==0);
s ẵ n s à n g . P 1 d ù n g x o n g critical section critical section
vùng CS thì P0 vào CS. flag[0] = false; flag[1] = false;
remainder section remainder section
N g ư ợ c l ạ i đ ố i v ớ i P 1 }while(1); }while(1);

turn trong 1 thời điểm chỉ mang 1 giá trị => 1 thời điểm chỉ có 1 Process vào CS
P1 true cũng không ngăn được P0 vì muốn tiến vào CS còn cần phụ thuộc vào turn
Không xảy ra chờ đợi vô hạn vì có thể ngắt while bằng flag hoặc turn 10
Giải thuật Bakery (n process)
Mỗi process nhận một con số
Đặc điểm Số nhỏ nhất sẽ vào CS
N ế u c ù n g s ố t h ì s o s á n h s ố t h ứ t ự , i < j t h ì I v à o t r ư ớ c
Số num được cấp tăng dần

Minh họa boolean choosing[ n ];


int num[ n ];
do {
choosing[i]= true;
num[ i ] = max(num[0],num[1],…, num[n − 1]) + 1;
choosing[ i ] = false;
for (j = 0; j < n; j++) {
while (choosing[ j ]);
while ((num[ j ] != 0) && (num[ j ], j) < (num[ i ],
i));
}
critical section
num[ i ] = 0;
remainder section
11
} while (1);
nếu Process vào Giải thuật Bakery (n process)
sau cùng thì sẽ boolean choosing[ n ];
m a n g c o n s ố l ớ n int num[ n ];
do {
nhất trong số choosing[i]= true;
num[ i ] = max(num[0],num[1],…, num[n − 1]) + 1;
các Process + 1 choosing[ i ] = false;
for (j = 0; j < n; j++) {
nếu bắt gặp process j while (choosing[ j ]);
đang thực hiện gán num while ((num[ j ] != 0) && (num[ j ], j) < (num[ i ],
i));
thì chờ để nó gán xong }
critical section
m ớ i s o s á n h num[ i ] = 0;
remainder section
} while (1);
chờ nếu có pro có num nhỏ hơn nó -> số nhỏ hơn vào CS. nếu
process đã thực hiện xong (num = 0) hoặc process j được gán
1 n u m m ớ i l ớ n h ơ n
12
=>break while, so sánh process khác
Giải quyết tranh chấp

Software Hardware

Cấm ngắt Dùng các lệnh


CS (disable interrupts) đặc biệt
Pro
yêu cầu vào
Uniprocessor: Multiprocessor:
tính chất 1 đảm bảo tính chất 1 không đảm bảo
Phải liên tục kiểm tra
điều kiện
system clock không Chỉ cấm ngắt tại CPU
thể thực hiện thực thi lệnh
Tốn nhiều thời
g i a n x ử l ý c ủ a C P U disable_interrupts
Process Pi:
do{
Nếu thời gian xử lý trong disable_interrupts();
v ù n g C S l ớ n critical section
=> cần có cơ chế block enable _interrupts();
process remainder section
} while (1);
13
Một số giải thuật khác

Lệnh TestAndSet

o Đảm bảo tính chất 1


o Q u á t r ì n h c h ọ n l ự a p r o c e s s P j v à o C S k ế ti ế p l à t ù y ý
⇒ k h ô n g b ả o đ ả m đ i ề u k i ệ n tí n h c h ấ t 3 = > x ả y r a s t a r v a t i o n

Swap Bị bỏ đói
o Biến chia sẻ lock (khởi tạo = false)
o Biến cục bộ key
o P i n à o t h ấ y g i a ́ t r ị l o c k = f a l s e t r ư ớ c t h i ̀ v à o C S t r ư ớ c
o Pi vào CS sẽ cho lock = true để ngăn các P khác

Giải thuật TestAndSet

o Thỏa mãn 3 tính chất


14
Giải pháp thỏa các tính chất nào? Bài tập busy waiting
Code Giải thích
while (TRUE) {
int j = 1-i; Cho j = 1 – i, là số ngược lại của i (0 hoặc 1)
flag[i]= TRUE; Cờ i = true
turn = i; Biến turn qui định i được vào
while (turn == j && flag[j]==TRUE); Nếu cùng lúc có tiến trình j được gán turn và cờ j true thì chờ cho tới
khi j dùng xong CS, hoặc nếu j đang dùng CS mà bị gán turn = i thì i
cũng vào CS
critical-section (); Gán cờ = fasle sau khi dùng xong CS
flag[i] = FALSE; Thực hiện các tác vụ khác
Noncritical-section ();
}
(1) Biến turn tại 1 thời điểm chỉ có thể = i hoặc j, turn = i => cho i vào CS ngay cả khi j
đang ở CS => không thỏa mutual. Tuy nhiên, nếu Pj có thời gian thực hiện trong CS nhanh
hơn từ lúc Pj vừa vào đến lúc turn = i thì vẫn có khả năng chỉ có 1 tiến trình được vào CS
=> vẫn có thể thỏa
(2) Pj nếu không được vào vùng CS cũng không thể ngăn tiến trình i vào CS vì qui định tiến
trình được vào = turn => progress
(3) Nếu một tiến trình bị kẹt trong vòng lặp while thì sẽ bị ngắt khỏi CS nếu tiến trình khác
được gán turn => bounded waiting
15
⇨ Có thể thỏa hoặc không thỏa 3 yêu cầu
Sleep & wake-up
Semaphore
o Là công cụ đồng bộ cung cấp bởi OS, không đòi hỏi busy waiting
o Semaphore S là một biến số nguyên
o S có thể được truy xuất qua hai tác vụ atomic và mutual exclusive
yes
wait(S) hay P(S): S=S-1 S<0? process gọi lệnh wait() bị blocked
Dùng để giành tài nguyên
yes
signal(S) hay V(S): S=S+1 S<=0? 1 process blocked được hồi phục
Dùng để giải phóng tài nguyên

o Các process bị blocked vì chờ cùng 1 sự kiện sẽ được đặt trong cùng
blocked queue Danh sách liên kết các PCB
Counting semaphore S là số nguyên
o 2 loại
Binary semaphore S = 0 hoặc 1 16
Sleep & wake-up
Semaphore

void wait(semaphore S) { void signal(semaphore S) {


S.value--; S.value++;

if (S.value < 0) { if (S.value <= 0) {


//add this process to queue //remove a process P from S.L
block(); wakeup(P);
} }
} }

Dùng cơ chế FIFO khi lấy ra từ hàng đợi


17
Sleep & wake-up

Semaphore

18
Sleep & wake-up
Semaphore
o Semaphore bảo đảm mutual exclusion và phối hợp đồng bộ các process
o 1 process bị “die” có thể khiến các process khác cùng sử dụng biến semaphore
Cấu trúc:
typedef struct {
int value;
struct process *L; /* process queue */
} semaphore;
Hàm được sử dụng:
o block(): tạm treo process nào thực thi lệnh này, trạng thái process
từ running -> waiting
o wakeup(P): hồi phục process P đang blocked, trạng thái process từ
waiting -> ready 19
Sleep & wake-up
Semaphore
VD1
semaphore mutex; //khởi tạo mutex.value=1

o Dùng cho n process Process Pi:


do {
o Khởi tạo S.value = 1 => chỉ
wait(mutex);
có 1 process được vào CS
critical section
o Đ ể c h o p h é p k p r o c e s s v à o
signal(mutex);
CS, khởi tạo S.value = k
remainder section
} while (1);

Process i tiến vào -> thấy value < 0 => block() đứng yên một chỗ
Khi 1 process trong CS thực hiện xong, ra khỏi CS => gọi signal()
=> 1 process đang bị block sẽ tiếp tục chạy 20
Sleep & wake-up
Semaphore
VD2

o Dùng cho 2 process: P1 và P2


Để đồng bộ hoạt động theo yêu cầu,
o Yê u c ầ u : l ệ n h S 1 t r o n g P 1 c ầ n đ ư ợ c P1 phải định nghĩa như sau:
S1;
t h ự c t h i t r ư ớ c l ệ n h S 2 t r o n g P 2
signal(synch);
o Dùng semaphore synch để đồng bộ P2 định nghĩa như sau:
wait(synch);
o Khởi động semaphore:
S2;
synch.value = 0

21
Sleep & wake-up
Semaphore
VD3

o X é t 2 p r o c e s s x ử l ý 2 đ o ạ n c h ư ơ n g Để đồng bộ hoạt động theo yêu cầu,


P1 phải định nghĩa như sau:
trình:
A1;
Tiến trình P1 {A1, A2} signal(s1);,
wait(s2);
Tiến trình P2 {B1, B2} A2;
o Đồng bộ hóa hoạt động của 2 tiến P2 định nghĩa như sau:
B1;
trình sao cho cả A1 và B1 đều hoàn
signal(s2);
t ấ t t r ư ớ c k h i A 2 v à B 2 b ắ t đ ầ u . wait(s1);
B2;
o Khởi tạo semaphore s1.v = s2.v = 0

22
Bài tập Sleep & wake-up Semaphore

H ệ t h ố n g c ó 4 ti ể u t r ì n h T 1 , T 2 , T 3 , T 4 . Q u a n h ệ g i ữ a c á c ti ể u t r ì n h n à y đ ư ợ c b i ể u d i ễ n n h ư
s ơ đ ồ , m ũ i t ê n t ừ T x s a n g T y n g h ĩ a l à T x p h ả i k ế t t h ú c t r ư ớ c k h i T y b ắ t đ ầ u t h ự c t h i . G i ả s ử
t ấ t c ả c á c ti ể u t r ì n h đ ã đ ư ợ c k h ở i t ạ o v à s ẵ n s à n g đ ể t h ự c t h i . D ù n g s e m a p h o r e đ ể đ ồ n g b ộ
h o ạ t đ ộ n g c ủ a c á c t i ể u t r ì n h c h o đ ú n g v ớ i s ơ đ ồ .

Điều kiện:
3 điều kiện => 3 semaphore
•T 1 k ế t t h ú c - > T 2 t h ự c t h i s1 = 0;
•T 1 k ế t t h ú c - > T 3 t h ự c t h i s2 = 0;
s3 = 0;
•T 2 v à T 3 k ế t t h ú c - > T 4 t h ự c t h i
Các lệnh wait() và signal() của các semaphore

Void T1(void) Void T2(void) Void T3(void) Void T4(void)


{ CS; { wait(s1); //đợi T1 { {
//T1 kết thúc, thực thi T2 &T3 CS; Wait(s1); Wait(s2);
signal(s1); signal(s2); // T2 CS; Wait(s3);
signal(s1); kết thúc, thực thi T4 Signal(s3); CS ;
} } } } 23
Bài tập Sleep & wake-up Semaphore

H ệ t h ố n g c ó 4 ti ể u t r ì n h T 1 , T 2 , T 3 , T 4 . Q u a n h ệ g i ữ a c á c ti ể u t r ì n h n à y đ ư ợ c b i ể u d i ễ n n h ư
s ơ đ ồ , m ũ i t ê n t ừ T x s a n g T y n g h ĩ a l à T x p h ả i k ế t t h ú c t r ư ớ c k h i T y b ắ t đ ầ u t h ự c t h i . G i ả s ử
t ấ t c ả c á c ti ể u t r ì n h đ ã đ ư ợ c k h ở i t ạ o v à s ẵ n s à n g đ ể t h ự c t h i . D ù n g s e m a p h o r e đ ể đ ồ n g b ộ
h o ạ t đ ộ n g c ủ a c á c t i ể u t r ì n h c h o đ ú n g v ớ i s ơ đ ồ .

Giải pháp hơn tối ưu chỉ dùng 2 semaphore


=> khởi tạo sem1 = sem2 = 0;

24
Sleep & wake-up
Semaphore
N h ậ n x é t
o S.value ≥ 0: số process có thể thực thi = S.value
o S.value < 0: số process đang đợi trên S là |S.value|
o Atomic và mutual exclusion : không được xảy ra trường hợp 2 process cùng đang
ở trong thân lệnh wait (S) và signal(S) tại một thời điểm
⇒ đ o ạ n c o d e c ủ a l ệ n h w a i t ( S ) v à s i g n a l ( S ) c ũ n g l à v ù n g t r a n h c h ấ p

o Vùng tranh chấp thường rất nhỏ, chỉ khoảng 10 lệnh


o Giải pháp:
• Uniprocessor: dùng cấm ngắt
• M u l ti p r o c e s s o r : g i ả i p h á p s o ft w a r e ( g i ả i t h u ậ t D e k k e r , P e t e r s o n , … ) h o ặ c
giải pháp hardware (TestAndSet, Swap,…)
o V ì CS rất nhỏ nên chi phí cho busy waiting sẽ rất thấp
25
Sleep & wake-up
Semaphore
Deadlock chờ đợi vô hạn định một sự kiện không bao giờ xảy ra

Starvation ti ế n t r ì n h c ó t h ể k h ô n g b a o g i ờ đ ư ợ c l ấ y r a k h ỏ i h à n g đ ợ i
S và Q là hai biến semaphore được khởi tạo = 1
P0 P1
wait(S); wait(Q);
wait(Q); wait(S);
signal(S); signal(Q);
signal(Q); signal(S);
P0 gọi wait(S), rồi P1 gọi wait(Q) => S.value = 1- 1 = 0, Q.value = 1 – 1 = 0
Tiếp tục cho P 0 gọi wait (Q) => bị blocked , P1 gọi wait (S) => bị blocked
=> không thể gọi được hàm signal nào 26
Sleep & wake-up
3 bài toán kinh điển

Bounded Buffer Dining-Philosophers Readers and Writers


Problem Problem Problem

Nhà máy sản xuất đưa Writer và Reader không


Chia đũa cho các
hàng vào kho và người được truy xuất
triết gia
mua lấy hàng từ kho database cùng lúc
27
Bounded Buffer Problem 3 bài toán kinh điển

Tạo 1 item Nhà máy Khách hàng giảm value của full, nếu value full
< 0 thì bị block (người không
được mua hàng)
kiểm tra số buffer empty,
nếu < 0 thì bị item đó bị do { do {
block (không còn chỗ trống nextp = new_item(); wait(full) Nếu mutex<0 thì nhà máy đang
để đưa hàng vào), nếu số … wait(mutex); can thiệp kho, chờ đến khi nhà
buffer còn trống > 0 thì gọi wait(empty); … máy xong thì mới được mua hàng
wait(mutex) để kiểm tra có
wait(mutex); nextc = get_buffer_item(out);
ai đang can thiệp kho
không … …
Tăng mutex để cho người khác
insert_to_buffer(nextp); signal(mutex); vào
nếu mutex.value < 0 thì có
người can thiệp kho, chờ
… signal(empty);
đến khi người đó làm xong signal(mutex); …
và gọi signal(mutex) thì nhà signal(full); consume_item(nextc);
máy sẽ được wake-up và } while (1); }while (1); Tăng empty, nếu empty
vào CS. Thực hiện xong thì <=0 thì đánh thức 1 item
nhà máy gọi signal(mutex) khác (cho phép thêm
Semaphore full, empty, mutex;
để tăng mutex value cho hàng vào kho)
Khởi tạo:
người khác vào.
full = 0; //số buffers đầy
gọi signal(full) -> tăng giá trị của full, empty = n; // số buffers trống Xem lại wait&signal slide 17
nếu full <= 0 -> wake-up cho 1 item mutex = 1; //1 thời điểm chỉ có 1 bên được can
khác vào kho thiệp kho 28
Dining-Philosophers Problem 3 bài toán kinh điển

5 triết gia ngồi ăn


Triết gia thứ i:
Mỗi người cần 2 chiếc đũa để ăn
do { Tr ê n b à n c h ỉ c ó 5 đ ũ a
wait(chopstick [i]) o Khởi tạo value của từng đũa là 1
o Triết gia thứ i ăn được khi cây đũa thứ
wait(chopstick [(i + 1) % 5])
i và thứ i+1 chưa được ai dùng
… Nếu cây đũa thứ i có value < 0 thì triết
gia bị block
eat
Kiểm tra thêm cây đũa thứ i+1
… Nếu cả i và i+1 đều chưa có người dùng
signal(chopstick [i]); thì cho triết gia dùng cả đôi để ăn
Ăn xong thì tăng value i và i+1 lên 1,
signal(chopstick [(i + 1) % 5]); b á o h i ệ u đ ã s ẵ n s à n g c h o n g ư ờ i k h á c
} while (1); sử dụng.

29
Dining-Philosophers Problem 3 bài toán kinh điển

Deadlock
khi tất cả đồng thời cầm lên chiếc đũa bên tay
Triết gia thứ i:
trái ⇒ mỗi người giữ 1 cây => không ai ăn được
do {
để signal
wait(chopstick [i])
wait(chopstick [(i + 1) % 5]) Giải quyết

… Cách 1: Tối đa 4 người ngồi => Mỗi người cầm 1

eat c h i ế c = > v ẫ n d ư 1 c h i ế c đ ể 1 n g ư ờ i ă n x o n g t r ư ớ c

… C á c h 2 : Tr i ế t g i a n g ồ i ở v ị t r í l ẻ c ầ m đ ũ a b ê n t r á i

signal(chopstick [i]); t r ư ớ c , r ồ i m ớ i đ ế n đ ũ a b ê n p h ả i , t r i ế t g i a ở v ị t r í
c h ẵ n c ầ m đ ũ a b ê n p h ả i t r ư ớ c , r ồ í m ớ i đ ế n đ ũ a b ê n
signal(chopstick [(i + 1) % 5]);
trái => triết gia lẻ cầm chiếc đũa của triết gia
} while (1);
c h ẵ n t h ì t r i ế t g i a c h ẵ n p h ả i đ ợ i
30
Reader Writer Problem 3 bài toán kinh điển

Writer không được cập nhật dữ liệu khi có một Reader đang truy xuất CSDL
1 t h ờ i đ i ể m - > c h ỉ c h o p h é p 1 W r i t e r s ử a đ ổ i C S D L

Khai báo: Reader process


semaphore mutex = 1; Block nếu có người đang truy
wait(mutex); xuất CSDL
semaphore wrt = 1; readcount++;
int readcount = 0; if (readcount == 1)
wait(wrt); Bị block nếu có writer đang viết
signal(mutex);
Writer Tăng mutex để không cho
... người khác Read
reading is performed
wait(wrt); ... Giảm mutex. Mutex = 0 thì
... wait(mutex); người khác trong hang đợi
writing is performed readcount--; đ ư ợ c p h é p r e a d
... if (readcount == 0) Ngừng đọc thì cộng wrt lên
signal(wrt); signal(wrt); 1 , c h o p h é p w r i t e r
signal(mutex);
31
Sleep & wake-up

Monitor

Là một cấu trúc ngôn ngữ cấp cao, có chức năng như semaphore nhưng
Khái niệm dễ điều khiển hơn
Có thể hiện thực bằng semaphore

Một hoặc nhiều thủ tục (procedure)


Gồm Một đoạn code khởi tạo (initialization code)
Các biến dữ liệu cục bộ (local data variable)

Dùng các thủ tục của monitor để truy xuất biến local
Đ ặ c tí n h Process “vào monitor” bằng cách gọi một trong các thủ tục đó

Chỉ có một process có thể vào monitor tại một thời điểm

32
Chương 6
DEADLOCKS

33
Khái niệm

o Deadlock: đợi một sự kiện không bao giờ xảy ra

Khái niệm o Có nhiều hơn một tiến trình bị liên quan

o Tiến trình trì hoãn vô hạn định nếu nó bị trì hoãn một khoảng thời

gian dài lặp đi lặp lại nhưng hệ thống lại đáp ứng các tiến trình khác

Ví dụ 1: Ví dụ 2:
Hệ thống có 2 file trên đĩa Bài toán các triết gia ăn tối
P1 và P2 mỗi tiến trình mở một file và Mỗi người cầm 1 chiếc đũa và chờ chiếc
yêu cầu mở file kia còn lại

34
Điều kiện xảy ra deadlock

1 Ít nhất một tài nguyên được giữ theo nonsharable mode

2 Giữ và chờ cấp thêm tài nguyên

Không trưng dụng: tài nguyên không thể bị lấy lại mà chỉ có thể
3
được trả lại từ tiến trình đang giữ tài nguyên đó khi nó muốn

4 Chu trình đợi: tồn tại vòng tròn các quá trình đang đợi sao cho
o P0 đợi một tài nguyên mà P1 giữ

o P1 đợi một tài nguyên mà P2 giữ



o Pn đợi một tài nguyên mà P0 giữ
35
Đồ thị cấp phát tài nguyên (RAG)

o Process i

o L o ạ i t à i n g u y ê n R j v ớ i 4 t h ự c t h ể

o Pi yêu cầu một thực thể của Rj

o Pi đang giữ một thực thể của Rj Không deadlock

o Không chu trình -> không deadlock


o Chứa một (hay nhiều) chu trình:
✔M ỗi loại tài nguyên chỉ có 1
thực thể -> deadlock
✔M ỗ i lo ạ i t à i n g uy ê n c ó nh i ề u
thực thể -> có thể deadlock
Không deadlock 36
Đồ thị cấp phát tài nguyên (RAG)

Đồ thị nào có deadlock? Bài tập nhận biết deadlock

A. Đồ thị (a), (b)

B. Đồ thị (c), (d)

C. Đồ thị (b), (d)

D. Đồ thị (b), (c), (d)

37
Phương pháp giải quyết deadlocks

o Ngăn deadlock
o Tránh deadlock
o C h o p h é p h ệ t h ố n g v à o t r ạ n g t h á i d e a d l o c k , n h ư n g s a u đ ó p h á t h i ệ n
deadlock và phục hồi hệ thống
o ‘Bơ’ deadlock

✔K h á n h iều h ệ điều h à n h sử d ụ n g p h ư ơ n g p h á p n à y

✔D ea d lo c k k h ô n g đư ợ c p h á t h iện => g iả m h iệu su ấ t c ủ a h ệ t h ố n g


=> hệ thống có thể ngưng hoạt động

38
Phương pháp giải quyết deadlocks

Ngăn deadlock Không cho phép (ít nhất) 1 trong 4 điều kiện xảy ra deadlock
V ớ i t à i n g u y ê n k h ô n g c h i a s ẻ : k h ô n g t h ể
(1) Ngăn mutual exclusion
V ớ i t à i n g u y ê n c h i a s ẻ : k h ô n g c ầ n t h i ế t
(2) Giữ và chờ tài nguyên Tiến trình yêu cầu toàn bộ tài nguyên cần thiết một lần. đủ tài
nguyên => cấp phát, không đủ => tiến trình bị block
T i ế n t r ì n h p h ả i t r ả l ạ i t à i n g u y ê n t r ư ớ c k h i y ê u c ầ u c ấ p p h á t
(3) Ngăn không trưng dụng A có tài nguyên, A yêu cầu tài nguyên khác nhưng chưa được cấp
Cách 1: Hệ thống lấy lại mọi tài nguyên A đang giữ
Cách 2: Hệ thống sẽ xem tài nguyên A yêu cầu
được giữ bởi một tiến trình khác đang đợi thêm tài nguyên => hệ thống lấy lại và
cấp cho A
được giữ bởi tiến trình không đợi tài nguyên, A phải đợi => tài nguyên của A bị lấy
(4) Ngăn chu trình đợi gán số thứ tự cho tất cả các tài nguyên => tiến trình chỉ có thể
yêu cầu thực thể của một loại tài nguyên theo thứ tự tăng dần
Tiến trình yêu cầu một thực thể của loại tài nguyên R j thì phải trả lại các tài nguyên Ri có
39
s ố t h ứ t ự l ớ n h ơ n R j
Phương pháp giải quyết deadlocks

Tránh deadlock

c u n g c ấ p t h ô n g t i n v ề t à i n g u y ê n đ ể h ệ t h ố n g c ấ p p h á t t à i n g u y ê n h ợ p l ý

o Ngăn deadlock sử dụng tài nguyên không hiệu quả


o Tránh deadlock vẫn đảm bảo hiệu suất sử dụng tài nguyên tối đa
o Yêu cầu mỗi tiến trình khai báo số lượng tài nguyên tối đa cần để thực
hiện công việc
o Giải thuật tránh deadlock kiểm tra trạng thái cấp phát tài nguyên
o Trạng thái cấp phát tài nguyên được định nghĩa dựa trên số tài nguyên
còn lại, số tài nguyên đã được cấp phát, yêu cầu các tiến trình

40
Chuỗi an toàn

Không deadlock
chuỗi <P1, P2,…,Pn>

yêu cầu tài nguyên của Pi có thể được thỏa bởi


Chuỗi safe
T à i n g u y ê n h ệ t h ố n g đ a n g c ó s ẵ n
Tài nguyên mà tất cả các Pj (j < i) đang giữ Không tồn tại

Unsafe
Ví dụ Hệ thông có 12 tape drive và 3 tiến trình P0, P1, P2
Tại thời điểm to
Maybe deadlock

C ò n 3 t a p e d r i v e s ẵ n s à n g
Chuỗi <P1, P0, P2> là chuỗi an toàn -> hệ thống an toàn 41
Các giải thuật tránh deadlocks

Giải thuật đồ thị cấp


Giải thuật Banker
phát tài nguyên

Mỗi tài nguyên có 1 thực thể Mỗi tài nguyên có nhiều thực thể

Không có điều kiện tiến trình phải khai tiến trình đã có đủ tài
báo số thực thể tối đa nguyên thì phải hoàn
của mỗi loại tài trả trong một khoảng
nguyên nó cần thời gian

Sơ đồ cấp phát

42
Các giải thuật tránh deadlocks

C á c b ư ớ c t h ự c h i ệ n g i ả i t h u ậ t B a n k e r

B1 Tìm Need = Max – Allocation

Tìm tiến trình Pi thỏa:

B2 + Pi chưa hoàn thành thực thi

Nếu không + Needi ≤ Available


còn Pi thỏa Có Pi

Available = Available+ Allocationi


B3
Thêm Pi vào chuỗi

Nếu chuỗi có tồn tại đủ hết các P


B4
=> hệ thống tồn tại chuỗi an toàn & ngược lại
43
Các giải thuật tránh deadlocks Giải thuật Banker

Sử dụng giải thuật


Banker, cho biết hệ
thống có an toàn hay
không?

44
Các giải thuật tránh deadlocks Giải thuật Banker

Nếu P3 yêu cầu thêm tài


nguyên (1, 3, 1, 2) thì hệ
thống có đáp ứng không?

Phương pháp giải:


yes B ư ớ c 2
B1 Requesti ≤ Needi ?
no Báo lỗi
yes B ư ớ c 3
B2 Requesti ≤ Available ? Chờ đến khi có đủ tài nguyên
no
Available = Available – Requesti
Cấp phát tài nguyên
B3 Allocation = Allocation + Requesti
theo yêu cầu của Pi
Needi = Needi – Requesti

Safe tài nguyên được cấp cho Pi


B4 Áp dụng giải thuật Banker
45
Unsafe Pi phải đợi
Các giải thuật tránh deadlocks Giải thuật Banker

Nếu P3 yêu cầu thêm tài nguyên (1, 3,


1, 2) thì hệ thống có đáp ứng không?

46
Các giải thuật tránh deadlocks Giải thuật yêu cầu tài nguyên

BT2: tại thời điểm t0

Chọn phát biểu SAI:


A. Tại thời điểm t1, nếu P4 yêu cầu thêm tài nguyên (2, 3, 1, 3) thì hệ thống sẽ đáp ứng.
B. Trạng thái hiện tại của hệ thống là an toàn.
C. Tại thời điểm t1, nếu P1 yêu cầu thêm tài nguyên (1, 2, 1, 2) thì hệ thống không đáp ứng
D. Chuỗi (1,3,2,5,4) là một chuỗi an toàn của hệ thống

47
Phát hiện & phục hồi deadlock

Phát hiện deadlock

Mỗi loại tài nguyên


có 1 thực thể

Dùng sơ đồ wait-for

1. Thực hiện tương tự giải thuật Banker


2. Thay cột Need = cột Request
Mỗi loại tài nguyên 3. Liệt kê choỗi an toàn
có nhiều thực thể
=> Tiến trình không có trong chuỗi thì deadlock
xảy ra tại tiến trình đó
48
Phát hiện & phục hồi deadlock

Phục hồi deadlock


✔B á o n g ư ờ i v ậ n h à n h
✔C h ấ m d ứ t m ộ t h a y n h i ề u t i ế n t r ì n h
✔L ấ y l ạ i t à i n g u y ê n t ừ m ộ t h a y n h i ề u t i ế n t r ì n h

Chấm dứt lần lượt từng tiến trình cho đến khi không còn deadlock

Chấm dứt dựa trên:


1 . Đ ộ ư u ti ê n c ủ a ti ế n t r ì n h
2 . T h ờ i g i a n đ ã t h ự c t h i c ủ a ti ế n t r ì n h v à t h ờ i g i a n c ò n l ạ i
3 . L o ạ i t à i n g u y ê n ti ế n t r ì n h đ ã s ử d ụ n g
4 . Tà i n g u y ê n m à ti ế n t r ì n h c ầ n t h ê m đ ể h o à n t ấ t c ô n g v i ệ c
5 . S ố l ư ợ n g ti ế n t r ì n h c ầ n đ ư ợ c c h ấ m d ứ t
6. Tiến trình là interactive hay batch
49
Phục hồi deadlock

✔L ấ y l ạ i t à i n g u y ê n t ừ m ộ t h a y n h i ề u t i ế n t r ì n h

o L ấ y l ạ i t ừ 1 ti ế n t r ì n h , c ấ p c h o ti ế n t r ì n h k h á c c h o đ ế n k h i k h ô n g c ò n d e a d l o c k
o Chọn “nạn nhân” để tối thiểu chi phí
o Tr ở l ạ i t r ạ n g t h á i t r ư ớ c d e a d l o c k ( R o l l b a c k )
o Đói tài nguyên (Starvation)

Tiến trình bị lấy lại tài nguyên trở về trạng


B ả o đ ả m k h ô n g c ó ti ế n t h á i s a f e , ti ế p t ụ c ti ế n t r ì n h t ừ t r ạ n g t h á i đ ó .
trình nào luôn luôn bị H ệ t h ố n g c ầ n l ư u g i ữ m ộ t s ố t h ô n g ti n v ề
lấy lại tài nguyên mỗi t r ạ n g t h á i c á c ti ế n t r ì n h đ a n g t h ự c t h i .
khi có deadlock

50
Chương 7

Quản lý bộ nhớ

51
Khái niệm

Cơ chế phân trang Đ ị a c h ỉ b ộ n h ớ

Q u ả n l ý b ộ n h ớ Nạp chương trình


v à o b ộ n h ớ

Chuyển đổi địa chỉ 52


Khái niệm

o C h ư ơ n g t r ì n h = > m a n g v à o t r o n g b ộ n h ớ = > đ ặ t v à o ti ế n t r ì n h = > x ử l ý


o I n p u t Q u e u e – t ậ p h ợ p n h ữ n g ti ế n t r ì n h t r ê n đ ĩ a , đ a n g c h ờ đ ể đ ư ợ c m a n g
v à o t r o n g b ộ n h ớ đ ể t h ự c t h i .
o H ệ đ i ề u h à n h q u ả n l ý b ộ n h ớ v ớ i s ự h ỗ t r ợ c ủ a p h ầ n c ứ n g

p h â n p h ố i , s ắ p x ế p c á c p r o c e s s t r o n g b ộ n h ớ
o M ụ c ti ê u n ạ p c à n g n h i ề u p r o c e s s v à o b ộ n h ớ c à n g t ố t
o Tr o n g h ầ u h ế t c á c h ệ t h ố n g , k e r n e l s ẽ c h i ế m m ộ t p h ầ n c ố đ ị n h c ủ a b ộ
n h ớ ; p h ầ n c ò n l ạ i p h â n p h ố i c h o c á c p r o c e s s .
C ấ p p h á t b ộ n h ớ c h o c á c p r o c e s s
Tá i đ ị n h v ị ( r e l o c a t i o n ) : k h i s w a p p i n g , …
Yê u c ầ u đ ố i v ớ i
B ả o v ệ : p h ả i k i ể m t r a t r u y x u ấ t b ộ n h ớ c ó h ợ p l ệ k h ô n g
q u ả n l ý b ộ n h ớ
C h i a s ẻ : c á c p r o c e s s c h i a s ẻ v ù n g n h ớ c h u n g
G á n đ ị a c h ỉ n h ớ l u ậ n l ý c ủ a u s e r v à o đ ị a c h ỉ t h ự c 53
Đ ị a c h ỉ b ộ n h ớ

Đ ị a c h ỉ v ậ t l ý Đ ị a c h ỉ l u ậ n l ý
(Physical/ địa chỉ thực) (Logical/ địa chỉ ảo)

1 v ị t r í n h ớ t r o n g m ộ t c h ư ơ n g t r ì n h
1 v ị t r í t h ự c t r o n g b ộ n h ớ c h í n h
t r ì n h b i ê n d ị c h d ị c h m ã = > m ọ i t h a m c h i ế u
b ộ n h ớ đ ề u l à đ ị a c h ỉ l o g i c

Địa chỉ tương đối Địa chỉ tuyệt đối


địa chỉ được biểu diễn
= địa chỉ thực
t ư ơ n g đ ố i s o v ớ i m ộ t v ị t r í
nào đó trong chương trình

54
N ạ p c h ư ơ n g t r ì n h v à o b ộ n h ớ

Tổ n g h ợ p o b j e c t m o d u l e = > fi l e n h ị p h â n l o a d m o d u l e

nạp load module


v à o b ộ n h ớ c h í n h

55
N ạ p c h ư ơ n g t r ì n h v à o b ộ n h ớ
ABBOTT.C COSTELLO.C
int idunno; ...
... int whosonfirst (int x)
whosonfirst(idunno); { SOURCE CODE
Khi mỗi file được ... ...
}
biên dịch, các địa chỉ
Compiler Compiler
là chưa biết, vì thế
ABBOTT.OBJ COSTELLO.OBJ
trình biên dịch dùng ... ... OBJECT CODE
MOVE R1, (idunno) ...
các cờ để đánh dấu CALL whosonfirst whosonfirst:
... ...

Linker Memory
Trình linker kết nối
HAHAHA.EXE
các files => nó có HAHAHA.EXE ...
... MOVE R1, 22388
Loader/
thể thay thế các chỗ MOVE R1, 2388 CALL 21547
CALL 1547 locator ...
đ á n h d ấ u v ớ i đ ị a c h ỉ ... ...
... 21547 MOVE R1, R5
1547 MOVE R1, R5 Phải xác định địa ...
thật ... c h ỉ b ộ n h ớ b ắ t đ ầ u 22388
(value of idunno))
56
2388 (value of idunno) để thực thi
Chuyển đổi địa chỉ

có thể là địa chỉ thực


địa chỉ tương đối
Thời điểm linking/loading
Trong source code Trong thời điểm biên dịch

0 2000
int i;
Địa chỉ ở dạng goto p1;
symbolic (tên p1
biến,hằng…) 250 2250
symbolic address relocatable address
physical memory

C o m p i l e t i m e : b i ế t t r ư ớ c đ ị a c h ỉ b ộ n h ớ c ủ a c h ư ơ n g
trình => gán địa chỉ tuyệt đối khi compile
Chuyển địa chỉ thành
Load time: loader phải chuyển đổi địa chỉ tương đối
địa chỉ thực tại
thành địa chỉ thực dựa trên một địa chỉ nền

Thời điểm thực thi chương trình


57
Q u ả n l ý b ộ n h ớ

Dynamic Linking

Là quá trình kết nối đến một


external module sau khi đã tạo
xong load module

✔G i ú p c h ư ơ n g t r ì n h t h ự c t h i c ó t h ể d ù n g c á c p h i ê n b ả n k h á c n h a u c ủ a e x t e r n a l
module mà không cần sửa đổi, biên dịch lại.
✔c o d e s h a r i n g : m ộ t e x t e r n a l m o d u l e c h ỉ c ầ n n ạ p v à o b ộ n h ớ m ộ t l ầ n . C á c
p r o c e s s c ầ n d ù n g e x t e r n a l m o d u l e n à y t h ì c ù n g c h i a s ẻ đ o ạ n m ã ⇒ ti ế t k i ệ m
k h ô n g g i a n n h ớ 58
Q u ả n l ý b ộ n h ớ

Dynamic loading

✔C h ỉ n ạ p t h ủ t ụ c v à o b ộ n h ớ k h i đ ư ợ c g ọ i đ ế n
= > t ă n g h i ệ u s u ấ t b ộ n h ớ , t r á n h l ã n g p h í
✔R ấ t h i ệ u q u ả t r o n g t r ư ờ n g h ợ p t ồ n t ạ i k h ố i l ư ợ n g l ớ n m ã c h ư ơ n g
trình có tần suất sử dụng thấp
✔U s e r c h ị u t r á c h n h i ệ m t h i ế t k ế v à h i ệ n t h ự c c á c c h ư ơ n g t r ì n h c ó
dynamic loading
✔H ệ đ i ề u h à n h c u n g c ấ p m ộ t s ố t h ủ t ụ c t h ư v i ệ n h ỗ t r ợ , t ạ o đ i ề u
kiện cho lập trình viên

59
Phân mảnh

Phân mảnh ngoại Phân mảnh nội

k h ô n g g i a n n h ớ c ò n t r ố n g đ ủ đ ể t h ỏ a X ả y r a k h i b ộ n h ớ t h ự c đ ư ợ c c h i a

mãn một yêu cầu nhưng không gian t h à n h c á c k h ố i k í c h t h ư ớ c c ố đ ị n h

n h ớ n à y k h ô n g l i ê n t ụ c và các process được cấp phát theo

⇒ dùng cơ chế kết khối để gom lại đơn vị khối.

t h à n h v ù n g n h ớ l i ê n t ụ c . vùng n h ớ được cấp phát có thể


n h i ề u h ơ n v ù n g n h ớ đ ư ợ c y ê u c ầ u
operating
system
Yêu cầu: 18000 byte Dư ra 2 byte
(used) không dùng
Hiện có: 18002 byte => cấp luôn
18002 byte
60
Chiến lược placement

o K h i k h ở i đ ộ n g , b ộ n h ớ c h í n h đ ư ợ c c h i a t h à n h n h i ề u p h ầ n ( p a r t i t i o n )

Đặt vấn đề o P r o c e s s c ó k í c h t h ư ớ c < = p a r ti ti o n → đ ư ợ c n ạ p v à o p a r t i t i o n


o C h ư ơ n g t r ì n h c ó k í c h t h ư ớ c > p a r ti ti o n → d ù n g c ơ c h ế o v e r l a y
o Do bị phân mảnh nội → một chương trình nhỏ cũng được cấp phát
trọn 1 partition
N ế u c ò n p a r ti ti o n t r ố n g n ạ p p r o c e s s m ớ i
Partition có kích swap process bị
t h ư ớ c b ằ n g n h a u b l o c k r a b ộ n h ớ p h ụ
K h ô n g c ò n p a r ti ti o n t r ố n g n h ư ờ n g p r o c e s s m ớ i

Giải pháp
cho vào partition nhỏ nhất
p h u ̀ h ợ p v ớ i n ó
P a r ti ti o n c ó k í c h
t h ư ớ c k h ô n g b ằ n g chọn partition nhỏ nhất
61
còn trống
Chiến lược placement

P a r t i t i o n c ó k í c h t h ư ớ c k h ô n g b ằ n g n h a u
Giải pháp 1

Có hàng đợi Gán mỗi P vào


cho mỗi partition nhỏ nhất
partition p h ù h ợ p v ớ i n ó

Vấn đề: Giảm thiểu


có thể có một số p h â n m ả n h n ộ i
hàng đợi trống
(do không có P
phù hợp) & hàng
đợi dày đặc
Chiến lược placement

P a r t i t i o n c ó k í c h t h ư ớ c k h ô n g b ằ n g n h a u
Giải pháp 2

N ạ p P v à o b ộ n h ớ c h í n h

1 hàng đợi chung chọn partition nhỏ


cho mọi partition nhất còn trống

63
Chiến lược placement

✔B e s t - f i t : c h ọ n k h ố i n h ớ t r ố n g n h ỏ n h ấ t
✔F i r s t - f i t : c h ọ n k h ố i n h ớ t r ố n g p h ù h ợ p
đ ầ u t i ê n k ể t ừ đ ầ u b ộ n h ớ
✔N e x t - f i t : c h ọ n k h ố i n h ớ t r ố n g p h ù h ợ p
đầu tiên kể từ vị trí cấp phát cuối cùng
✔W o r s t - f i t : c h ọ n k h ố i n h ớ t r ố n g l ớ n n h ấ t

64
Cơ chế phân trang
Những thuật ngữ

B ộ n h ớ v ậ t l ý : l à k h u n g t r a n g ( f r a m e ) , c ó k í c h t h ư ớ c l ũ y t h ừ a c ủ a 2
B ộ n h ớ l u ậ n l ý : t ậ p h ợ p đ ị a c h ỉ l o g i c m à 1 c h ư ơ n g t r ì n h c ó t h ể s i n h r a → p a g e
B ả n g p h â n t r a n g : c h u y ể ṇ đ ị a c h ỉ l u ậ n l ý - > đ ị a c h ỉ t h ự c
Đ ị a c h ỉ l u ậ n l ý g ồ m :
• Số trang (Page number) p
• Địa chỉ tương đối trong trang (Page offset) d
K í c h t h ư ớ c c ủ a k h ô n g g i a n đ ị a c h ỉ ả o l à 2 m , v à k í c h t h ư ớ c c ủ a t r a n g l à 2 n t h ì
page number page offset

p d

m - n bits n bits
(định vị từ 0 ÷ 2m − n − 1) (định vị từ 0 ÷ 2n − 1)

B ả n g t r a n g s ẽ c ó t ổ n g c ộ n g 2 m/ 2 n = 2 m - n mục (entry)
65
Cơ chế phân trang
Cơ chế

page frame
number number

0
0
0 1
1 page 0
1
1 4
2
2 2 3
3 5 3 page 2
3
4 page 1
logical memory page table

physical memory
66
Cơ chế phân trang

Chuyển đổi địa chỉ trong phân trang

f frames
logical physical
address address f 00…00

CPU p d f d

f 11…11
p

physical
memory
page table

67
Cơ chế phân trang

Chuyển đổi địa chỉ trong phân trang

68
Cơ chế phân trang

Bài tập phân trang

B T 1 : H ệ t h ố n g c ó b ộ n h ớ đ ư ợ c c ấ p p h á t t h e o c ơ c h ế p h â n t r a n g v ớ i k í c h t h ư ớ c
t r a n g v à k h u n g t r a n g l à 1 0 2 4 b y t e . B i ế t t r a n g 0 v à t r a n g 1 c ủ a b ộ n h ớ ả o l ầ n
l ư ợ t đ ư ợ c n ạ p v à o k h u n g t r a n g 4 , 2 c ủ a b ộ n h ớ v ậ t l ý . H ỏ i đ ị a c h ỉ ả o 6 8 4 đ ư ợ c
á n h x ạ t h à n h đ ị a c h ỉ v ậ t l ý b a o n h i ê u ?

A. 684 K í c h t h ư ớ c 1 0 2 4 = 2 1 0 = > n = 1 0 b i t
Page Frame Địa chỉ tương đối là 684 => 684 =10101011
B. 2732
number number Mà n = 10 bit => cắt từ 684 n bit: …0 | 101
C. 4780 0 4
1 2 m bit 684 vừa đủ
D. 1708 số 0 10 bit

Đ ị a c h ỉ v ậ t l ý = 1 0 0 | 1 0 1 0 1 0 1 1 0 0 = 4 7 8 0
69
Cơ chế phân trang

Bài tập phân trang

B T 2 : B ộ v i x ử l ý M I P S R 2 0 0 0 c ó k h ô n g g i a n đ ị a c h ỉ ả o 3 2 b i t v ớ i k í c h
t h ư ớ c t r a n g ( p a g e ) l à 4 0 9 6 b y t e . M ỗ i m ụ c ( e n t r y ) t r o n g b ả n g t r a n g c ó
k í c h t h ư ớ c 3 2 b i t . H ỏ i k í c h t h ư ớ c c ủ a b ả n g t r a n g l à b a o n h i ê u ?

A. 0.5 MB
K í c h t h ư ớ c t r a n g 2 n = 4 0 9 6 s u y r a n = 1 2
B. 1 MB
S ố m ụ c = 2 m-n = 2 32-12 = 2 20
C. 2 MB

D. 4 MB K í c h t h ư ớ c b ả n g t r a n g = 2 2 0 x 3 2 = 4 M B

70
Cơ chế phân trang
Bài tập phân trang
B T 3 . B ộ n h ớ v ậ t l ý c ủ a m ộ t
h ệ t h ố n g c ó k í c h t h ư ớ c 4 M B
được chia thành 256 khung
trang. Để quản l ý bộ n h ớ
này, hệ thống sử dụng một
b ả n g t r a n g v ớ i 3 2 t r a n g . Đ ị a
c h ỉ l u ậ n l ý c ó t ố i t h i ể u b a o
nhiêu bit để truy xuất bộ
K í c h t h ư ớ c b ộ n h ớ v ậ t l ý = 4 M B = 2 2 2 B y t e
n h ớ t r ê n ?
Số khung trang = 256 → cần tối thiểu 8 bit
A. 19 bit C. 14 bit trang
→ Số bit offset = 22 – 8 = 14 bit

B. 22 bit D. 13 bit Số trang 32 → cần tối thiểu 5bit khung trang


→ Đ ị a c h ỉ l u ậ n l ý t ố i t h i ể u : 5 + 1 4 = 1 9 71
bit
Cơ chế phân trang
Bài tập phân trang
B T 4 . B ộ n h ớ v ậ t l ý c ủ a m ộ t h ệ t h ố n g
c ó k í c h t h ư ớ c 8 M B đ ư ơ c q u ả n l ý b ở i
một bảng trang có 32 trang. Hệ thống
s ử d ụ n g đ ị a c h ỉ l u ậ n l ý 2 0 b i t . H ỏ i
k í c h t h ư ớ c c ủ a m ỗ i k h u n g t r a n g c ủ a
b ộ n h ớ l à b a o n h i ê u ?

A. 32 KB

B. 8 KB Có 32 trang → cần tối thiểu 5 bit trang


Đ ị a c h ỉ l u ậ n l ý 2 0 b i t
C. 16 KB → Số bit offset = 20 – 5 = 15 bit
→ K í c h t h ư ớ c c ủ a m ỗ i k h u n g t r a n g = 2 15 b y t e s = 3 2 K B
D. 1 KB
72
Cơ chế phân trang

Bài tập phân trang

B T 5 . X é t m ộ t k h ô n g g i a n đ ị a c h ỉ ả o c ó 1 1 2 t r a n g , m ỗ i t r a n g c ó k í c h t h ư ớ c
2 0 4 8 b y t e s đ ư ợ c á n h x ạ v à o b ộ n h ớ c ó 6 4 k h u n g t r a n g . K í c h t h ư ớ c b ả n g
phân trang là bao nhiêu nếu mỗi mục(entry ) trong nó cần 1 bytes?

A. 58 bytes Số trang = 112 → cần tối thiểu 7 bit ( vì 27 = 128 )

M ỗ i t r a n g c ó k í c h t h ư ớ c 2 0 4 8 b y t e s = 2 1 1
B. 128 bytes
→ K í c h t h ư ớ c đ ị a c h ỉ ả o = 2 7 * 2 1 1 = 2 1 8
C. 112 bytes
S ố m ụ c = K í c h t h ư ớ c đ ị a c h ỉ ả o / k í c h t h ư ớ c m ỗ i t r a n g = 2 7

D. 64 bytes → Kích thước bảng phân trang = 27 * 1 = 27 bytes

73
Cơ chế phân trang

Bài tập phân trang

B T 6 . M ộ t m á y t í n h c ó k h ô n g g i a n đ ị a c h ỉ ả o 3 2 b i t , q u ả n l ý b ộ n h ớ b ằ n g
cách sử dụng kết hợp phân trang và phân đoạn. Trong đó 4 bit đầu tiên là
dành cho đoạn, 16 bit kế tiếp dành cho trang, số bit còn lại dành cho
offset. Khi tiến trình truy xuất địa chỉ 0xC0DEDBAD thì chỉ số trang là bao
nhiêu?

A. 0xC0
0xC0DEDBAD (hex) =
B. 0xC0DE 1100 0000 1101 1110 1101 1011 1010 1101 (bin)

C. 0x0DED → 0000 1101 1110 1101 = 0DED.

D. 0xBAD

74
Cơ chế phân trang

Bài tập phân trang

B T 7 . X é t m ộ t h ệ t h ố n g s ử d ụ n g k ỹ t h u ậ t p h â n t r a n g , v ớ i b ả n g t r a n g
đ ư ợ c l ư u t r ữ t r o n g b ộ n h ớ c h í n h . N ế u t h ờ i g i a n c h o m ộ t l ầ n t r u y x u ấ t
b ộ n h ớ b ì n h t h ư ờ n g l à 2 0 0 n s t h ì m ấ t b a o n h i ê u t h ờ i g i a n c h o m ộ t t h a o
t á c t r u y x u ấ t b ộ n h ớ t r o n g h ệ t h ố n g n à y ?

A. 400ns

B. 200ns
x + x = 200 + 200 = 400ns
C. 800ns

D. 100ns

75
Cơ chế phân trang

Cài đặt bảng trang

o Bảng phân trang lưu trong bộ nhớ


chính
o Mỗi process được hệ điều hành cấp
một bảng phân trang
✔T h a n h g h i P T B R t r ỏ đ ế n b ả n g p h â n
trang
✔T h a n h g h i P T L R t h ể h i ệ n k í c h t h ư ớ c
của bảng
✔T h a n h g h i T L B : b ô ̣ p h ậ n c a c h e p h ầ n
c ứ n g c ó t ố c đ ộ t r u y x u ấ t v à tì m k i ế m Dùng
TLB
cao 76
Cơ chế phân trang

Thời gian truy xuất hiệu dụng (EAT)

EAT = (ε + x)α + (ε + 2x)(1 – α)= (2 – α)x + ε


α ( h i t r a t i o ) : t ỉ s ố g i ữ a s ố l ầ n t r a n g đ ư ợ c tì m t h ấ y t r o n g T L B v à s ố l ầ n t r u y x u ấ t t ừ C P U
ε : T h ờ i g i a n tì m k i ế m t r o n g T L B
X : T h ờ i g i a n m ộ t c h u k ỳ t r u y x u ấ t b ộ n h ớ
Ví dụ

S ử d ụ n g T L B s v ớ i h i t - r a t i o ( t ỉ l ệ t ì m t h ấ y ) l à 9 0 % A. 200 C. 40

t h ì t h ờ i g i a n t r u y x u ấ t b ộ n h ớ t r o n g h ệ t h ố n g B. 20 D. 220
(effective memory reference time) là 240 ns. Nếu
tỉ lệ tìm thấy là 80% thì thời gian truy xuất bộ Ta có hệ phương trình:

n h ớ t r o n g h ệ t h ố n g l à 2 6 0 n s . T í n h t h ờ i g i a n đ ể (2 – 0.9)x + ε = 240 (1)

tìm trong TLBs? (2 – 0.8)x + ε = 260 (2)


⇨ x = 200ns; ε = 20ns
77
Tổng quan

Cài đặt

Chương 8
3 giải thuật thay trang

Bộ nhớ ảo Vấn đề cấp phát

Vấn đề thrashing

78
Tổng quan

B ộ n h ớ ả o ( v i r t u a l m e m o r y ) : 1 ti ế n t r ì n h k h ô n g đ ư ợ c n ạ p t o à n b ộ
v à o b ộ n h ớ v ậ t l ý = > x ử l ý t r o n g b ộ n h ớ ả o

Ưu đ i ể m
✔S ố l ư ợ n g p r o c e s s t r o n g b ộ n h ớ n h i ề u h ơ n
✔M ộ t p r o c e s s c ó t h ể t h ự c t h i c ả k h i k í c h t h ư ớ c > b ộ n h ớ t h ự c
✔G i ả m n h ẹ c ô n g v i ệ c c ủ a l ậ p t r ì n h v i ê n

K h ô n g g i a n t r á o đ ổ i g i ữ a b ộ n h ớ swap partition

c h í n h v à b ộ n h ớ p h ụ ( s w a p s p a c e )
file pagefile.sys

79
C à i đ ặ t b ộ n h ớ ả o

2 kỹ thuật:

o Phân trang theo yêu cầu (Demand Paging)

o Phân đoạn theo yêu cầu (Demand Segmentation)

✔P h ầ n c ứ n g m e m o r y m a n a g e m e n t p h ả i h ỗ t r ợ 2 k ỹ t h u ậ t

✔O S p h ả i q u ả n l ý s ự d i c h u y ể n c ủ a t r a n g / đ o ạ n g i ữ a b ộ n h ớ c h í n h v à b ộ n h ớ ả o

c á c t r a n g c h ỉ đ ư ợ c n ạ p v à o b ộ n h ớ c h í n h k h i đ ư ợ c y ê u c ầ u

Khởi động page-


tham chiếu đến 1 trang không có Phần cứng gọi
fault service
t r o n g b ộ n h ớ c h í n h = > p a g e - f a u l t page-fault trap
routine (PFSR)
80
C à i đ ặ t b ộ n h ớ ả o
PFSR

Block process đó

Y ê u c ầ u đ ọ c đ ĩ a đ ể t h ê m t r a n g m ớ i

Trong lúc đợi I/O, 1 process khác


c ó t h ể t h ự c t h i t r ư ớ c

I/O ready => đĩa gọi ngắt


⇒ update page table
⇒ unblocked process

Không có Dùng giải thuật thay trang chọn một trang hy sinh (victim page)
frame trống G h i v i c ti m p a g e l ê n đ ĩ a
81
Giải thuật thay trang

M ụ c ti ê u : s ố l ư ợ n g p a g e - f a u l t n h ỏ n h ấ t

LRU FIFO OPT

Thay trang có thời điểm Thay trang n h ớ được


tham chiếu (đầu tiên) nhỏ V à o t r ư ớ c r a t r ư ớ c tham chiếu trễ nhất
nhất trong quá khứ trong tương lai

Xuất hiện lần đầu

Có thể dọn page không


t ố n c h i p h í tì m k i ế m
cần thiết
82
Bài tập Giải thuật thay trang

1 t i ế n t r ì n h đ ư ợ c c ấ p 4 k h u n g t r a n g t r o n g b ộ n h ớ v ậ t l ý v à 7 t r a n g t r o n g b ộ
n h ớ ả o . T ạ i t h ờ i đ i ể m n ạ p t i ế n t r ì n h v à o , 4 k h u n g t r a n g n à y đ a n g t r ố n g . T i ế n
t r ì n h t r u y x u ấ t 7 t r a n g ( 1 , 2 , 3 , 4 , 5 , 6 , 7 ) t r o n g b ộ n h ớ ả o t h e o t h ứ t ự n h ư
sau: 6 2 4 4 5 6 3 1 4 2 3 7 5 6 7 2 4 3 5 1

T ạ i t h ờ i đ i ể m t i ế n t r ì n h t r u y x u ấ t t r a n g n h ớ s ố 3 l ầ n đ ầ u t i ê n , t r a n g n h ớ
nào sẽ bị thay thế, nếu sử dụng giải thuật FIFO?

A. 6

B. 2

C. 4

D. 5

83
Bài tập Giải thuật thay trang

1 t i ế n t r ì n h đ ư ợ c c ấ p 4 k h u n g t r a n g t r o n g b ộ n h ớ v ậ t l ý v à 7 t r a n g t r o n g b ộ
n h ớ ả o . T ạ i t h ờ i đ i ể m n ạ p t i ế n t r ì n h v à o , 4 k h u n g t r a n g n à y đ a n g t r ố n g . T i ế n
t r ì n h t r u y x u ấ t 7 t r a n g ( 1 , 2 , 3 , 4 , 5 , 6 , 7 ) t r o n g b ộ n h ớ ả o t h e o t h ứ t ự n h ư
sau: 6 2 4 4 5 6 3 1 4 2 3 7 5 6 7 2 4 3 5 1

T ạ i t h ờ i đ i ể m t i ế n t r ì n h t r u y x u ấ t t r a n g n h ớ s ố 1 l ầ n đ ầ u t i ê n , t r a n g n h ớ n à o s ẽ
bị thay thế, nếu sử dụng giải thuật OPT?
A. 6
B. 2
C. 4
D. 5

84
Bài tập Giải thuật thay trang

1 t i ế n t r ì n h đ ư ợ c c ấ p 4 k h u n g t r a n g t r o n g b ộ n h ớ v ậ t l ý v à 7 t r a n g t r o n g b ộ
n h ớ ả o . T ạ i t h ờ i đ i ể m n ạ p t i ế n t r ì n h v à o , 4 k h u n g t r a n g n à y đ a n g t r ố n g . T i ế n
t r ì n h t r u y x u ấ t 7 t r a n g ( 1 , 2 , 3 , 4 , 5 , 6 , 7 ) t r o n g b ộ n h ớ ả o t h e o t h ứ t ự n h ư
sau: 6 2 4 4 5 6 3 1 4 2 3 7 5 6 7 2 4 3 5 1

T ạ i t h ờ i đ i ể m t i ế n t r ì n h t r u y x u ấ t t r a n g n h ớ s ố 7 l ầ n đ ầ u t i ê n , c ó t ấ t c ả b a o
n h i ê u l ỗ i t r a n g đ ã x ả y r a ( k h ô n g t í n h l ỗ i t r a n g x ả y r a k h i n ạ p t r a n g n h ớ s ố 7 ) , n ế u
sử dụng giải thuật LRU?
A. 6
B. 2
C. 7
D. 8

85
Giải thuật thay trang

N g h ị c h l ý B e l a d y

Nghịch l ý Belady là số
page fault tăng mặc dù
quá trình đã được cấp
nhiều frame hơn

Chỉ xảy ra trong FIFO


Khắc phục được bởi OPT

86
Vấn đề cấp phát

OS quyết định cấp cho mỗi process bao nhiêu frame.

• Cấp ít frame ⇒ nhiều page fault

• Cấp nhiều frame ⇒ giảm mức độ multiprogramming

Số frame cấp không đổi Cấp phát bằng nhau

C ấ p p h á t tĩ n h Cấp phát theo độ ưu tiên


Cấp vào thời điểm loading
(fixed-allocation) Cấp phát theo tỉ lệ
Có thể tùy thuộc vào từng ứng dụng
d ự a v à o k í c h t h ư ớ c p r o c e s s

Số frame cấp cho mỗi process có thể thay đổi trong khi chạy

Cấp phát động • N ế u t ỷ l ệ p a g e - f a u l t c a o ⇒ c ấ p t h ê m f r a m e

(variable-allocation) • N ế u t ỷ l ệ p a g e - f a u l t t h ấ p ⇒ g i ả m b ớ t f r a m e

P h ả i m ấ t c h i p h í đ ể ư ớ c đ ị n h c á c p r o c e s s
87
Vấn đề thrashing

T h r a s h i n g : h i ệ n t ư ợ n g c á c t r a n g n h ớ c ủ a p r o c e s s b ị h o á n c h u y ể n v à o / r a l i ê n t ụ c

Hạn chế thrashing => hệ điều hành phải cấp cho process càng “đủ” frame càng tốt

N g u y ê n l ý l o c a l i t y ( l o c a l i t y p r i n c i p l e )

o Locality: tập hợp các trang được tham chiếu gần nhau

o Một process có nhiều locality, trong quá trình thực thi, process sẽ chuyển
từ locality này sang locality khác

Hiện tượng thrashing xuất hiện khi:

Σ size of locality > memory size

88
Vấn đề thrashing

Giải pháp tập làm việc


T h i ế t k ế d ự a t r ê n n g u y ê n l ý l o c a l i t y

Xác định xem process sử dụng bao nhiêu frame

Định nghĩa:

o WS(t) - số lượng các tham chiếu gần nhất cần được quan sát

o Δ - khoảng thời gian tham chiếu Δ =4

24569132639214

N h ậ n x é t :

o Δ quá nhỏ ⇒ không đủ bao phủ toàn bộ locality

o Δ q u á l ớ n ⇒ b a o p h ủ n h i ề u l o c a l i t y k h á c n h a u

o Δ = ∞ ⇒ bao gồm tất cả các trang được sử dụng

89
Vấn đề thrashing
Giải pháp tập làm việc
Ví dụ: Δ = 10

W S S ( t 1) = 5 W S S ( t 2) = 2

Loại trừ được trì


D = Σ WSSi = tổng các working-set size
trệ, vẫn đảm bảo
D > số frame của hệ thống⇒ thrashing đa chương

✔K h i k h ở i t ạ o : c u n g c ấ p s ố f r a m e t h o ả m ã n W S S c ủ a n ó
Giải ✔N ế u D > s ố f r a m e h ệ t h ố n g ⇒ t ạ m d ừ n g 1 p r o c e s s
pháp
✔C h u y ể n t r a n g s a n g đ ĩ a c ứ n g , t h u h ồ i c á c f r a m e
90
Wanna Play?

Củng cố kiến thức


91
THANK

THANK YOU

You might also like