資源簡(jiǎn)介
用c++編寫(xiě)的程序
模擬實(shí)現(xiàn)進(jìn)程管理
可以實(shí)現(xiàn)就緒、運(yùn)行、阻塞三態(tài)之間的轉(zhuǎn)變。

代碼片段和文件信息
#include?“stdio.h“??
#include???
#include???
#define?getpch(type)?(type*)malloc(sizeof(type))??
#define?NULL?0?
#include?
?
struct?pcb?{??
char?name[10];??
char?state;??
int?super;??
int?ntime;??
int?rtime;
??
struct?pcb*?link;??
}*ready=NULL*p;??
typedef?struct?pcb?PCB;??
sort()??
{??
PCB?*first?*second;??
int?insert=0;??
if((ready==NULL)||((p->super)>(ready->super)))?
{??
p->link=ready;??
ready=p;??
}??
else??
{??
first=ready;??
second=first->link;??
while(second!=NULL)??
{??
if((p->super)>(second->super))
{??
p->link=second;??
first->link=p;??
second=NULL;??
insert=1;??
}??
else?
{??
first=first->link;??
second=second->link;??
}??
}??
if(insert==0)?first->link=p;??
}??
}??
input()?
{??
int?inum;??
printf(“\n?請(qǐng)輸入進(jìn)程個(gè)數(shù)“);??
scanf(“%d“&num);
?
?
for(i=0;i {??
printf(“\n?進(jìn)程號(hào)No.%d:\n“i);??
p=getpch(PCB);??
printf(“\n?輸入進(jìn)程名:“);??
scanf(“%s“p->name);??
printf(“\n?輸入進(jìn)程優(yōu)先數(shù):“);??
scanf(“%d“&p->super);??
printf(“\n?輸入進(jìn)程運(yùn)行時(shí)間:“);??
scanf(“%d“&p->ntime);?
printf(“\n“);??
p->rtime=0;p->state=‘w‘;??
p->link=NULL;??
sort();?
}??
}?
?
int?space()??
{?
int?l=0;?
PCB*?pr=ready;??
while(pr!=NULL)??
{?
l++;??
pr=pr->link;??
}??
return(l);??
}??
disp(PCB?*?pr)
{??
printf(“\n隊(duì)列名稱(chēng)?狀態(tài)??優(yōu)先級(jí)?所需時(shí)間?已運(yùn)行時(shí)間?\n“);??
printf(“|%s\t“pr->name);??
printf(“|%c\t“pr->state);??
printf(“|%d\t“pr->super);??
printf(“|%d\t“pr->ntime);??
printf(“|%d\t“pr->rtime);??
printf(“\n“);??
}?
check()
{??
PCB*?pr;??
printf(“\n?****?當(dāng)前正在運(yùn)行的進(jìn)程是:%s“p->name);??
disp(p);??
pr=ready;??
printf(“\n?****當(dāng)前就緒隊(duì)列狀態(tài)為:\n“);??
while(pr!=NULL)??
{??
disp(pr);??
pr=pr->link;??
}??
}??
destroy()??
{??
printf(“\n?進(jìn)程?[%s]?已完成.\n“p->name);??
free(p);??
}??
running(int?c)?
{
(p->rtime)+=c;??
if(p->rtime>=p->ntime)??
destroy();??
else??
{?
if(p->rtime==4)
{
p->state=‘B‘;
printf(“\n?****當(dāng)隊(duì)列出現(xiàn)阻塞:\n“);???
?disp(p);????
Sleep(1000);
p->state=‘w‘;
}??
else{
p->state=‘w‘;
}?
(p->super)--;
sort();?
}??
}
??
main()??
{?char?a;
int?n;
int?lenh=0;??
char?ch;
? printf(“\n********************************************“);
? printf(“\n*???????????????進(jìn)程演示系統(tǒng)???????????????*“);
? printf(“\n********************************************“);
? printf(“\n??????????1.開(kāi)始演示??????2.退出程序????“);
? printf(“\n********************************************“);
? printf(“\n??????????請(qǐng)選擇(1~2)“);
? a=getche();
???????switch(a)
??? {case?‘1‘:
??????? int?c;
printf(“\n?請(qǐng)輸入輪轉(zhuǎn)時(shí)間片“);??
scanf(“%d“&c); ??
input();??
len=space();??
while((len!=0)&&(ready!=NULL))??
{???
h++;??
printf(“\n?執(zhí)行次數(shù):%d?\n“h-1);??
p=ready;??
ready=p->link;??
p->link=NULL;??
p->state=‘R‘;??
check();??
running(c);??
?
??
}?
?ch=getchar();
printf(“\n\n?進(jìn)程已經(jīng)完成.\n“);??
ch=getchar();??
??????case‘2‘:?exit(0);
???????default:?n=0;
???}
}??
?屬性????????????大小?????日期????時(shí)間???名稱(chēng)
-----------?---------??----------?-----??----
?????文件??????50176??2009-06-30?21:12??進(jìn)程管理\試驗(yàn)\Cpp1.ncb
?????文件???????2194??2009-06-06?21:48??進(jìn)程管理\試驗(yàn)\Cpp1.plg
?????文件???????3026??2009-06-06?21:48??進(jìn)程管理\試驗(yàn)\Cpp1.cpp
?????文件????????203??2009-06-07?18:21??進(jìn)程管理\試驗(yàn)\Cpp1.sln
????..A..H.??????6656??2009-06-07?18:21??進(jìn)程管理\試驗(yàn)\Cpp1.suo
?????文件???????3377??2009-06-30?21:08??進(jìn)程管理\試驗(yàn)\Cpp1.dsp
?????文件??????48640??2009-06-30?21:12??進(jìn)程管理\試驗(yàn)\Cpp1.opt
?????文件????????516??2009-06-30?21:12??進(jìn)程管理\試驗(yàn)\Cpp1.dsw
?????文件?????222208??2009-06-30?21:08??進(jìn)程管理\試驗(yàn)\Debug\vc60.idb
?????文件??????77824??2009-06-06?21:48??進(jìn)程管理\試驗(yàn)\Debug\vc60.pdb
?????文件????3560636??2009-06-06?21:48??進(jìn)程管理\試驗(yàn)\Debug\Cpp1.pch
?????文件?????196689??2009-06-06?21:48??進(jìn)程管理\試驗(yàn)\Debug\Cpp1.exe
?????文件?????484352??2009-06-06?21:48??進(jìn)程管理\試驗(yàn)\Debug\Cpp1.pdb
?????文件?????199680??2009-06-06?21:48??進(jìn)程管理\試驗(yàn)\Debug\Cpp1.ilk
?????文件??????22788??2009-06-06?21:48??進(jìn)程管理\試驗(yàn)\Debug\Cpp1.obj
?????文件?????????39??2009-07-07?10:53??進(jìn)程管理\說(shuō)明.txt
?????目錄??????????0??2009-07-07?10:51??進(jìn)程管理\試驗(yàn)\Debug
?????目錄??????????0??2009-07-07?10:51??進(jìn)程管理\試驗(yàn)
?????目錄??????????0??2009-07-07?10:53??進(jìn)程管理
-----------?---------??----------?-----??----
??????????????4879004????????????????????19
評(píng)論
共有 條評(píng)論