处理机调度示例程序

处理机调度示例程序

ID:14421489

大小:54.00 KB

页数:5页

时间:2018-07-28

处理机调度示例程序_第1页
处理机调度示例程序_第2页
处理机调度示例程序_第3页
处理机调度示例程序_第4页
处理机调度示例程序_第5页
资源描述:

《处理机调度示例程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。