資源簡(jiǎn)介
1、程序中有創(chuàng)建、撤消、阻塞、喚醒、掛起、激活、改變優(yōu)先數(shù)(K0)、改變狀態(tài)(STATE)、查看PCB功能模塊,為每個(gè)模塊建立一個(gè)程序。
2、PCB(進(jìn)程控制塊)可采用數(shù)組數(shù)據(jù)結(jié)構(gòu),每個(gè)數(shù)組元素即PCB塊可包含N0(外部名),K0(優(yōu)先數(shù)),CHA(狀態(tài))三項(xiàng)。

代碼片段和文件信息
#include“stdio.h“
#include“stdlib.h“
struct?pcb?
{
int?name;??
int?KO;
int?state;
};
typedef?struct?pcb?PCB;
PCB?a[10];
void?create()?//??創(chuàng)建進(jìn)程
{
static?int?pi=1;
int?kl=0m;
printf(“請(qǐng)輸入進(jìn)程名:“);
scanf(“%d“&m);
for(k=1;k<=10;k++)
if(a[k].name==m)
l=1;
if(l==1)
{
printf(“創(chuàng)建失敗!該進(jìn)程已經(jīng)存在!\n“);
???
}
else
{
a[pi].name=m;
printf(“\n“);
printf(“請(qǐng)輸入優(yōu)先級(jí):“);
scanf(“%d“&a[pi].KO);
a[pi++].state=2;
printf(“創(chuàng)建成功!\n“);
printf(“\n“);
}
????getchar();
getchar();
}
void?destory()?//撤銷(xiāo)進(jìn)程
{
int?inumk=0;
printf(“請(qǐng)輸入要撤銷(xiāo)的進(jìn)程:“);
scanf(“%d“&num);
for(i=0;i<=10;i++)
if(a[i].name==num)
k=i;
if(k!=0)
{
a[k].name=0;
a[k].KO=0;
a[k].state=0;
printf(“撤銷(xiāo)成功!\n“);
}
else
printf(“撤銷(xiāo)失敗!不存在此進(jìn)程!\n“);
getchar();
getchar();
}
void?active()?//激活進(jìn)程
{
int?ik=0m;
printf(“?請(qǐng)輸入進(jìn)程名:“);
scanf(“%d“&m);
for(i=0;i<=10;i++)
if(a[i].name==m)
k=i;
if(k!=0)
{
switch(a[k].state)
{
case?1?:a[k].state=4;printf(“激活成功!\n“);break;
case?2?:a[k].state=3;printf(“激活成功!\n“);break;
default:printf(“激活失敗!進(jìn)程已經(jīng)激活或正在執(zhí)行!\n“);
}
}
else
printf(“激活失敗!進(jìn)程不存在\n!“);
getchar();
getchar();
}
void?hang()?//掛起進(jìn)程
{
int?ik=0m;
printf(“請(qǐng)輸入進(jìn)程名:“);
scanf(“%d“&m);
for(i=1;i<=10;i++)
if(a[i].name==m)
k=i;
if(k!=0)
{
switch(a[k].state)
{
case?3:a[k].state=2;printf(“掛起成功!\n“);break;
case?4:a[k].state=1;printf(“掛起成功!\n“);break;
case?5:a[k].state=1;printf(“掛起成功!\n“);break;
default:printf(“掛起失敗!進(jìn)程已經(jīng)處于掛起狀態(tài)!\n“);
}
}
else
printf(“掛起失敗!進(jìn)程不存在!\n“);
getchar();
getchar();
}
void?release()?//釋放進(jìn)程
{
int?ik=0m;
printf(“請(qǐng)輸入進(jìn)程名:“);
scanf(“%d“&m);
for(i=1;i<=10;i++)
if(a[i].name==m)
k=i;
?????if(k!=0)
?{
?switch(a[k].state)
?{
?case?2:a[k].state=1;printf(“釋放成功!\n“);break;
?case?3:a[k].state=4;printf(“釋放成功!\n“);break;
?default:printf(“?釋放失敗!進(jìn)程處于就緒狀態(tài)或正在執(zhí)行!\n“);
?}
?}
?else
?printf(“?釋放失敗!進(jìn)程不存在!\n“);
?getchar();
?getchar();
}
void?execution()?//執(zhí)行進(jìn)程
{
int?ik=0m;
printf(“請(qǐng)輸入進(jìn)程名:“);
scanf(“%d“&m);
for(i=1;i<+10;i++)
if(a[i].name==m)
k=i;
if(k!=0)
{
switch(a[k].state)
{
case?4:a[k].state=5;printf(“執(zhí)行成功!\n“);break;
case?5:printf(“進(jìn)程正在執(zhí)行!\n“);
default:printf(“進(jìn)程不符合執(zhí)行條件!\n“);
}
}
else
printf(“進(jìn)程不存在!\n“);
getchar();
getchar();
}
void?state_appear(int?k)
{
int?a;
a=k;
switch(a)
{
case?1:printf(“靜止就緒\n“);break;
case?2:printf(“靜止阻塞\n“);break;
????case?3:printf(“活動(dòng)阻塞\n“);break;
????case?4:printf(“活動(dòng)就緒\n“);break;
case?5:printf(“執(zhí)行\(zhòng)n“);break;
}
}
void?look_state()
{
int?imnk=0;
printf(“1-查看所有進(jìn)程狀態(tài)\n“);
printf(“2-查詢單個(gè)進(jìn)程狀態(tài)\n“);
printf(“請(qǐng)選擇:“);
scanf(“%d“&n);
switch(n)
{?
case?1:
printf(“進(jìn)程名?????優(yōu)先級(jí)????????進(jìn)程狀態(tài)\n“);
for(i=1;i<=10;i++)
if(a[i].name!=0)
{
printf(“%d\t\t%d\t“a[k].namea[i].KO);
state_appear(a[i].state);
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????4922??2010-04-27?10:18??邢偉?2班??231\jinchen?g.cpp
?????文件??????65536??2010-04-27?11:45??邢偉?2班??231\程序說(shuō)明.doc
?????目錄??????????0??2010-04-27?11:47??邢偉?2班??231
-----------?---------??----------?-----??----
????????????????70458????????????????????3
評(píng)論
共有 條評(píng)論