Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 33

M phng thut ton nh bng ca Dijsktra trnh Deadlock

NHN XT CA GING VIN HNG DN

NG TH T LINH

M phng thut ton nh bng ca Dijsktra trnh Deadlock

Mc Lc
TNG QUAN V TI................................................................................................... 2
1.

Bi cnh v l do chn ti................................................................................ 3

2.

Mc tiu ca ti............................................................................................... 3

3.

Yu cu ca ti................................................................................................. 3

Chng 1. C S L THUYT....................................................................................... 4
1.

2.

Gii thiu v Deadlock............................................................................................... 4


1.1

Tin trnh.......................................................................................................... 4

1.2

Deadlock........................................................................................................... 5

1.3

Cc phng php x l Deadlock..........................................................................7

Thut ton nh bng ca Dijsktra................................................................................8


2.1

Gii thiu.......................................................................................................... 8

2.2

Cu trc d liu................................................................................................. 8

2.3

Thut ton kim tra an ton.................................................................................9

2.4

Thut ton yu cu ti nguyn..............................................................................9

Chng 2. THIT K V XY DNG CHNG TRNH..................................................11


1.

Phn tch yu cu.................................................................................................... 11

2.

Xy dng chng trnh............................................................................................ 12

3.

2.1

Cu trc hot ng ca chng trnh...................................................................12

2.2

Cc bin, hm s dng trong chng trnh............................................................13

Kt qu th nghim................................................................................................. 14
3.1

D liu t file input.txt...................................................................................... 14

3.2

Demo.............................................................................................................. 15

Chng 3. NH GI KT QU................................................................................... 19
1.

nh gi............................................................................................................... 19

2.

Nhng hn ch....................................................................................................... 19

NG TH T LINH

M phng thut ton nh bng ca Dijsktra trnh Deadlock

TNG QUAN V TI
1. Bi cnh v l do chn ti
H iu hnh l chng trnh qun l phn cng v cc ti nguyn phn mm
trn my tnh. H iu hnh ng vai tr trung gian trong vic giao tip gia ngi s
dng v phn cng my tnh, cung cp mt mi trng cho php ngi s dng pht
trin v thc hin cc ng dng ca h mt cch d dng.
Trong mi trng x l a chng, nhiu qu trnh c x l ng thi ti
u ha vic s dng CPU. Mt qu trnh yu cu ti nguyn, nu ti nguyn khng
sn c th qu trnh i vo trng thi ch. Nu ti nguyn ny b gi bi nhng trng
thi ch khc th qu trnh s b kha cht (gi l deadlock).
i vi mt h thng ln, bao gm nhiu qu trnh, chng trnh a lung,
nhiu ti nguyn th gii quyt deadlock thc s l mt vn rt quan trng v
khng th b qua. Mun gii quyt c Deadlock cn nm vng kin thc v l
thuyt ca H iu Hnh v cc gii thut lin quan; do , khi x l thnh cng
Deadlock, chng ta s hiu cn k mn hc Nguyn l H iu Hnh.
2. Mc tiu ca ti
Hiu m hnh h thng v deadlock
Hiu cc c im ca deadlock
Hiu cc phng php qun l deadlock
Hiu cch ngn chn deadlock
Hiu cch trnh deadlock
Hiu cch pht hin deadlock
Hiu cch phc hi t deadlock
3. Yu cu ca ti
Gii thiu Deadlock
Trnh by thut ton Banker
Xy dng chng trnh v kt qu demo
Vit bo co theo mu B mn mng v Truyn thng
Gp gio vin hng dn, lm ng yu cu ca gio vin hng dn v
bo co tin ng thi gian
Ngn ng dng vit chng trnh C,C++, Visual C++

NG TH T LINH

M phng thut ton nh bng ca Dijsktra trnh Deadlock

Chng 1.

C S L THUYT

1. Gii thiu v Deadlock


1.1 Tin trnh
1.1.1 nh ngha
- Tin trnh (process) l trng thi tc thi ca m t chng trnh ang chy trn
my tnh. N bao gm b nh cn thit chy chng trnh (khng gian a chi
ca tin trnh) v kh nng kim sot hin trng ca b x l trong tin trnh thc
thi chng trnh.
- c xem l n v lm vic trong cc h iu hnh.
- L m t thc th ch ng, khc vi chng trnh l m t th b ng.

1.1.2 Phn loi


C hai loi tin trnh:
- Tin trnh ca h iu hnh.
- Tin trnh ca ngi s dng.

