📄 优先数调度.cpp
字号:
#include <stdio.h>
#define running 1 //用running表示进程处于运行态
#define aready 2 //用aready表示进程处于就绪态
#define blocking 3 //用blocking表示进程处于等待态
#define sometime 5 //用sometime表示时间片大小
#define n 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; //定义就绪队列的头指针head和尾指针tail
int pfree; //定义指向空闲进程控制块队列的指针
void sheduling( ) //进程调度函数
{ int i;
if (ready.head==-1) //空闲进程控制块队列为空,退出
{ printf("无就绪进程\n");
return;
}
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; //修改指向运行的指针
}//进程调度函数结束
void create(int x)//创建进程
{ int i;
if(pfree==-1) //空闲进程控制块队列为空
{printf(" 无空闲进程控制块,进程创建失败\n");
return;
}
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;
}
}//进程创建函数结束
void main()
{//系统初始化
int num,j;
run=ready.head=ready.tail=-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(run!=-1)
{printf("进程标示符 进程状态 寄存器容量:ax bx cx dx pc psw:\n");
printf("%2d%16d%18d%4d%4d%4d%4d%4d\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()结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -