資源簡介
用c++編寫的程序
模擬實現進程管理
可以實現就緒、運行、阻塞三態之間的轉變。

代碼片段和文件信息
#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?請輸入進程個數“);??
scanf(“%d“&num);
?
?
for(i=0;i {??
printf(“\n?進程號No.%d:\n“i);??
p=getpch(PCB);??
printf(“\n?輸入進程名:“);??
scanf(“%s“p->name);??
printf(“\n?輸入進程優先數:“);??
scanf(“%d“&p->super);??
printf(“\n?輸入進程運行時間:“);??
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隊列名稱?狀態??優先級?所需時間?已運行時間?\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?****?當前正在運行的進程是:%s“p->name);??
disp(p);??
pr=ready;??
printf(“\n?****當前就緒隊列狀態為:\n“);??
while(pr!=NULL)??
{??
disp(pr);??
pr=pr->link;??
}??
}??
destroy()??
{??
printf(“\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?****當隊列出現阻塞:\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*???????????????進程演示系統???????????????*“);
? printf(“\n********************************************“);
? printf(“\n??????????1.開始演示??????2.退出程序????“);
? printf(“\n********************************************“);
? printf(“\n??????????請選擇(1~2)“);
? a=getche();
???????switch(a)
??? {case?‘1‘:
??????? int?c;
printf(“\n?請輸入輪轉時間片“);??
scanf(“%d“&c); ??
input();??
len=space();??
while((len!=0)&&(ready!=NULL))??
{???
h++;??
printf(“\n?執行次數:%d?\n“h-1);??
p=ready;??
ready=p->link;??
p->link=NULL;??
p->state=‘R‘;??
check();??
running(c);??
?
??
}?
?ch=getchar();
printf(“\n\n?進程已經完成.\n“);??
ch=getchar();??
??????case‘2‘:?exit(0);
???????default:?n=0;
???}
}??
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????50176??2009-06-30?21:12??進程管理\試驗\Cpp1.ncb
?????文件???????2194??2009-06-06?21:48??進程管理\試驗\Cpp1.plg
?????文件???????3026??2009-06-06?21:48??進程管理\試驗\Cpp1.cpp
?????文件????????203??2009-06-07?18:21??進程管理\試驗\Cpp1.sln
????..A..H.??????6656??2009-06-07?18:21??進程管理\試驗\Cpp1.suo
?????文件???????3377??2009-06-30?21:08??進程管理\試驗\Cpp1.dsp
?????文件??????48640??2009-06-30?21:12??進程管理\試驗\Cpp1.opt
?????文件????????516??2009-06-30?21:12??進程管理\試驗\Cpp1.dsw
?????文件?????222208??2009-06-30?21:08??進程管理\試驗\Debug\vc60.idb
?????文件??????77824??2009-06-06?21:48??進程管理\試驗\Debug\vc60.pdb
?????文件????3560636??2009-06-06?21:48??進程管理\試驗\Debug\Cpp1.pch
?????文件?????196689??2009-06-06?21:48??進程管理\試驗\Debug\Cpp1.exe
?????文件?????484352??2009-06-06?21:48??進程管理\試驗\Debug\Cpp1.pdb
?????文件?????199680??2009-06-06?21:48??進程管理\試驗\Debug\Cpp1.ilk
?????文件??????22788??2009-06-06?21:48??進程管理\試驗\Debug\Cpp1.obj
?????文件?????????39??2009-07-07?10:53??進程管理\說明.txt
?????目錄??????????0??2009-07-07?10:51??進程管理\試驗\Debug
?????目錄??????????0??2009-07-07?10:51??進程管理\試驗
?????目錄??????????0??2009-07-07?10:53??進程管理
-----------?---------??----------?-----??----
??????????????4879004????????????????????19
評論
共有 條評論