int i;
if(pfree==-1)//空闲进程控制块队列为空 {
cout<<\无空闲进程控制块,进程创建失败\ return 0; }
i=pfree;//将空闲进程控制块的第一个取下来付给i pfree=pcbarea[pfree].next;//空闲进程控制块的指针后移 //填写该控制进程块的内容 pcbarea[i].name=x;
pcbarea[i].priority=priority; 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;//将送来的控制块挂在就绪队列的末尾
31 页 第
ready.tail=i;
pcbarea[ready.tail].next=-1;//说明最后就绪队列进程之后再没有就绪的进程 }
else//如果就绪队列为空,让就绪队列的首尾指针指向新来的进程 {
ready.head=i; ready.tail=i;
pcbarea[ready.tail].next=-1; } return 1;
}//创建进程的函数结束
void main() {
int num,j,priority,count=1; run=ready.head=ready.tail=-1; pfree=0;
for(j=0;j 32 页 第 cout<<\输入进程编号 进程优先数 (均以负数结束,最多可输入10个进程)\ cin>>num>>priority; while(num>0) { create(num,priority); cin>>num>>priority; count++; } //按进程优先级排大小 for(int k=0;k for(int j=count-1;j>k;j--) if(pcbarea[j].priority>pcbarea[j-1].priority) { //struct pcbarea temp; temp=pcbarea[j]; pcbarea[j]=pcbarea[j-1]; pcbarea[j-1]=temp; } } sheduling(); 33 页 第 if(run!=-1) { cout<<\进程标志符:\ cout<<\进程优先级:\ cout<<\进程状态:\ cout<<\寄存器内容:ax bx cx dx pc psw:\<< pcbarea[run].ax <<\\<<\\<<\ < while(ready.head!=-1) { cout<<\进程标志符:\<< pcbarea[ready.head].name < cout<<\进程优先级:\<< pcbarea[ready.head].priority < cout<<\进程状态:\<< pcbarea[ready.head].status < cout<<\寄存器内容:ax bx cx dx pc psw:\<< pcbarea[ready.head].ax <<\\<<\\ 34 页 第 < 2.3.1 实现过程总结 开始<<\ Y空闲进程控制块队列为空?N进程创建失败取空闲进程控制块队列的第一个i=pcb_freepcb_free后移pcb_free=pcb_block[pcb_free].next填写该进程控制块内容:pcb_block[i].Flag=xpcb_block[i].Status=Ready初始化进程控制块内现场信息 就绪队列为空?YN挂入就绪队列:Pcb_block[pcb_ready.tail].next=jpcb_ready.tail=jpcb_block[pcb_ready.tail].next=-1挂入就绪队列:pcb_ready.head=jpcb_ready.tail=jpcb_block[pcb_ready.tail].next=-1结束 2.3.2 程序安装使用手册 使用平台:VC++6.0 运行程序后根据提示信息输入进程编号和进程所需的时间片大小, 35 页 第