进程管理代码调试

小冯编程 2019-04-17 08:55:12
#include "stdio.h" #define running 1 //用running表示进程处于运行态 #define aready 2 //用aready表示进程处于就绪态 #define blocking 3 //用blocking表示进程处于等待态 #define sometime 5 //用sometime表示时间片的大小 #define n 10 //假定系统允许进程个数为n 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; //定义就绪队列的头指针head和尾指针tail int pfree; //定义指向空闲进程控制块队列的指针 int sheduling() //进程调度函数 { int i; if(ready.head==-1) //空闲进程控制块队列为空,退出 { cout<<"无就绪进程"<<endl; 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=sometime; //设置相时钟终寄存器 //恢复该进程现场信息 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 1; }//进程调度函数结束 int create(int x) //创建进程 { int i; if(pfree==-1) //空闲进程控制块队列为空 { cout<<"无空闲进程控制块,进程创建失败"<<endl; 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 1; } main() { //系统初始化 int i,j; int num; 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; cout<<"输入进程编号(避免编号的冲突,以负数输入结束,最多可以创建10个进程):"<<endl; cin>>num; while(num>=0) { create(num); cin>>num; } sheduling(); //进程调度 if(run!=-1) { cout<<"进程标识符 进程状态 寄存器内容:ax bx cx dx pc psw:"<<endl; cout<<pcbarea[run].name<<pcbarea[run].status<<pcbarea[run].ax<<pcbarea[run].bx<<pcbarea[run].cx<<pcbarea[run].dx<<pcbarea[run].pc<<pcbarea[run].psw<<endl; } }
...全文
45 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

69,380

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