1.1.3 Cc thnh phn ca tin trnh


- on m lnh.
- on d liu.
- on ngn xp v heap.
- Cc hot ng hin ti c th hin qua con tr m lnh (IP) v n i dung
cc thanh ghi (registers) ca b x l.

1.1.4 Vng i ca tin trnh

NG TH T LINH

M phng thut ton nh bng ca Dijsktra trnh Deadlock

1.1.5 Vn lp lch tin trnh


- S lng yu cu s dng phi nhiu hn s lng ti nguyn ang c (CPU)
- Do , cn lp lch phn phi thi gian s dng CPU cho cc tin trnh ca
ngi s dng v h thng.

1.2 Deadlock
1.2.1 Gii thiu
- Trong qu trnh lp lch tin trnh, qu trnh ch ca cc tin trnh c th khng
bao gi chuyn trng thi tr li v ti nguyn chng yu cu b gi bi nhng
tin trnh ang ch khc. Trng hp ny c gi l deadlock (kha cht).

1.2.2 M hnh h thng


- M t h thng cha s ti nguyn hu hn c phn b gia nhiu qu trnh
cnh tranh. Cc ti nguyn ny c phn chia thnh nhiu loi, mi loi cha
m t s th hin xc nh. Khng gian b nh, cc chu k CPU v cc thit b
nhp/xut (nh my in, a t) l nhng th d v loi ti nguyn. Nu h thng
c hai CPUs, th loi ti nguyn CPU c hai th hin. Tng t, loi ti nguyn
my in c th c nm th hin.
- Nu m t qu trnh yu cu m t th hin ca loi ti nguyn th vic cp pht
bt c th hin no ca loi ti nguyn ny s tho mn yu cu. Nu n khng
c th cc th hin l khng xc nh v cc lp loi ti nguyn s khng c
nh ngha hp l. Th d, m t h thng c th c hai my in. Hai loi my in
ny c th c nh ngha trong cng lp loi ti nguyn nu khng c qu trnh
no quan tm my no in ra d liu. Tuy nhin, nu m t my in tng 9 v my
in khc tng trt th ngi dng tng 9 khng th xem hai my in l tng t
nhau v lp ti nguyn ring r cn c nh ngha cho mi my in.
- M t qu trnh phi yu cu m t ti nguyn trc khi s dng n, v phi gii
phng sau khi s dng n. M t qu trnh c th yu cu nhiu ti nguyn nh n
c yu cu thc hin tc v c gn ca n. Ch , s ti nguyn c yu
cu khng vt qu s lng tng c ng ti nguyn sn c trong h thng. Ni
cch khc, m t qu trnh khng th yu cu ba my in nu h thng chi c hai.
- Di ch iu hnh thng thng, m t qu trnh c th s dng m t ti
nguyn chi trong th t sau:

NG TH T LINH

M phng thut ton nh bng ca Dijsktra trnh Deadlock

- Yu cu: nu yu cu khng th c gn tc th (th d, ti nguyn ang c


dng bi qu trnh khc) th qu trnh ang yu cu phi ch cho ti khi n c th
nhn c ti nguyn.
- S dng: qu trnh c th iu hnh ti nguyn (th d, nu ti nguyn l my
in, qu trnh c th in my in)
- Gii phng: qu trnh gii phng ti nguyn.
- Yu cu v gii phng ti nguyn l cc li gi h thng. Th d nh yu cu
v gii phng thit b, m v ng tp tin, cp pht v gii phng b nh. Yu
cu v gii phng cc ti nguyn khc c th t c thng qua thao tc ch
wait v bo hiu signal. Do , cho mi trng hp s dng, h iu hnh kim
tra m bo rng qu trnh s dng yu cu v c cp pht ti nguyn. M t
bng h thng ghi nhn mi qu trnh gii phng hay c cp pht ti nguyn.
Nu m t qu trnh yu cu ti nguyn m ti nguyn hin c cp pht cho
m t qu trnh khc, n c th c thm vo hng i ch ti nguyn ny.
- M t tp hp qu trnh trong trng thi deadlock khi mi qu trnh trong tp
hp ny ch s kin m c th c to ra chi bi qu trnh khc trong tp hp.
Nhng s kin m chng ta quan tm ch yu y l nhn v gii phng ti
nguyn. Cc ti nguyn c th l ti nguyn vt l (th d, my in, a t, khng
gian b nh v chu k CPU) hay ti nguyn lun l (th d, tp tin, semaphores,
monitors). Tuy nhin, cc loi khc ca s kin c th dn n deadlock.
- minh ho trng thi deadlock, chng ta xt h thng vi ba a t. Gi s
mi qu trnh gi cc m t a t ny. By gi, nu mi qu trnh yu cu m t
a t khc th ba qu trnh s trong trng thi deadlock. Mi qu trnh ang
ch m t s kin a t c gii phng m c th c gy ra chi bi m t
trong nhng qu trnh ang ch. Th d ny minh ho deadlock lin quan n
cng loi ti nguyn.
- Deadlock cng lin quan nhiu loi ti nguyn khc nhau. Th d, xt m t h
thng vi m t my in v m t a t. Gi s, qu trnh Pi ang gi a t v
qu trnh Pj ang gi my in. Nu Pi yu cu my in v Pj yu cu a t th
deadlock xy ra.

