Professional Documents
Culture Documents
Baocao
Baocao
NG TH T LINH
Mc Lc
TNG QUAN V TI................................................................................................... 2
1.
2.
Mc tiu ca ti............................................................................................... 3
3.
Yu cu ca ti................................................................................................. 3
Chng 1. C S L THUYT....................................................................................... 4
1.
2.
Tin trnh.......................................................................................................... 4
1.2
Deadlock........................................................................................................... 5
1.3
Gii thiu.......................................................................................................... 8
2.2
Cu trc d liu................................................................................................. 8
2.3
2.4
2.
3.
2.1
2.2
Kt qu th nghim................................................................................................. 14
3.1
3.2
Demo.............................................................................................................. 15
Chng 3. NH GI KT QU................................................................................... 19
1.
nh gi............................................................................................................... 19
2.
Nhng hn ch....................................................................................................... 19
NG TH T LINH
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
Chng 1.
C S L THUYT
NG TH T LINH
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).
NG TH T LINH
NG TH T LINH
- 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
NG TH T LINH
2.2
Cu trc d liu
NG TH T LINH
2.3
2.4
NG TH T LINH
10
Chng 2.
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].
-
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
NG TH T LINH
12
2.2
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
3. Kt qu th nghim.
3.1 D liu t file input.txt
NG TH T LINH
14
3.2
Demo.
NG TH T LINH
15
NG TH T LINH
16
NG TH T LINH
17
NG TH T LINH
18
NG TH T LINH
19
Chng 3.
NH GI KT QU
1. nh gi
Hn ch ca thut ton
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
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
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
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
24
{
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
26
{
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
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
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
{
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
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
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
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