欢迎来到天天文库
浏览记录
ID:14421489
大小:54.00 KB
页数:5页
时间:2018-07-28
《处理机调度示例程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、设计一个按时间片轮转法实现处理机调度的程序设计的提示如下:(1)假设系统有3~5个进程,每个进程用一个进程控制块(PCB)来表示。进程控制块的格式如下:(2)按照进程到达的先后顺序排成一个循环队列,设一个队首指针指向第一个到达进程的首址。另外再设一个当前运行进程指针,指向当前正在运行的进程。(3)执行处理机调度时,首先选择队首的第一个进程运行。(4)由于本实验是模拟实验,所以对被选中进程并不实际启动运行,而只是执行:估计运行时间减1输出当前运行进程的名字用这个操作来模拟进程的一次运行。(5)进程运行一次后,以后的调度则将当前指针依次下移一个位置,指向下一个进程,
2、即调整当前运行指针指向该进程的连接指针所指进程,以指示应运行进程,同时还应该判断该进程的剩余运行时间是否为0.若不为0,则等待下一轮的运行;若进程的剩余运行时间为0,则将该进程的状态置为完成状态“C”,并退出循环队列。(6)若就绪队列不空,则重复上述的步骤(4)和(5)知道所有进程都运行完为止。(7)在所设计的调度程序中,应包含显示或打印语句,以便显示或打印每次选中进程的名称及运行一次后队列的变化情况。示例代码:#defineN10#include#includetypedefstructpcb//进程控制块定义{charpn
3、ame[N];//进程名intruntime;//运行时间intarrivetime;//到达时间charstate;//进程状态structpcb*next;//连接指针}PCB;PCBhead_input;//就绪队列头指针PCBhead_run;//运行队列头指针PCB*pcb_input;staticcharR='r',C='c';unsignedlongcurrent;//记录系统当前时间的变量voidinputprocess();//建立进程的函数intreadydata();//判断是否有就绪进程的函数intrunprocess();//运行进程的
4、函数intreadyprocess();//检查就绪队列并准备运行进程的函数FILE*f;//生命一个文件指针//检查就绪队列并准备运行进程的函数intreadyprocess(){while(1){if(readydata()==0)//判断就绪队列是否为空的函数return1;elserunprocess();//运行进程的函数}}//判断就绪队列是否为空的函数intreadydata(){if(head_input.next==NULL){if(head_run.next==NULL)return0;elsereturn1;}PCB*p1,*p2,*p3;
5、p1=head_run.next;p2=&head_run;while(p1!=NULL)//判断队列是否为空{p2=p1;p1=p2->next;}p1=p2;p3=head_input.next;p2=&head_input;while(p3!=NULL)//判断就绪队列不空时,将他们移到运行队列{if(((unsignedlong)p3->arrivetime<=current)&&(p3->state==R)){printf("Timeis%4d;Process%sstart,",(current+500)/1000,p3->pname);fprin
6、tf(f,"Timeis%4d;Process%sstart,",(current+500)/1000,p3->pname);p2->next=p3->next;p3->next=p1->next;p1->next=p3;p3=p2;}p2=p3;p3=p3->next;}return1;}//运行进程的函数intrunprocess(){PCB*p1,*p2;if(head_run.next=NULL)//运行队列为空时,修改当前时间{current++;return1;}else{p1=head_run.next;p2=&head_run;while(p
7、1!=NULL)//由运行队列顺序取一个进程运行{p1->runtime--;current++;if(p1->runtime<=0){printf("Timeis%4d;Process%send.",(current+500)/1000,p1->pname);fprintf(f,"Timeis%4d;Process%send.",(current+500)/1000,p1->pname);p1->state=C;p2->next=p1->next;deletep1;p1=NULL;}else{p2=p1;p1=p2->next;}}return1;}}
8、//建立进程的函数voi
此文档下载收益归作者所有