NG TH T LINH

M phng thut ton nh bng ca Dijsktra trnh Deadlock

- M t ngi lp trnh ang pht trin nhng ng dng a lung phi quan tm
c bit ti vn ny: Cc chng trnh a lung l ng c vin cho vn
deadlock v nhiu lung c th cnh tranh trn ti nguyn c chia s.

1.2.3 c im ca Deadlock
Trong m t deadlock, cc qu trnh khng bao gi hon thnh vic thc thi v
cc ti nguyn h thng b bu c cht, ngn chn cc qu trnh khc bt u.
Trc khi chng ta tho lun cc phng php khc nhau gii quyt vn
deadlock, chng ta s m t cc c im m deadlock m t.
- Nhng iu kin cn thit gy ra deadlock:
o
Trng hp deadlock c th pht sinh nu bn iu kin sau xy ra cng
m t lc trong h thng:
(1) Loi tr h tng: t nht m t ti nguyn phi c gi trong ch
khng chia s; ngha l, chi m t qu trnh ti cng m t thi im c th s dng
ti nguyn. Nu m t qu trnh khc yu cu ti nguyn , qu trnh yu cu phi
tm dng cho n khi ti nguyn c gii phng.
(2) Gi v ch cp thm ti nguyn: qu trnh phi ang gi t nht m t ti
nguyn v ang ch nhn ti nguyn thm m hin ang c gi bi qu
trnh khc.
(3) Khng i li ti nguyn t qu trnh ang gi chng: Cc ti nguyn
khng th b i li; ngha l, ti nguyn c th c gii phng chi t bi qu
trnh ang gi n, sau khi qu trnh hon thnh tc v.
(4) Tn ti chu trnh trong th cp pht ti nguyn: m t tp hp cc qu
trnh {P0, P1,,Pn} ang ch m trong P0 ang ch m t ti nguyn c gi
bi P1, P1 ang ch ti nguyn ang gi bi P2,,Pn-1 ang ch ti nguyn
ang c gi bi qu trnh P0.
- Chng ta nhn mnh rng tt c bn iu kin phi cng pht sinh
deadlock xy ra. iu kin ch i chng trnh a n iu kin gi-v-ch v
th bn iu kin khng hon ton c lp.

1.3

Cc phng php x l Deadlock

C 3 cch gii quyt deadlock c bn, l:


- Chng ta c th s dng m t giao thc ngn chn hay trnh deadlocks, m
bo rng h thng s khng bao gi i vo trng thi deadlock

NG TH T LINH

M phng thut ton nh bng ca Dijsktra trnh Deadlock

- Chng ta c th cho php h thng i vo trng thi deadlock, pht hin n v


phc hi.
- Chng ta c th b qua hon ton vn ny v gi v deadlock khng bao gi
xy ra trong h thng. Gii php ny c dng trong nhiu h iu hnh, k c
UNIX.
- ti ny s chi ni v cc thut ton trnh deadlock v chi tit v thut ton
nh bng ca Dijsktra.

2. Thut ton nh bng ca Dijsktra


2.1 Gii thiu
- L m t thut ton cp pht ti nguyn v trnh deadlock c pht trin bi
Dijsktra.
- p dng cho h thng c nhiu loi ti nguyn
- Thut ton kim tra trng thi an ton bng cch m phng phng vic cp
pht lng ti a c th ca tt c cc loi ti nguyn c xc nh trc, sau
kim tra trng thi an ton xem iu kin xy ra deadlock ca tt c cc tin trnh
ang yu cu ti nguyn c th xy ra khng. Sau da vo trng thi an ton
hay khng quyt nh vic cp pht ti nguyn.

2.2

Cu trc d liu

