int temp; if(ready.head==-1) { ready.head=x; ready.tail=x;
} else { temp=ready.tail; ready.tail=x; }
pcbArea[ready.tail].next=-1;
}
//创建PCB
void CreatePCB(int x,PCB pcb) { pcbArea[x].ax=pcb.ax; pcbArea[x].bx=pcb.bx; pcbArea[x].cx=pcb.cx; pcbArea[x].dx=pcb.dx; pcbArea[x].name=pcb.name;
pcbArea[x].next=-1;
.
//x为要创建PCB在PCB区域数组的编号 精选文档
.
}
pcbArea[x].pc=pcb.pc; pcbArea[x].psw=pcb.psw; pcbArea[x].status=pcb.status;
//创建进程函数 void Create(PCB pcb) { }
//进程调度函数 void Schedule() {
int temp;
精选文档
int temp; if(pfree==-1) { }
temp=PopFree(); pcb.status=Aready; CreatePCB(temp,pcb); PushReady(temp);
printf(\空闲队列为空,不能创建进程。\\n\ return;
.
if(ready.head==-1) { }
temp=PopReady();
pcbArea[temp].status=Running;
printf(\系统内没有进程可以调度。\ return;
TIME=SLOT; //恢复CPU现场 AX=pcbArea[temp].ax; BX=pcbArea[temp].bx; CX=pcbArea[temp].cx; DX=pcbArea[temp].dx; PC=pcbArea[temp].pc; PSW=pcbArea[temp].psw;
run=temp; //将选中的进程赋给运行指针
printf(\当前运行的程序:\\n\ //输出调度结果 printf(\进程号:%d\\n\ printf(\进程状态:%d\\n\
printf(\寄存器内容:\\nAX\\tBX\\tCX\\tDX\\tPC\\tPSW\\n\ printf(\
精选文档
.
); }
pcbArea[run].ax,pcbArea[run].bx,pcbArea[run].cx,pcbArea[run].dx,pcbArea[run].pc,pcbArea[run].psw
void main() { \
if(temp<0)
break;
printf(\请开始输入进程号:\\n\ while(1) {
scanf(\ InitRun(); InitReady(); InitFree(); getchar();
printf(\请输入进程号,以负数为结束(进程号应保持唯一)。\\n\\n按任意键进入输入模式:int temp; PCB tmp_pcb;
精选文档
tmp_pcb.name=temp; tmp_pcb.ax=temp; tmp_pcb.bx=temp; tmp_pcb.cx=temp; tmp_pcb.dx=temp; tmp_pcb.pc=temp;
tmp_pcb.psw=temp;
Create(tmp_pcb);
}
printf(\
Schedule();
}
.
精选文档
相关推荐: