pcbarea[i].bx=x; pcbarea[i].cx=x; pcbarea[i].dx=x; pcbarea[i].pc=x; pcbarea[i].psw=x; pcbarea[i].time=time; pcbarea[i].finished=0;
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; }
void main()
26 页 第
{
//系统初始化 int num,i,j; int runtime;
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;
cout<<\输入进程编号(避免编号的冲突,以两个负数输入结束最多可以创建 10个进程)以及所需运行时间大小(例如5 4表示编号为5,时间片为4)\ cin>>num>>TIME;
while(num>=0 && TIME>=0) {
create(num,TIME); cin>>num>>TIME; count++; }
cout<<\您一共创建了\个进程\ for(int m = 0; m < count; m++) sheduling(); //进程调度
27 页 第
count=count-num_fin;
cout<<\还剩下\个进程待执行\}
/*****************课外:优先数调度算法*****************/ #include
const TimePicture=10;//定义时间片时间长度为10 const Running=1;//定义处于运行状态参数为1 const Aready=2;//定义处于就绪状态参数为2 const Blocking=3;//定义处于等待状态参数为3 const n=10;//假定系统允许进程个数为10
using namespace std; struct {
int name;//进程标识符 int priority;//进程优先数 int status;//进程状态
int ax,bx,cx,dx;//进程现场信息,通用寄存器内容 int pc;//进程现场信息,程序计数器内容 int psw;//进程现场信息,程序状态字寄存器内容
28 页 第
int next;//下一个进程控制块的位置 }pcbarea[n],temp;//模拟进程控制块区域的数组
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<<\没有就绪的进程\ return 0; }
i=ready.head;//否则把当前正在就绪队列的队首指针赋值给i
29 页 第
ready.head=pcbarea[ready.head].next; if(ready.head==-1) {
ready.tail=-1;//如果就绪队列中就进程为空,则修改tail指针指空 }
pcbarea[i].status=Running;//修改进程控制块的状态位为-运行态
TIME=TimePicture;//设置时间片时间 //恢复该进程的现场信息 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 priority)//创建进程 {
30 页 第
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库操作系统结课实验报告(6)在线全文阅读。
相关推荐: