• 大小: 1.15MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-26
  • 语言: C/C++
  • 标签: 进程  阻塞  

资源简介

用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


评论

共有 条评论