欢迎来到天天文库
浏览记录
ID:55272572
大小:44.50 KB
页数:9页
时间:2020-05-08
《设计一个按优先数调度算法实现处理器调度的程序(可以输入进程的数量).doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、题目:设计一个按优先数调度算法实现处理器调度的程序(可以自己定义进程的数量)提示:(1)假定系统有5个进程,每个进程用一个PCB来代表。PCB的格式为:进程名、指针、要求运行时间、优先数、状态。进程名——P1~P5。指针——按优先数的大小把5个进程连成队列,用指针指出下一个进程PCB的首地址。要求运行时间——假设进程需要运行的单位时间数。优先数——赋予进程的优先数,调度时总是选取优先数大的进程先执行。状态——假设两种状态,就绪,用R表示,和结束,用E表示。初始状态都为就绪状态。(2)每次运行之前,为每个进程任意确定它的“优先数”和“要求运行时间”
2、。(3)处理器总是选队首进程运行。采用动态改变优先数的办法,进程每运行1次,优先数减1,要求运行时间减1。(4)进程运行一次后,若要求运行时间不等于0,则将它加入队列,否则,将状态改为“结束”,退出队列。(5)若就绪队列为空,结束,否则,重复(3)。2.流程图:(1)主程序流程图:结束调用运行子程序调用初始化子程序开始(2)子程序init()流程图:开始定义ii=0i3、=100i=0i4、.runtimej=j+1输出提示show()getchar()j5、序#include"stdio.h"#include"string.h"intnum;structPCB{charname;//进程名intruntime;//要求运行时间intpri;//优先数charstate;//状态,R-就绪,F-结束};structPCBpcblist[100];//定义进程控制块数组voidinit()//PCB初始化子程序{inti;for(i=0;i6、pcblist[i].name,&pcblist[i].pri,&pcblist[i].runtime);pcblist[i].state='R';//进程初始状态均为就绪getchar();//接收回车符}}intmax_pri_process()//确定最大优先级进程子程序{intmax=-100;//max为最大优先数,初始化为-100inti;intkey;for(i=0;i7、st[i].pri&&pcblist[i].state=='R')//从就绪进程中选取优先数最大的进程{max=pcblist[i].pri;//max存放每次循环中的最大优先数key=i;//将进程号赋给key}}if(pcblist[key].state=='E')//具有最大优先数的进程若已运行完毕return-1;//则返回-1elsereturnkey;//将key作为返回值返回}voidshow()//显示子程序{inti;printf("***进程名优先级运行时间状态***");printf("---------------8、----------------------------------");for(i=0;i
3、=100i=0i4、.runtimej=j+1输出提示show()getchar()j5、序#include"stdio.h"#include"string.h"intnum;structPCB{charname;//进程名intruntime;//要求运行时间intpri;//优先数charstate;//状态,R-就绪,F-结束};structPCBpcblist[100];//定义进程控制块数组voidinit()//PCB初始化子程序{inti;for(i=0;i6、pcblist[i].name,&pcblist[i].pri,&pcblist[i].runtime);pcblist[i].state='R';//进程初始状态均为就绪getchar();//接收回车符}}intmax_pri_process()//确定最大优先级进程子程序{intmax=-100;//max为最大优先数,初始化为-100inti;intkey;for(i=0;i7、st[i].pri&&pcblist[i].state=='R')//从就绪进程中选取优先数最大的进程{max=pcblist[i].pri;//max存放每次循环中的最大优先数key=i;//将进程号赋给key}}if(pcblist[key].state=='E')//具有最大优先数的进程若已运行完毕return-1;//则返回-1elsereturnkey;//将key作为返回值返回}voidshow()//显示子程序{inti;printf("***进程名优先级运行时间状态***");printf("---------------8、----------------------------------");for(i=0;i
4、.runtimej=j+1输出提示show()getchar()j5、序#include"stdio.h"#include"string.h"intnum;structPCB{charname;//进程名intruntime;//要求运行时间intpri;//优先数charstate;//状态,R-就绪,F-结束};structPCBpcblist[100];//定义进程控制块数组voidinit()//PCB初始化子程序{inti;for(i=0;i6、pcblist[i].name,&pcblist[i].pri,&pcblist[i].runtime);pcblist[i].state='R';//进程初始状态均为就绪getchar();//接收回车符}}intmax_pri_process()//确定最大优先级进程子程序{intmax=-100;//max为最大优先数,初始化为-100inti;intkey;for(i=0;i7、st[i].pri&&pcblist[i].state=='R')//从就绪进程中选取优先数最大的进程{max=pcblist[i].pri;//max存放每次循环中的最大优先数key=i;//将进程号赋给key}}if(pcblist[key].state=='E')//具有最大优先数的进程若已运行完毕return-1;//则返回-1elsereturnkey;//将key作为返回值返回}voidshow()//显示子程序{inti;printf("***进程名优先级运行时间状态***");printf("---------------8、----------------------------------");for(i=0;i
5、序#include"stdio.h"#include"string.h"intnum;structPCB{charname;//进程名intruntime;//要求运行时间intpri;//优先数charstate;//状态,R-就绪,F-结束};structPCBpcblist[100];//定义进程控制块数组voidinit()//PCB初始化子程序{inti;for(i=0;i6、pcblist[i].name,&pcblist[i].pri,&pcblist[i].runtime);pcblist[i].state='R';//进程初始状态均为就绪getchar();//接收回车符}}intmax_pri_process()//确定最大优先级进程子程序{intmax=-100;//max为最大优先数,初始化为-100inti;intkey;for(i=0;i7、st[i].pri&&pcblist[i].state=='R')//从就绪进程中选取优先数最大的进程{max=pcblist[i].pri;//max存放每次循环中的最大优先数key=i;//将进程号赋给key}}if(pcblist[key].state=='E')//具有最大优先数的进程若已运行完毕return-1;//则返回-1elsereturnkey;//将key作为返回值返回}voidshow()//显示子程序{inti;printf("***进程名优先级运行时间状态***");printf("---------------8、----------------------------------");for(i=0;i
6、pcblist[i].name,&pcblist[i].pri,&pcblist[i].runtime);pcblist[i].state='R';//进程初始状态均为就绪getchar();//接收回车符}}intmax_pri_process()//确定最大优先级进程子程序{intmax=-100;//max为最大优先数,初始化为-100inti;intkey;for(i=0;i7、st[i].pri&&pcblist[i].state=='R')//从就绪进程中选取优先数最大的进程{max=pcblist[i].pri;//max存放每次循环中的最大优先数key=i;//将进程号赋给key}}if(pcblist[key].state=='E')//具有最大优先数的进程若已运行完毕return-1;//则返回-1elsereturnkey;//将key作为返回值返回}voidshow()//显示子程序{inti;printf("***进程名优先级运行时间状态***");printf("---------------8、----------------------------------");for(i=0;i
7、st[i].pri&&pcblist[i].state=='R')//从就绪进程中选取优先数最大的进程{max=pcblist[i].pri;//max存放每次循环中的最大优先数key=i;//将进程号赋给key}}if(pcblist[key].state=='E')//具有最大优先数的进程若已运行完毕return-1;//则返回-1elsereturnkey;//将key作为返回值返回}voidshow()//显示子程序{inti;printf("***进程名优先级运行时间状态***");printf("---------------
8、----------------------------------");for(i=0;i
此文档下载收益归作者所有