- Nhiu cu trc d liu phi c duy tr ci t gii thut Banker.Nhng


cu trc d liu ny m ho trng thi ca h thng cp pht ti nguyn.Gi n l
s qu trnh trong h thng v m l s loi ti nguyn trong h thng. Chng ta
cn cc cu trc d liu sau:
Available: mt vector c chiu di r hin th s lng ti nguyn sn
dng ca mi loi. Nu Available[j]= k, c k th hin ca loi ti nguyn
Rj sn dng.
Max: mt ma trn p x r nh ngha s lng ti a yu cu ca mi qu
trnh. Nu Max[ i , j ] = k, th qu trnh P i c th yu cu nhiu nht k th
hin ca loi ti nguyn Rj.
Allocation: mt ma trn p x r nh ngha s lng ti nguyn ca mi
loi hin c cp ti mi qu trnh. Nu Allocation[ i, j ] = k, th qu
trnh Pi hin c cp k th hin ca loi ti nguyn Rj.

NG TH T LINH

M phng thut ton nh bng ca Dijsktra trnh Deadlock

Need: mt ma trn p x r hin th yu cu ti nguyn cn li ca mi qu


trnh. Nu Need[ i, j ] = k, th qu trnh P i c th cn thm k th hin ca
loi ti nguyn Rj hon thnh tc v ca n. Ch rng, Need[ i, j ] =
Max[ i, j ] Allocation [ i, j ].
- Cu trc d liu ny bin i theo thi gian v kch thc v gi tr. n
gin vic trnh by ca gii thut Banker, chng ta thit lp vi k hiu. Gi X v
Y l cc vector c chiu di n. Chng ta ni rng X Y nu v chi nu X[i]
Y[i] cho tt c i = 1, 2, , n. Th d, nu X = (1, 7, 3, 2) v Y = (0, 3, 2, 1) th Y
X, Y < X nu Y X v Y X.
- Chng ta c th xem xt mi dng trong ma trn Allocation v Need nh l
nhng vectors v tham chiu ti chng nh Allocation i v Needi tng ng.
Vector Allocationi xc nh ti nguyn hin c cp pht ti qu trnh P i; vector
Needi xc nh cc ti nguyn b sung m qu trnh P i c th vn yu cu
hon thnh tc v ca n.

2.3

Thut ton kim tra an ton

- Gii thut xc nh h thng trng thi an ton hay khng c th c m


t nh sau:
Bc 1: Gi Work v Finish l cc vector c chiu di m v n tng ng. Khi
to Work:=Available v Finish[i]:=false cho i = 1, 2, ,n.
Bc 2: Tm i tha:
a) Finish[i] = false
b) Need i Work. Nu khng c i no tha, di chuyn ti bc 4
Bc 3: Work:=Work + Allocation i Finish[i] := true Di chuyn v bc 2.
Bc 4: Nu Finish[i] = true cho tt c i, th h thng ang trng thi an ton.
Gii thut ny c th yu cu phc tp mxn2 thao tc quyt nh trng thi
l an ton hay khng.

2.4

Thut ton yu cu ti nguyn

- Cho Requesti l vector yu cu cho qu trnh Pi. Nu Requesti[j] = k, th qu


trnh Pi mun k th hin ca loi ti nguyn Rj. Khi m t yu cu ti nguyn c
thc hin bi qu trnh Pi, th cc hot n g sau c thc hin:
Bc 1: Nu Requesti Needi, di chuyn ti bc 2. Ngc li, pht sinh m t
iu kin li v qu trnh vt qu yu cu ti a ca n.
Bc 2: Nu Requesti Available, di chuyn ti bc 3. Ngc li, Pi phi ch
v ti nguyn khng sn c.
NG TH T LINH

M phng thut ton nh bng ca Dijsktra trnh Deadlock

Bc 3: Gi s h thng cp pht cc ti nguyn c yu cu ti qu trnh Pi


bng cch thay i trng thi sau:
Available := Available Requesti;
Allocationi := Allocationi + Requesti;
Needi := Needi Requesti;
Nu kt qu trng thi cp pht ti nguyn l an ton, th giao dch c hon
thnh v qu trnh Pi c cp pht ti nguyn ca n. Tuy nhin, nu trng thi
mi l khng an ton, th Pi phi ch Requesti v trng thi cp pht ti nguyn c
c phc hi.

NG TH T LINH

10

M phng thut ton nh bng ca Dijsktra trnh Deadlock

Chng 2.

