进程管理代码 | 顾建伟个人博客
现在的位置: 首页 > C/C++ > 正文
进程管理代码
2014年11月18日 C/C++ ⁄ 共 1998字 评论数 1

分享到:


#include"stdio.h"
#define running 1/*用running表示进程处于运行状态*/
#define aready 2/*用aready表示进程处于就绪状态*/
#define blocking 3/*用blocking表示进程处于等待状态*/
#define sometimes 5/*用sometime表示时间片大小*/
#define n 10/*假定系统允许进程个数为10*/
struct
{
int name;/*进程标识符*/
int status;/*进程状态*/
int ax,bx,cx,dx;/*进程现场信息,通用寄存器内容*/
int pc;/*进程现场信息,程序计数器内容*/
int psw;/*进程现场信息,程序状态寄存器内容*/
int next;/*下一个进程控制块的位置*/
}pcbarea[n];/*定义模拟进程控制块区域的数组*/
int PSW,AX,BX,CX,DX,PC,TIME;/*模拟寄存器*/
int run;/*定义指向正在运行进程的进程控制块的指针*/
struct
{
int head;
int tail;
}ready;/*定义指向正在运行进程的进程控制块的指针*/
int block;/*定义指向等待队列的指针*/
int pfree;/*定义指向空闲进程控制块队列的指针*/
sheduling()
/*进程调度函数*/
{
int i;
if(ready.head==-1)/*空闲进程控制块队列的指针*/
{
printf("无就绪进程\n");
return 0;
}
i=ready.head;/*就绪队列头指针赋给i*/
ready.head=pcbarea[ready.head].next;/*就绪队列头指针后移*/
if(ready.head==-1)ready.tail=-1;/*就绪队列为空,修正尾指针ready.tail*/
pcbarea[i].status=running;/**/
TIME=sometimes;/*设置相对时钟寄存器*/
/*恢复该进程现场信息*/
AX=pcbarea[run].ax;
BX=pcbarea[run].bx;
CX=pcbarea[run].cx;
DX=pcbarea[run].dx;
PC=pcbarea[run].pc;
PSW=pcbarea[run].psw;
/*修改指向运行进程的指针*/
run=i;
return 0;
}/*进程调度函数结束*/
create(int x)
/*创建进程*/
{
int i;
if(pfree==-1)/*空闲进程控制块队列为空*/
{
printf("无空闲进程控制块,进程创建失败\n");
return 0;
}
i=pfree;/*取空闲进程控制块队列的第一个*/
pfree=pcbarea[pfree].next;/*pfree后移*/
/*填写该进程控制内容:*/
pcbarea[i].name=x;
pcbarea[i].status=aready;
pcbarea[i].ax=x;
pcbarea[i].bx=x;
pcbarea[i].cx=x;
pcbarea[i].dx=x;
pcbarea[i].pc=x;
pcbarea[i].psw=x;
if(ready.head!=-1)
{
/*就绪队列不空时,挂入就绪队列方式*/
pcbarea[ready.tail].next=i;
ready.tail=i;
pcbarea[ready.tail].next=-1;
}
else
{
/*就绪队列为空时,挂入就绪队列方式*/
ready.head=i;
ready.tail=i;
pcbarea[ready.tail].next=-1;
}
return 0;
}/*进程创建函数结束*/
main()
{
/*系统初始化*/
int num,j;
run=ready.head=ready.tail=block=-1;
pfree=0;
for(j=0;j<n-1;j++)
pcbarea[j].next=j+1;
pcbarea[n-1].next=-1;
printf("输入进程编号(避免编号的冲突,以负数输入结束,最多可以创建10个进程):\n");
scanf("%d",&num);
while(num>0)
{
create(num);
scanf("%d",&num);
}
sheduling();
if(num==-1)
{
printf("进程名进程状态寄存器内容:axbxcxdxpcpsw:\n");
printf("%4d%10d%3d%3d%3d%3d%3d%3d\n",pcbarea[run].name,pcbarea[run].status,pcbarea[run].ax,pcbarea[run].bx,pcbarea[run].cx,pcbarea[run].dx,pcbarea[run].pc,pcbarea[run].psw);
}
}/*main结束*/

说出你的想法!
有事加我的QQ:932404999(微博ID:顾建伟个人博客网)
×