Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 27 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
27
Dung lượng
681,63 KB
Nội dung
III. CÁ
C
Nguồn:
III.1.
Vấn
đ
tiến trìn
h
trình ki
a
Để đồn
g
sau :
Tiến tr
ì
đầy.(sy
n
Tiến tr
ì
trống.(s
y
Hai tiế
n
mutuell
e
Giải
p
I
II.1.
1
Sử dụn
g
còn trố
n
đồng th
ờ
C
VấNĐề
3c.com.vn
Vấn đề N
g
đ
ề: hai tiến
t
h
đóng vai
t
a
đóng vai t
r
g
bộhóa ho
ạ
ì
nh sản xu
ấ
n
chronisati
o
ì
nh tiêu th
ụ
y
nchronisa
t
n
t
r
ình sản
e
)
p
háp:
1
. Semaph
o
g
ba semap
h
n
g trong bộ
ờ
i đến bộ đ
ệ
Cổ ĐIểN
C
g
ười sản x
u
tr
ình cùng
c
tr
ò người s
ả
r
ò người ti
ê
H
ì
ạ
t động củ
a
ấ
t (produce
r
o
n)
ụ
(consume
r
t
ion)
xuất và tiê
u
o
r
e
h
ore : full,
đ
đệm; và m
u
ệ
m.
C
ủA ĐồN
G
u
ất – Ngư
ờ
c
hia sẻ mộ
t
ả
n xuất – t
ạ
ê
u thụ – lấ
y
ì
nh 3.17 P
r
a
hai tiến t
r
ì
r
) không đ
ư
r
) không đ
ư
u
thụ khôn
g
đ
ếm số chỗ
u
tex, kiểm
t
G
Bộ HOÁ
ờ
i tiêu thụ
(
t
bộ đệm c
ó
ạ
o ra dữ liệ
u
y
dữ liệu từ
r
oducer và
C
ì
nh sản xu
ấ
ư
ợc ghi dữ l
ư
ợc đọc dữ
l
g
được thao
đã có dữ l
i
t
ra việc Pr
o
(
Producer
-
ó
kích thướ
c
u
và đặt dữ
bộ đệm ra
đ
C
onsume
r
ấ
t tiêu thụ c
ầ
iệu vào bộ
l
iệu từ bộ
đ
tác t
r
ên b
ộ
i
ệu trong b
ộ
o
ducer và
C
-
Consume
r
c
giới hạn.
M
liệu vào b
ộ
đ
ể xử lý.
ầ
n tuân thủ
đệm đã
đ
ệm đang
ộ
đệm cùng
ộ
đệm; emp
C
onsumer k
h
r
)
M
ột trong
h
ộ
đệm- và t
i
các quy đị
n
lúc . (excl
u
ty, đếm số
c
h
ông truy
x
h
ai
i
ến
n
h
u
sion
c
hỗ
x
uất
Buffe
r
semap
h
quyền
semap
h
semap
h
Produ
c
{
int
w
hi
l
p
r
d
o
d
o
e
n
u
p
u
p
}
}
Consu
m
{
int
w
hi
l
d
o
d
o
r
e
u
p
u
p
c
o
}
}
I
II.1.
2
Định ng
trên bộ
đ
monit
o
c
o
i
n
pro
c
r
Size =
h
ore mu
t
h
ore em
p
h
ore fu
l
c
er()
item;
l
e (TRU
E
r
oduce
_i
o
wn(&em
p
o
wn(&mu
t
n
ter
_
it
e
p
(&mute
x
p
(&full)
m
er()
item;
l
e (TRU
E
o
wn(&fu
l
o
wn(&mu
t
e
move
_
i
t
p
(&mute
x
p
(&empt
y
o
nsume
_i
2
. Monitor
hĩa một m
o
đ
ệm. Xử lý
o
r Prod
u
o
nditio
n
n
t coun
t
c
edure
e
3;
t
ex = 1;
p
ty = Bu
f
l
l = 0;
E
) {
i
tem(&it
e
p
ty);
t
ex);
e
m(item)
;
x
);
;
E
) {
l
l);
t
ex);
t
em(&ite
m
x
);
y
);
i
tem(ite
m
o
nitor Prod
u
của các th
ủ
u
cerCons
u
n
full,
e
t
;
e
nter();
/
/ s
f
ferSiz
e
e
m);
;
/
/ g
m
);
/
/ r
/
/ t
m
);
u
cerConsu
ủ
tục này p
h
u
mer
e
mpty;
ố
chỗ t
r
// ki
ểm
e
;
/
/
// t
ạo
// gi
ả
/
/ bá
o
// đ
ặt
/
/ ra
/
/ tă
n
i
ả
m số
c
/
/ bá
o
// l
ấy
a kh
ỏ
i
m
ăng s
ố
c
// x
ử
mer với ha
i
h
ụ thuộc v
à
r
ong bộ
m
soát t
r
/
/ s
ố
ch
ỗ
/
/ s
ố
ch
ỗ
o
dữ li
ệ
ả
m số c
h
o
hi
ệu
t
dữ li
ệ
kh
ỏ
i m
i
n
g s
ố
c
h
c
hỗ đầy
o
hi
ệu
y
dữ li
ệ
m
iền gă
n
c
hỗ trố
n
lý dữ
l
i
thủ tục e
n
à
o các biến
đ
đệm
r
uy xuấ
t
ỗ
trống
ỗ
đầy
ệ
u mới
h
ỗ trống
u
vào mi
ề
ệ
u vào b
ộ
i
ền găng
h
ỗ đầy
u
vào mi
ề
ệ
u từ bộ
n
g
n
g
l
iệu
n
ter và rem
o
đ
iều kiện
fu
t
độc
ề
n găng
ộ
đệm
ề
n găng
đệm
o
ve thao tá
c
fu
ll và emp
ty
c
ty
.
{
i
f
e
n
c
o
i
f
}
pro
c
{
i
f
r
e
c
o
i
f
}
cou
n
end
Pro
d
{
wh
{
}
}
Con
s
{
wh
{
}
}
I
II.1.
3
Thông
đ
công vi
ệ
một dữ
l
Consu
m
f
(coun
t
wai
n
ter
_
it
e
o
unt ++;
f
(coun
t
si
g
c
edure
r
f
(coun
t
wai
e
move
_
i
t
o
unt ;
f
(coun
t
sign
a
n
t = 0;
monito
r
d
ucer();
h
ile (T
R
produce
Produce
s
umer();
h
ile (T
R
Produce
consume
3
. Trao đổi
đ
iệp empty
h
ệ
c bằng các
h
l
iệu mới và
m
er một thô
n
t
== N)
t(full)
;
e
m(item)
;
t
== 1)
g
nal(emp
t
r
emove()
;
t
== 0)
t(empty
)
t
em(&ite
m
t
== N-1
)
a
l(full)
;
r
;
R
UE)
_
item(&
i
rConsum
e
R
UE)
rConsum
e
_
item(i
t
thông điệ
p
h
àm ý có
m
h
gởi 4 thô
n
chờ đến k
h
n
g điệp ch
ứ
;
;
t
y);
;
)
m
);
)
;
i
tem);
e
r.ente
r
e
r.remo
v
t
em);
p
m
ột chỗ trố
n
n
g điệp em
p
h
i nhận đư
ợ
ứ
a dữ liệu .
T
// n
ế
// đ
ặt
/
/ tă
n
// n
ếu
/
/ th
ì
// n
ếu
// l
ấy
// gi
ả
// n
ếu
/
/ th
ì
r
;
v
e;
n
g trong bộ
p
ty đấng P
r
ợ
c một thô
n
T
iến t
r
ình
C
u bộ đệ
m
t
dữ li
ệ
n
g s
ố
c
h
u
bộ đệ
m
ì
kích
h
u
bộ đệ
m
y
dữ li
ệ
ả
m số c
h
u
bộ đệ
m
ì
kích
h
đệm. Tiến
t
r
oducer. Ti
ế
n
g điệp em
p
C
onsumer
c
m
đầy,
ệ
u vào b
ộ
h
ỗ đầy
m
không
t
h
o
ạ
t Con
s
m
trống
,
ệ
u từ bộ
h
ỗ đầy
m
không
đ
h
o
ạ
t Pro
d
tr
ình Cons
u
ế
n t
r
ình Pr
o
p
ty thì gởi n
c
hờ nhận t
h
phải c
h
ộ
đệm
t
rống
s
umer
,
chờ
đệm
đ
ầy
d
ucer
u
mer bắt đ
ầ
o
ducer
t
ạo
r
gược lại c
h
h
ông điệp c
h
h
ờ
ầ
u
r
a
h
o
h
ứa
dữ liệu, và sau khi xử lý xong dữ liệu này, Consumer sẽ lại gởi một thông điệp empty đến
Producer,
BufferSize = 4;
Producteur()
{
int item;
message m; // thông điệp
while (TRUE) {
produce_item(&item);
receive(consumer,&m); // chờ thông điệp empty
create_message(&m, item); // tạo thông điệp dữ
liệu
send(consumer,&m); // gởi dữ liệu đến Consumer
}
}
Consumer()
{
int item;
message m;
for(0 to N)
send(producer, &m); // gởi N thông điệp
empty
while (TRUE) {
receive(producer, &m); // chờ thông điệp dữ
liệu
remove_item(&m,&item);// lấy dữ liệu từ thông điệp
send(producer, &m); // gởi thông điệp
empty
consumer_item(item); // xử lý dữ liệu
}
}
III.2. Mô hình Readers-Writers
Vấn đề : Nhiều tiến trình đồng thời sử dụng một cơ sở dữ liệu. Các tiến trình chỉ cần
lấy nội dung củacơ sở dữ liệu được gọi là các tiế
n trình Reader, nhưng một số tiến trình
khác lại có nhu cầu sửa đổi, cập nhật dữ liệu trong cơ sở dữ liệu chung này, chúng được
gọi là các tiến trình Writer. Các quy định đồngbộhóa việc truy xuất cơ sỡ dữ liệu cần
tuân thủ là :
Không
trình Re
Tại m
ộ
liệu. (m
u
Giải
p
I
II.2.
1
Sử dụn
g
sở dữ li
ệ
db, kiể
m
semap
h
semap
h
int r
c
Reade
r
{
w
hi
l
d
r
i
u
r
d
r
i
u
u
}
}
Write
r
{
w
hi
l
c
d
w
u
}
}
cho phép
m
ader khác
đ
ộ
t thời điể
m
u
tuelle exc
l
p
háp:
1
. Semaph
o
g
một biến
c
ệ
u. Hai se
m
m
tra sự tru
y
h
ore mu
t
h
ore db
c
;
r
()
l
e (TRU
E
d
own(&m
u
r
c = rc
i
f (rc
=
down(
&
u
p(&mut
e
r
ead
_
da
t
d
own(&m
u
r
c = rc
i
f (rc
=
up(
&
u
p(&mut
e
u
se
_
dat
a
r
()
l
e (TRU
E
c
reate
_d
d
own(&d
b
w
rite
_
d
a
u
p(&db);
m
ột tiến trì
n
đ
ang truy x
u
m
, chỉ cho
p
usion).
o
r
e
c
hung rc đ
ể
m
aphore cũ
n
y
xuất độc
q
t
ex = 1;
= 1;
E
) {
u
tex);
+ 1;
=
= 1)
&
db);
e
x);
t
abase()
;
u
tex);
- 1;
=
= 0)
&
db);
e
x); //
a_
read()
;
E
) {
d
ata();
b
);
a
tabase(
)
n
h Writer c
ậ
u
ất nội dun
g
p
hép một ti
ế
ể
ghi nhớ s
ố
n
g được sử
d
q
uyền đến
c
//
K
/
/
K
//
S
/
/
g
//
t
//
//
c
//
c
;
/
/
đ
//
g
//
b
//
n
//
c
ch
ấ
m d
ứ
;
//
)
; //
//
ậ
p nhật dữ
l
g
cơ sở dữ
ế
n t
r
ình Wr
i
ố
lượng các
d
ụng : mut
e
c
ơ sở dữ liệ
u
K
i
ể
m tr
a
K
i
ể
m tra
S
ố lư
ợ
n
g
g
iành q
u
t
hêm m
ột
nếu l
à
c
ấ
m Wri
t
c
h
ấ
m dứ
t
đ
ọ
c dữ l
i
g
iành q
u
b
ớ
t một
n
ếu l
à
R
c
ho ph
é
ứ
t truy
x
giành
q
c
ậ
p nh
ậ
ch
ấ
m d
ứ
l
iệu trong
c
liệu (sync
h
i
ter được s
ử
tiến t
r
ình
R
e
x, kiểm s
o
u
.
a
truy x
u
truy x
u
g
tiến t
r
u
y
ề
n tru
y
t
tiến t
r
Reader
đ
t
er truy
t
truy x
u
i
ệu
u
y
ề
n tru
y
tiến tr
ì
R
eader c
u
é
p Write
r
x
uất rc
q
uy
ề
n tr
u
ậ
t dữ li
ệ
ứ
t truy
x
c
ơ sở dữ liệ
u
h
ronisatio
n
ử
a đổi nội
d
R
eader mu
ố
o
át sự truy
c
u
ất rc
u
ất cơ s
r
ì
nh Re
a
y
xuất
r
r
ì
nh Re
a
đ
ầu tiê
n
xuất d
ữ
u
ất rc
y
xuất
r
ì
nh Rea
d
u
ối cùn
g
r
truy
x
u
y xuất
ệ
u
x
uất db
u
khi các ti
n
)
d
ung cơ sở
d
ố
n truy xuấ
t
c
ập đến rc;
ở dữ li
ệ
a
der
r
c
a
der
n
thì
ữ
liệu
r
c
d
er
g
thì
x
uất db
db
ến
d
ữ
t
cơ
và
ệ
u
I
II.2.
2
Sử dụn
g
sở dữ li
ệ
miền gă
n
monit
o
c
o
i
n
B
o
pro
c
{
i
f
r
c
s
i
}
pro
c
{
r
i
}
pro
c
{
i
f
b
u
}
pro
c
{
b
u
I
f
e
l
}
Read
e
{
w
{
2
. Monitor
g
một biến
c
ệ
u. Một tiế
n
n
g, tiến trì
n
o
r Read
e
o
nditio
n
n
t
o
olean
c
edure
B
f
(busy)
wait(
O
c
++;
i
gnal(O
K
c
edure
F
r
c ;
i
f (rc
=
sign
a
c
edure
B
f
(busy
wait(O
K
u
sy = t
r
c
edure
F
u
sy = f
a
f
(OKRe
a
signal
(
l
se
signal
(
e
r()
w
hile (
T
{
Read
e
c
hung rc đ
ể
n
t
r
ình Wri
t
n
h Reader
c
e
rWriter
n
OKWrit
e
rc =
busy =
B
eginRea
d
O
KRead);
K
Read);
F
inishRe
a
=
= 0)
a
l(OKWri
t
B
eginWri
t
|| rc !
=
K
Write);
r
ue;
F
inishWr
i
a
lse;
a
d.Queue
)
(
OKRead)
;
(
OKWrite
)
T
RUE)
e
rWriter
.
ể
ghi nhớ s
ố
t
er phải ch
u
c
uối cùng s
ẽ
e
, OKRe
a
0;
false;
d
()
a
d()
/
/ b
t
e);
/
/ t
t
e()
=
0)
i
te()
)
;
)
;
.
BeginR
e
ố
lượng các
u
yển sang t
r
ẽ
đánh thức
a
d;
/
/
t
ớ
t một
R
// n
ế
/
/ th
ì
ruy xu
ất
// n
ếu
/
/ Re
a
e
ad();
tiến t
r
ình
R
r
ạng thái c
h
tiến t
r
ình
W
// n
ế
u
t
hêm m
ột
R
eader
ế
u l
à
R
e
ì
cho
ph
t
db
u
db đa
n
a
der đa
n
R
eader mu
ố
h
ờ nếu rc >
W
riter đan
g
db đang
t
Reader
e
ader cu
ố
h
ép Writ
e
n
g bận,
h
n
g đ
ọ
c d
b
ố
n truy xuấ
t
0. KHi ra
k
g
bị khóa.
bận, c
h
ố
i cùng
e
r
h
ay một
b
,chờ
t
cơ
k
hỏi
h
ờ
}
}
Writ
e
{
w
{
}
}
I
II.2.
3
Cần có
m
Các tiế
n
từ serve
r
Reade
r
{
wh
}
Write
r
{
wh
}
IV. Tắ
C
IV.1.
Read
_
Read
e
}
e
r()
w
hile (
T
{
c
R
W
Read
e
}
3
. Trao đổi
m
ột tiến t
r
ì
n
n
t
r
ình Writ
e
r
các thông
r
()
h
ile (T
R
se
n
re
c
pr
i
r
()
h
ile (T
R
cr
e
se
n
re
c
C
NGHẽN
(
Định ngh
ĩ
_
databas
e
e
rWriter
.
T
RUE)
c
reate
_
d
a
R
eaderWr
i
W
rite
_
da
t
e
rWriter
.
thông điệ
p
n
h server đ
i
e
r và Read
e
điệp hồi đ
á
R
UE) {
n
d (serv
e
c
eive (s
e
i
nt(valu
e
R
UE) {
e
ate
_
dat
a
n
d (serv
e
c
eive (s
e
(
DEADLO
ĩ
a:
e
();
.
Finish
R
a
ta(&in
f
i
ter.Be
g
t
abase()
.
Finish
W
p
i
ều khiển v
i
e
r gởi các t
h
á
p
t
ương ứ
n
e
r, Req
u
e
rver,
v
e
); }
a
(&valu
e
e
r, Req
u
e
rver,O
K
CK)
R
ead();
f
o);
g
inWrite
;
W
rite();
i
ệc truy xu
ấ
h
ông điệp
y
n
g .
u
estRea
d
v
alue);
e
);
u
estWri
t
K
Write);
();
ấ
t cơ sở dữ
y
êu cầu tru
y
d
);
t
e,value
)
}
liệu.
y
xuất đến
s
)
;
s
erver và n
h
h
ận
Một tập hợp các tiến trình được định nghĩa ở trong tình trạng tắc nghẽn khi mỗi tiến trình
trong tập hợp đều chờ đợi một sự kiện mà chỉ có một tiến trình khác trong tập hợp mới có
thể phát sinh được.
Nói cách khác, mỗi tiến trình trong tập hợp đều chờ được cấp phát một tài nguyên hiện
đang bị một tiến trình khác cũng ở trạng thái blocked chiếm giữ
. Như vậy không có tiến
trình nào có thể tiếp tục xử lý , cũng như giải phóng tài nguyên cho tiến trình khác sử
dụng, tất cả các tiến trình trong tập hợp đều bị khóa vĩnh viễn !
Vấn đề Bữa ăn tối củacác triết gia : 5 nhà triết học cùng ngồi ăn tối với món spaghetti
nổi tiếng. Mỗi nhà triết học cần dùng 2 cái nĩa đểcó thể ăn spaghetti . Nhưng trên bàn chỉ
có t
ổng cộng 5 cái nĩa để xen kẽ với 5 cái đĩa. Mỗi nhà triết học sẽ suy ngẫm các triết lý
của mình đến khi cảm thấy đói thì dự định lần lượt cầm 1 cái nĩa bên trái và 1 cái nĩa bên
phải để ăn. Nếu cả 5 nhà triết học đều cầm cái nĩa bên trái cùng lúc, thì sẽ không có ai có
được cái nĩa bên phải đểcó thể bắt đầu thưởng thức spaghetti . Đây chính là tình trạng
tắc nghẽn
.
Hình 3.18 Bữa ăn tối củacác triết gia
IV.2. Điều kiện xuất hiện tắc nghẽn
Coffman, Elphick và Shoshani đã đưa ra 4 điều kiện cần có thể làm xuất hiện tắc nghẽn:
Có sử dụng tài nguyên không thể chia sẻ (Mutual exclusion)
: Mỗi thời điểm, một tài
nguyên không thể chia sẻ được hệ thống cấp phát chỉ cho một tiến trình , khi tiến trình sử
dụng xong tài nguyên này, hệ thống mới thu hồi và cấp phát tài nguyên cho tiến trình
khác.
Sự chiếm giữ và yêu cầu thêm tài nguyên (Wait for): Các tiến trình tiếp tục chiếm giữ
các tài nguyên đã cấp phát cho nó trong khi chờ được cấp phát thêm một số tài nguyên
mới.
Không thu hồi tài nguyên từ tiến trình đang giữ chúng (No preemption)
: Tài nguyên
không thể được thu hồi từ tiến trình đang chiếm giữ chúng trước khi tiến trình này sủ
dụng chúng xong.
Tồn tại một chu kỳ trong đồ thị cấp phát tài nguyên ( Circular wait)
: có ít nhất hai tiến
trình chờ đợi lẫn nhau : tiến trình này chờ được cấp phát tài nguyên đang bị tiến trình kia
chiếm giữ và ngược lại.
Khi có đủ 4 điều kiện này, thì tắc nghẽn xảy ra. Nếu thiếu một trong 4 điều kiện trên thì
không có tắc nghẽn.
IV.3. Đồ thị cấp phát tài nguyên
Có thể sử dụng một đồ thị để mô hình hóa việc cấp phát tài nguyên. Đồ thị này có 2 loại
nút : các tiế
n trình được biễu diễn bằng hình tròn, và mỗi tài nguyên được hiển thị bằng
hình vuông
Hình 3.19 Đồ thị cấp phát tài nguyên
IV.4. Các phương pháp xử lý tắc nghẽn
Chủ yếu có ba hương tiếp cận để xử lý tắc nghẽn :
Sử dụng một nghi thức (protocol) để bảo đảm rằng hệ thống không bao giờ xảy ra tắc
nghẽn.
Cho phép xảy ra tắc nghẽn và tìm cách sữa chữa tắc nghẽn.
Hoàn toàn bỏ qua việc xử lý tắc nghẽn, xem như hệ thống không bao giờ xảy ra tắc
nghẽn.
IV.5. Ngăn chặn tắc nghẽn
Để tắc nghẽn không xảy ra, cần bảo đảm tối thiểu một trong 4 đ
iều kiện cần không xảy
ra:
Tài nguyên không thể chia sẻ :
nhìn chung gần như không thể tránh được điều kiện này
vì bản chất tài nguyên gần như cố định. Tuy nhiên đối với một số tài nguyên về kết xuất,
người ta có thể dùng cáccơ chế spooling để biến đổi thành tài nguyên có thể chia sẻ.
Sự chiếm giữ và yêu cầu thêm tài nguyên:
phải bảo đảm rằng mỗi khi tiến trình yêu cầu
thêm một tài nguyên thì nó không chiếm giữ cáctài nguyên khác. Có thể áp đặt một trong
hai cơ chế truy xuất sau :
Tiến trình phải yêu cầu tất cả cáctài nguyên cần thiết trước khi bắt đầu xử lý .
=> phương pháp này có khó khăn là tiến trình khó có thể ước lượng chính xác tài nguyên
cần sử dụng vì có thể nhu cầu phụ thuộc vào quá trình xử lý . Ngoài ra nếu tiến trình
chiếm giữ sẵn cáctài nguyên chưa c
ần sử dụng ngay thì việc sử dụng tài nguyên sẽ kém
hiệu quả.
Khi tiến trình yêu cầu một tài nguyên mới và bị từ chối, nó phải giải phóng cáctài
nguyên đang chiếm giữ , sau đó lại được cấp phát trở lại cùng lần với tài nguyên mới.
=> phương pháp này làm phát sinh các khó khăn trong việc bảo vệ tính toàn vẹn dữ liệu
của hệ thống.
Không thu hồi tài nguyên:
cho phép hệ thống được thu hồi tài nguyên từ các tiến trình bị
khoá và cấp phát trở lại cho tiến trình khi nó thoát khỏi tình trạng bị khóa. Tuy nhiên với
một số loại tài nguyên, việc thu hồi sẽ rất khó khăn vì vi phạm sự toàn vẹn dữ liệu .
Tồn tại một chu kỳ:
tránh tạo chu kỳ trong đồ thị bằng cách cấp phát tài nguyên theo
một sự phân cấp như sau :
gọi R = {R
1
, R
2
, ,Rm} là tập các loại tài nguyên.
Các loại tài nguyên được phân cấp từ 1-N.
[...]... mãn các nhu cầu tài nguyên (cho đến tối đa) của mỗi tiến trình theo một thứ tự nào đó mà vẫn ngăn chặn được tắc nghẽn Một chuỗi cấp phát an toàn: một thứ tự củacác tiến trình là an toàn đối với tình trạng cấp phát hiện hành nếu với mỗi tiến trình Pi nhu cầu tài nguyên của Pi có thể được thỏa mãn với cáctài nguyên còn tự do của hệ thống, cộng với cáctài nguyên đang bị chiếm giữ bởi các. .. vào các yếu tố như độ ưu tiên, thời gian đã xử lý, số lượng tài nguyên đang chiếm giữ , số lượng tài nguyên yêu cầu Thu hồi tài nguyên Có thể hiệu chỉnh tắc nghẽn bằng cách thu hồi một số tài nguyên từ các tiến trình và cấp phát cáctài nguyên này cho những tiến trình khác cho đến khi loại bỏ được chu trình tắc nghẽn Cần giải quyết 3 vấnđề sau: Chọn lựa một nạn nhân: tiến trình nào sẽ bị thu hồi tài. .. Chiến lược cấp phát : chỉ thỏa mãn yêu cầu tài nguyên của tiến trình khi trạng thái kết quả là an toàn! Giải thuật xác định trạng thái an toàn Cần sử dụng các cấu trúc dữ liệu sau : int Available[NumResources]; /* Available[r]= số lượng các thể hiện còn tự do của tài nguyên r*/ int Max[NumProcs, NumResources]; /*Max[p,r]= nhu cầu tối đa của tiến trình p về tài nguyên r*/ int Allocation[NumProcs, NumResources];... tài nguyên ? và thu hồi những tài nguyên nào ? Trở lại trạng thái trước tắc nghẽn: khi thu hồi tài nguyên của một tiến trình, cần phải phục hồi trạng thái của tiến trình trở lại trạng thái gần nhất trước đó mà không xảy ra tắc nghẽn Tình trạng « đói tài nguyên »: làm sao bảo đảm rằng không có một tiến trình luôn luôn bị thu hồi tài nguyên ? V.TÓM TắT Các giải pháp đồngbộhoá do lập trình viên xây dựng... - k; Nếu trạng thái kết quả là an toàn, lúc này cáctài nguyên trên sẽ được cấp phát thật sự cho Pi Ngược lại, Pi phải chờ IV.7 Phát hiện tắc nghẽn Cần sử dụng các cấu trúc dữ liệu sau : int Available[NumResources]; // Available[r]= số lượng các thể hiện còn tự do của tài nguyên r int Allocation[NumProcs, NumResources]; // Allocation[p,r] = số lượng tài nguyên r thực sự cấp phát cho p int Request[NumProcs,... số giá trị i, các tiến trình mà Finish[i] == false sẽ ở tình trạng tắc nghẽn II.8 Hiệu chỉnh tắc nghẽn Khi đã phát hiện được tắc nghẽn, có hai lựa chọn chính để hiệu chỉnh tắc nghẽn : Đình chỉ hoạt độngcủacác tiến trình liên quan Cách tiếp cận này dựa trên việc thu hồi lại cáctài nguyên của những tiến trình bị kết thúc Có thể sử dụng một trong hai phương pháp sau : Đình chỉ tất cả các tiến trình... : process P1 { A1 ; A2 } process P2 { B1 ; B2 } Đồngbộhoá hoạt độngcủa hai tiến trình này sao cho cả A1 và B1 đều hoàn tất trước khi A2 hay B2 bắt đầu Bài 10.Tổng quát hoá câu hỏi 8) cho các tiến trình xử lý đoạn chương trình sau : process P1 { for ( i = 1; i . như giải phóng tài nguyên cho tiến trình khác sử
dụng, tất cả các tiến trình trong tập hợp đều bị khóa vĩnh viễn !
Vấn đề Bữa ăn tối của các triết gia. chúng được
gọi là các tiến trình Writer. Các quy định đồng bộ hóa việc truy xuất cơ sỡ dữ liệu cần
tuân thủ là :
Không
trình Re
Tại m
ộ
liệu. (m
u
Giải