THIT K V XY DNG CHNG TRNH

1. Phn tch yu cu
Bi ton t ra.
Input: c t file input.txt ma trn Max[p,r], Allocation[p,r] v mng Total[r].
-

Ban u: Ma trn Allocation[p,r] = 0.


Tin hnh yu cu ti nguyn cho n khi cc tin trnh hon tt

Output: Kim tra trng thi an ton ca tin trnh khi yu cu ti nguyn, nu an
ton th cp pht ti nguyn v tip tc yu cu cho n khi cc tin trnh hon tt.
p: S tin trnh
r: S ti nguyn

NG TH T LINH

11

M phng thut ton nh bng ca Dijsktra trnh Deadlock

2. Xy dng chng trnh


2.1 Cu trc hot ng ca chng trnh

NG TH T LINH

12

M phng thut ton nh bng ca Dijsktra trnh Deadlock

2.2

Cc bin, hm s dng trong chng trnh

STT
Tn hm, bin
1
Alloc[][]
2
Max[][]
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

Chc nng
Mng Allocation cha ti nguyn cp pht
Mng Max cha ti nguyn ti a m cc tin trnh
yu cu
Need[][]
Mng Need cha ti nguyn m cc tin trnh cn
hon thnh
Avail[]
Mng Available cha ti nguyn sn c
Total[]
Mng Total cha tng s ti nguyn c sn
Temp1[], temp2[], temp3[] 3 mng lu tm thi 3 mng Available,
Allocation, Need
Request[]
Mng cha ti nguyn yu cu
Tam[][]
Mng lu ti nguyn ch cp pht khi c ti
nguyn
Complete[]
Mng lu cc tin trnh hon thnh (complete =
1)
R
S ti nguyn
Q
S tin trnh
Input()
Hm ly d liu t file .txt
Available()
Hm tm mng avail[][]
Need()
Hm tm mng need[][]
IsSefe()
Hm kim tra an ton, tr v 1 nu an ton,0 nu ko
an ton
EnterRequest()
Hm nhp cc yu cu ti nguyn
Request_F(int *b,int n)
Hm yu cu ti nguyn
Backup()
Hm sao lu d liu
Restore()
Hm khi phc d liu
Menu()
Hm hin th danh sch vic cn lm
Add(int*a,int*b,int n)
Hm cng hai mng
Out_1(int *a,int n)
Hm xut mng 1 chiu
Out_2(int*a,int n)
Hm xut mng 2 chiu
CapPhat(int*request,int a) Hm cp pht ti nguyn
Waiting()
Hm kim tra v cp pht ti nguyn cho cc tin
trnh ang ch
Recovery_R(int a)
Hm thu hi ti nguyn khi tin trnh hon tt
Check()
Hm kim tra cc tin trnh hon tt

NG TH T LINH

13

M phng thut ton nh bng ca Dijsktra trnh Deadlock

3. Kt qu th nghim.
3.1 D liu t file input.txt

NG TH T LINH

14

M phng thut ton nh bng ca Dijsktra trnh Deadlock

3.2

Demo.

NG TH T LINH

15

M phng thut ton nh bng ca Dijsktra trnh Deadlock

NG TH T LINH

16

M phng thut ton nh bng ca Dijsktra trnh Deadlock

NG TH T LINH

17

M phng thut ton nh bng ca Dijsktra trnh Deadlock

NG TH T LINH

18

M phng thut ton nh bng ca Dijsktra trnh Deadlock

NG TH T LINH

19

M phng thut ton nh bng ca Dijsktra trnh Deadlock

Chng 3.

NH GI KT QU

1. nh gi
Hn ch ca thut ton

Thut ton banker xut pht t gi thit s ti nguyn l c nh. Nhng bi v


cc ti nguyn khng th lm vic mi (v d dng li bo dng) do
chng ta khng th cho rng s lng ti nguyn l c nh.
Thut ton i hi rng s ngi dng l khng i. Yu cu cng khng
thc t, v trong cc h a chng trnh, s lng ngi dng lun thay i
Thut ton i hi b phn phn phi ti nguyn phi m bo tho mn tt
c cc yu cu sau khong thi gian hu hn no . Tuy nhin trong thc t
ngi ta cn nhng con s c th hn nhiu.
Cng nh th, thut ton i hi ngi dng phi tr li cc ti nguyn c
cp, sau mt khong thi gian no - v trong thc t cng cn cc ch s c
th.
Thut ton yu cu ngi dng phi bo trc s lng ln nht ti nguyn
anh ta cn. Nhng s phn phi ti nguyn ngy cng phi linh ng, v do
cng kh nh gi yu cu ln nht. V my tnh ngy cng thn thin vi
ngi dng nn s ngy cng nhiu ngi dng khng c hnh dung chnh xc
v s ti nguyn ln nht m anh ta s cn, thay vo khi no cn ti nguyn
ngi dng mi yu cu.
.

