資源簡(jiǎn)介
基于Linux的實(shí)現(xiàn)進(jìn)程的信號(hào)量互斥申請(qǐng)
包括說(shuō)明書(shū) 源代碼 任務(wù)書(shū)
這事一個(gè)課程設(shè)計(jì)的最終答辯
代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include??
#include?
#define?NUM?5?//資源數(shù)
pthread_t?thread[5];
pthread_mutex_t?mut;?//互斥信號(hào)量
struct?zy?{
char?type;?//資源的名稱(chēng)
int?n;?//資源的數(shù)量
};
struct?jc?{
char?name;?//名稱(chēng)
int?runtime;?//執(zhí)行時(shí)間
int?waittime;?//等待時(shí)間
int?typenum;?//進(jìn)程所申請(qǐng)的資源數(shù)
struct?zy?r[5];?//所申請(qǐng)資源的信息
};
struct?y?{
int?flag;?//標(biāo)志,0:未出現(xiàn)過(guò)的資源,(進(jìn)程a申請(qǐng)資源B?1個(gè)資源B?1個(gè))1:該資源已申請(qǐng)
int?index;?//資源下標(biāo)
int?tr;?//進(jìn)程的下標(biāo)
int?flag1;?//1:該資源不能再申請(qǐng);0:該資源還可以申請(qǐng)
}?Y[10][NUM];
struct?jc?JC[5];
struct?zy?ZY[NUM];?//每種資源的名稱(chēng)及數(shù)量
int?u?=?0;?//進(jìn)程數(shù)
int?a?=?0;?//資源數(shù)
int?Available[NUM];?//可使用資源向量
int?Max[10][NUM];?//最大需求矩陣
int?Allocation[10][NUM];?//分配矩陣
int?Need[10][NUM];?//需求矩陣
int?Work[NUM];?//工作向量
int?Finish[NUM];?//狀態(tài)標(biāo)志
int?Request[10][NUM];?//進(jìn)程申請(qǐng)資源向量
//對(duì)銀行家算法中的需求矩陣進(jìn)行初始化
int?init()?{
int?i?j?x;
for?(i?=?0;?i? for?(j?=?0;?j? Need[i][j]?=?Max[i][j]?-?Allocation[i][j];
}
}
return?0;
}
//輸入資源信息
int?ziyuan()
{
int?ix;
printf(“************************************************\n“);
printf(“請(qǐng)輸入資源的種類(lèi)數(shù):\n“);
fflush(stdin);
x=scanf(“%d“&a);
while(x==0)
{
printf(“不符合規(guī)則,請(qǐng)重新輸入!\n“);
fflush(stdin);
x=scanf(“%d“&a);
}
for(i=0;i {
printf(“請(qǐng)輸入第%d種資源的名稱(chēng)(A---Z):\n“i);
scanf(“%c“&ZY[i].type);
while(ZY[i].type==‘\n‘)scanf(“%c“&ZY[i].type);
while(!isupper(ZY[i].type))
{
printf(“不符合規(guī)則,請(qǐng)重新輸入!\n“);
scanf(“%c“&ZY[i].type);
while(ZY[i].type==‘\n‘)scanf(“%c“&ZY[i].type);
}
printf(“請(qǐng)輸入資源%c的數(shù)量:“ZY[i].type);
fflush(stdin);
x=scanf(“%d“&ZY[i].n);
while(x==0)
{
printf(“不符合規(guī)則,請(qǐng)重新輸入!\n“);
fflush(stdin);
x=scanf(“%d“&ZY[i].n);
}
Available[i]=ZY[i].n;//對(duì)可使用資源向量進(jìn)行初始化
}
return?0;
}
//對(duì)整個(gè)二維數(shù)組Y進(jìn)行遍歷
int?judge_pro(int?m?int?p[10])?{
int?i?j;
for?(i?=?0;?i? for?(j?=?0;?j? if?(!(Y[i][j].flag1))?{
return?1;
}?//只要有1個(gè)進(jìn)程的1種資源未申請(qǐng)完,則返回1
}
}
return?0;?//僅當(dāng)所有進(jìn)程對(duì)資源的申請(qǐng)都達(dá)到所需量時(shí)才返回0
}
//對(duì)二維數(shù)組中的某一行(對(duì)應(yīng)某種進(jìn)程)進(jìn)行遍歷
int?panduan1(int?tr?int?p[10])?{
int?i;
for?(i?=?0;?i? if?(!(Y[tr][i].flag1))
return?0;?//該進(jìn)程只要有1個(gè)資源未申請(qǐng)完,則返回0
}
return?1;?//僅當(dāng)該進(jìn)程所有資源都申請(qǐng)完時(shí)返回1
}
//產(chǎn)生隨機(jī)進(jìn)程和進(jìn)程所申請(qǐng)的資源,并調(diào)用銀行家算法
int?ra()?{
int?col[10];
int?i?j?k?=?0?w?=?0?m?=?0?n?=?0?q?=?0;?//k記錄最大需求矩陣中數(shù)目不為0的元素個(gè)數(shù)
printf(“\n“);
if?(u?==?0?||?a?==?0)?{
printf(“請(qǐng)先輸入信息!\n“);
return?0;
}
//對(duì)Max數(shù)組進(jìn)行遍歷,篩選并記錄各進(jìn)程對(duì)所有資源的最大申請(qǐng)量大于0的元素信息
for?(i?=?0;?i? for?(j?=?0;?j? if?(Max[i][j])?{
Y[m][n].index?=?j;?//index記錄資源下標(biāo)
Y[m][n].tr?=?i;?//tr記錄進(jìn)程下標(biāo)
Y[m][n].flag?=?0;?//flag=1:所記錄的資源已申請(qǐng)過(guò),flag=0:所記錄的資源尚未申請(qǐng)
Y[m][n].flag1?=?0;?//flag1=1:進(jìn)程對(duì)該資源的申請(qǐng)已達(dá)到所需量,flag=0:還未達(dá)到所需量
n++;
}
}
col[m]?=?n;?//數(shù)組col記錄二維數(shù)組Y的每一行的列數(shù)
n?=?0;?//對(duì)n進(jìn)行恢復(fù),以便下次循環(huán)
m++;
}
//只要有資源未申請(qǐng)完就執(zhí)行循環(huán)
while?(judge_pro(m?col))?{
int?_one?=?0;
int?tr;
//若該進(jìn)程所有資源都申請(qǐng)完,則執(zhí)行循環(huán)
do?{
tr?=?rand()?%?m;
}?while?(panduan1(tr?col));?//
printf(“%c進(jìn)程申請(qǐng)\n“?JC[Y[tr][0].tr].name);
int?x?=?col[tr];
//若有資源申請(qǐng)完,則使x減
?屬性????????????大小?????日期????時(shí)間???名稱(chēng)
-----------?---------??----------?-----??----
?????目錄???????????0??2013-12-05?13:24??基于Linux的實(shí)現(xiàn)進(jìn)程的信號(hào)量互斥申請(qǐng)\
?????目錄???????????0??2013-12-07?17:13??基于Linux的實(shí)現(xiàn)進(jìn)程的信號(hào)量互斥申請(qǐng)\1622漢超\
?????文件???????31232??2013-12-05?13:37??基于Linux的實(shí)現(xiàn)進(jìn)程的信號(hào)量互斥申請(qǐng)\1622漢超\基于Linux的實(shí)現(xiàn)進(jìn)程的信號(hào)量互斥申請(qǐng)任務(wù)書(shū).doc
?????文件??????130468??2013-12-07?17:13??基于Linux的實(shí)現(xiàn)進(jìn)程的信號(hào)量互斥申請(qǐng)\1622漢超\漢超操作系統(tǒng)課程設(shè)計(jì)說(shuō)明書(shū).doc
?????目錄???????????0??2013-12-07?17:13??基于Linux的實(shí)現(xiàn)進(jìn)程的信號(hào)量互斥申請(qǐng)\1632韓煒\
?????文件???????31232??2013-12-05?13:36??基于Linux的實(shí)現(xiàn)進(jìn)程的信號(hào)量互斥申請(qǐng)\1632韓煒\基于Linux的實(shí)現(xiàn)進(jìn)程的信號(hào)量互斥申請(qǐng)任務(wù)書(shū).doc
?????文件??????147564??2013-12-07?17:13??基于Linux的實(shí)現(xiàn)進(jìn)程的信號(hào)量互斥申請(qǐng)\1632韓煒\韓煒操作系統(tǒng)課程設(shè)計(jì)說(shuō)明書(shū)?.doc
?????目錄???????????0??2013-12-07?17:13??基于Linux的實(shí)現(xiàn)進(jìn)程的信號(hào)量互斥申請(qǐng)\1641張睿光\
?????文件???????31232??2013-12-05?13:36??基于Linux的實(shí)現(xiàn)進(jìn)程的信號(hào)量互斥申請(qǐng)\1641張睿光\基于Linux的實(shí)現(xiàn)進(jìn)程的信號(hào)量互斥申請(qǐng)任務(wù)書(shū).doc
?????文件??????192702??2013-12-07?17:13??基于Linux的實(shí)現(xiàn)進(jìn)程的信號(hào)量互斥申請(qǐng)\1641張睿光\張睿光操作系統(tǒng)課程設(shè)計(jì)說(shuō)明書(shū).doc
?????目錄???????????0??2013-12-07?17:13??基于Linux的實(shí)現(xiàn)進(jìn)程的信號(hào)量互斥申請(qǐng)\1648白躍升\
?????文件???????31232??2013-12-05?13:35??基于Linux的實(shí)現(xiàn)進(jìn)程的信號(hào)量互斥申請(qǐng)\1648白躍升\基于Linux的實(shí)現(xiàn)進(jìn)程的信號(hào)量互斥申請(qǐng)任務(wù)書(shū).doc
?????文件??????165611??2013-12-07?17:13??基于Linux的實(shí)現(xiàn)進(jìn)程的信號(hào)量互斥申請(qǐng)\1648白躍升\白躍升說(shuō)明書(shū).doc
?????文件???????23969??2013-11-29?22:52??基于Linux的實(shí)現(xiàn)進(jìn)程的信號(hào)量互斥申請(qǐng)\基于Linux的實(shí)現(xiàn)進(jìn)程的信號(hào)量互斥申請(qǐng).c
評(píng)論
共有 條評(píng)論