Thc hin ti m phng thnh cng thut ton Banker trnh Deadlock, hiu
r hn cch m h iu hnh qun l phn cng v cc ti nguyn phn mm trn
my tnh, qua gip chng ta hiu cn k hn v mn hc Nguyn L H
iu Hnh.

2. Nhng hn ch
Chng trnh m phng vn cn cha trc quan v sinh ng do vn cn trn ch
console, cn phi to thm giao din chng trnh trc quan v sinh ng
hn

NG TH T LINH

20

M phng thut ton nh bng ca Dijsktra trnh Deadlock

PH LC
M lnh chng trnh
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
// khai bao bien toan cuc
int alloc[10][10];
int max[10][10];
int need[10][10];
int avail[10];
int total[10];
int temp1[10],temp2[10][10],temp3[10][10],task[10];
int request[10],tam[10][10],complete[10];
int r,p; // r: so tai nguyen, p: so tien trinh
// nguyen mau ham
void Input();// lay du lieu tu txt
void Available();// tim mang avail[][]
void Need(); // tim mang need[][]
int IsSefe(); // ham kiem tra an toan
void EnterRequest();// ham nhap cac yeu cau tai nguyen
void Request_F(int *b, int n); // ham yeu cau tai nguyen
void Backup();// ham sao luu du lieu
void Resore();// ham khoi phuc du lieu
void Menu();// hien thi danh sach viec can lam
void Add(int *a,int*b,int n); // cong hai mang
void Out_1(int *a,int n);// xuat mang mot chieu
void Out_2(int *a,int n, int m);// xuat mang 2 chieu
void CapPhat(int *request, int a);// cap phat tai nguyen
cho tien trinh a
void waiting();// kiem tra va cap phat tai nguyen cho cac
tien trinh dang cho
void Recovery_R(int a);// thu hoi tai nguyen
void Check();//kiem tra cac tien trinh hoan tat de cap
phat tai nguyen cho cac tien trinh dang cho
//--------------------------------------------------void Input()
{
int i,j;
FILE* fp=fopen("input.txt","rt");
NG TH T LINH

21

M phng thut ton nh bng ca Dijsktra trnh Deadlock

if(fp==NULL)
{
printf("/nLoi mo file!!!\nNhan phim bat ki de mo
lai file\n");
getch();
Input();
}
else
{
fscanf(fp,"%d",&r);// lay so luong tai nguyen
for(i=0;i<r;i++) fscanf(fp,"%d",&total[i]);
fscanf(fp,"%d",&p);// lay so luong tien trinh
// lay bang Allocation
for(i=0;i<p;i++)
{
for(j=0;j<r;j++)
fscanf(fp,"%d",&alloc[i][j]);
}
// lay bang Max
for(i=0;i<p;i++)
{
for(j=0;j<r;j++)
{
fscanf(fp,"%d",&max[i][j]);
}
}
fclose(fp);
}
}
//--------------------------------------------------void Available()
{
int i,j,k=0;
for(i=0;i<r;i++)
{
for(j=0;j<p;j++)
{
avail[k]+=alloc[j][i];
}
avail[k] = total[i]- avail[k];
NG TH T LINH

22

M phng thut ton nh bng ca Dijsktra trnh Deadlock

k++;
}
}
//--------------------------------------------------void Need()
{
int i,j;
for(i=0;i<p;i++)
{
for(j=0;j<r;j++)
{
need[i][j] = max[i][j] - alloc[i][j];
}
}
}
//--------------------------------------------------void Output_1(int *a,int n)
{
int i;
for(i=0;i<n;i++)
printf("r[%d]=%3d\t",i,a[i]);
}
//--------------------------------------------------void Output_2(int a[10][10],int n,int m)
{
int i,j;
for(i=0;i<n;i++)
{
printf("P[%d] ",i);
for(j=0;j<m;j++)
{
printf("%3d",a[i][j]);
}
printf("\n");
}
}
//--------------------------------------------------void Backup()
{
for (int i=0;i<r;i++) temp1[i]=avail[i];
NG TH T LINH

23

M phng thut ton nh bng ca Dijsktra trnh Deadlock

for (int i=0;i<p;i++)


for(int j=0;j<r;j++)
{
temp2[i][j]=alloc[i][j];
temp3[i][j]=need[i][j];
}
}
//--------------------------------------------------void Restore()
{
for (int i=0;i<r;i++) avail[i]=temp1[i];
for (int i=0;i<p;i++)
for(int j=0;j<r;j++)
{
alloc[i][j]=temp2[i][j];
need[i][j]=temp3[i][j];
}
}
//--------------------------------------------------void Add(int*a,int*b,int n)
{
for (int i=0;i<n;i++)
a[i]+=b[i];
}
//--------------------------------------------------void CapPhat(int *request,int a)
{
int i;
for(i=0;i<r;i++)
{
alloc[a][i] += request[i];
avail[i] -= request[i];
need[a][i] -= request[i];
}
}
//--------------------------------------------------void Recovery_R(int a)
{
int i;
for(i=0;i<r;i++)
NG TH T LINH

24

M phng thut ton nh bng ca Dijsktra trnh Deadlock

{
avail[i]+=alloc[a][i];
alloc[a][i]=0;
}
printf("\n
So
luong
tai
nguyen
san
dung.
(Available) \n");
Output_1(avail,r);
}
//--------------------------------------------------void Menu()
{
printf("\n==============================");
printf("\n1: tiep tuc yeu cau tai nguyen");
printf("\n2: exit");
printf("\nMoi Chon: ");
printf("\n=> ");
}
//--------------------------------------------------void waiting()
{
int i,j,s,a[10],s1,s2;
for(i=0;i<p;i++)
{
s=0;
for(j=0;j<r;j++)
{
s+=tam[i][j];
}
if(s)
{
for(j=0;j<r;j++)
{
a[j]=tam[i][j];
}
if(complete[i]==0)
{
printf("\n------------------------------------------------------");
printf("\n => cap phat tai nguyen cho tien
NG TH T LINH

25

M phng thut ton nh bng ca Dijsktra trnh Deadlock

trinh P[%d] dang cho",i);


printf("\n Tai nguyen ma P[%d] yeu
cau.\n",i);
Output_1(a,r);// in tai nguyen dang cho
luu o mang a
//--------------------------s1=0;
for(j=0;j<r;j++)
{
if(a[j] > need[i][j])
s1=1;
}
if(s1)
{
printf("\n !!! Tai nguyen yeu cau vuot qua
tai nguyen can thiet");
break;
}
else
{
s2=0;
for(j=0;j<r;j++)
{
if(a[j] > avail[j])
s2=1;
}
f(s2)
{
printf("\n !!! Tai nguyen yeu cau khong san
co, tam thoi cho...");
break;
}
}
Backup();
CapPhat(a,i);
if(IsSefe())
{
printf("\n=> Tai nguyen an toan,
cho phep cap phat");
for(j=0;j<r;j++)
NG TH T LINH

26

M phng thut ton nh bng ca Dijsktra trnh Deadlock

{
tam[i][j]=0;
}
//-------------------------printf("\n So luong tai nguyen san dung.
(Available) \n");
Output_1(avail,r);
printf("\n Tai nguyen cac tien trinh can
de hoan thanh\n");
Output_2(need,p,r);
}
else
{
printf("\n !!! Tai nguyen yeu cau
khong an toan.");
Restore();
}
}
else
{

printf("\n-----------------------------------------------");
printf("\n Tien trinh P[%d] da hoan tat,
ko cap phat nua.",i);
printf("\n-----------------------------------------------");
}
}
}
}
//--------------------------------------------------void Check()
{
int i,j,s,dem;
for(i=0;i<p;i++)
{
NG TH T LINH

27

M phng thut ton nh bng ca Dijsktra trnh Deadlock

s=0;
for(j=0;j<r;j++)
{
if(need[i][j]==0)
{
s++;
}
if(s==r)
{
if(complete[i]==0)
{
printf("\n================================================
");
printf("\nTIEN TRINH P[%d] DA HOAN TAT, TAI
NGUYEN DUOC THU HOI",i);
printf("\n===============================================\
n");
complete[i]=1;
dem=0;
for(int k=0;k<r;k++)
{
if(complete[k]==1)
{
dem++;
}
if(dem==r)
{
printf("\n================================================
");
printf("\n TAT CA CAC TIEN TRINH DA HOAN TAT, KET
THU QUA TRINH YEU CAU TAI NGUYEN");
printf("\n===============================================\
n");
NG TH T LINH

28

M phng thut ton nh bng ca Dijsktra trnh Deadlock

getch();
exit(0);
}
}
Recovery_R(i);// thu hoi tai nguyen cua
tien trinh da hoan thanh
waiting();// kiem tra co tien trinh nao
dang cho ko, neu co thi cap phat lai
}
}
}
}
}
//--------------------------------------------------void EnterRequest()
{
int a,i,s1,s2;
do{
printf("\n==========================");
printf("\n Tien trinh P[?] yeu cau: ");
scanf("%d",&a);
}while((a<0)||(a>=p));
for(i=0;i<p;i++)
{
if(complete[a]==1)
{
printf("\n ERROR, TIEN TRINH P[%d] DA HOAN
TAT",a);
EnterRequest();
}
}
printf("\n Tai nguyen ma P[%d] yeu cau.",a);
for(i=0;i<r;i++)
{
printf("\nr[%d] = ",i);
scanf("%d",&request[i]);
}
// kiem tra request
s1=0;
for(i=0;i<r;i++)
NG TH T LINH

29

M phng thut ton nh bng ca Dijsktra trnh Deadlock

{
if(request[i] > need[a][i])
s1=1;
}
if(s1)
{
printf("\n !!! Tai nguyen yeu cau vuot qua tai
nguyen can thiet");
EnterRequest();
}
else
{
s2=0;
for(i=0;i<r;i++)
{
if(request[i] > avail[i])
s2=1;
}
if(s2)
{
printf("\n Tai nguyen yeu cau khong san co,
tam thoi cho...");
for(i=0;i<r;i++)
{
tam[a][i] = request[i];
// luu tai nguyen ma
tien trinh a yeu cau chua duoc.
}
EnterRequest();
}
else
{
Request_F(request,a);
}
}
}
//--------------------------------------------------void Request_F(int *b, int n)
{
int i,j,m;
Backup();
NG TH T LINH

30

M phng thut ton nh bng ca Dijsktra trnh Deadlock

CapPhat(b,n);
if(IsSefe())
{
printf("\n => Tai nguyen an toan, cho phep cap
phat");
//-------------------------printf("\n So luong tai nguyen san dung.
(Available) \n");
Output_1(avail,r);
printf("\n Tai nguyen cac tien trinh can de hoan
thanh\n");
Output_2(need,p,r);
//------------------------// kiem tra cac tien trinh hoan tat
Check();
}
else
{
printf("\n !!! Tai nguyen yeu cau khong an
toan.");
Restore();
}
do{
Menu();
scanf("%d",&m);
}while((m<=0)||(m>=3));
switch(m)
{
case 1: EnterRequest();break;
case 2: exit(0);
}
}
//--------------------------------------------------int IsSefe()
{
int i,j,work[10],finish[10],k,f=0,safe=1,s;
for(i=0;i<r;i++) work[i] = avail[i];
for(i=0;i<p;i++) finish[i] = 0;
do{
k=0;
NG TH T LINH

31

M phng thut ton nh bng ca Dijsktra trnh Deadlock

for(i=0;i<p;i++)
{
if(finish[i]==0)
{
s=0;
for(j=0;j<r;j++)
{
if(need[i][j]<= work[j]) s++;
}
if(s==r)
{
k=1;
break;
}
}
}
if(k)
{
Add(work,alloc[i],r);
finish[i]=1;
task[f]=i;
f++;
}
}while(k);
for(i=0;i<p;i++)
if(finish[i]==0) safe = 0;
if(safe)
{
return safe;
}
return safe;
}
//--------------------------------------------------main()
{
Input();
Available();
Need();
for(int i=0;i<p;i++)
{
NG TH T LINH

32

M phng thut ton nh bng ca Dijsktra trnh Deadlock

complete[i]=0;
}
printf("\n TAI NGUYEN BAN DAU.");
printf("\n
So
luong
tai
nguyen
san
dung.
(Available) \n");
Output_1(avail,r);
printf("\n Tai nguyen da cap phat cho cac tien trinh.
(Allocation) \n");
Output_2(alloc,p,r);
printf("\n Tai nguyen toi da ma cac tien trinh can.
(Max) \n");
Output_2(max,p,r);
printf("\n Tai nguyen cac tien trinh can.(Need)\n");
Output_2(need,p,r);
printf("\n BAT DAU QUA TRINH YEU CAU TAI NGUYEN");
EnterRequest();
getch();
}

NG TH T LINH

33

You might also like