欢迎来到天天文库
浏览记录
ID:52684351
大小:673.85 KB
页数:7页
时间:2020-03-29
《动态高优先权优先.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、《操作系统》课程实验报告实验名称:动态高优先权优先调度班级:****************学号:*************姓名:**************指导老师:***************成绩:一、实验目的:1.测试数据可以随即输入或从文件中读入。2.必须要考虑到作业的到达时间3.最终能够计算每一个作业的周转时间。。二、实验内容:模拟实现动态高优先权优先(若数值越大优先权越高,每运行一个时间单位优先权-n,若数值越小优先权越高,没运行一个时间单位优先权+n),具体如下:设置作业体:作业名,作业的到达时间,服务时间,初始优先权,作业状态(W——等待,R——运行,
2、F——完成),作业间的链接指针作业初始化:由用户输入作业名、服务时间、初始优先权进行初始化,同时,初始化作业的状态为W。显示函数:在作业调度前、调度中和调度后进行显示。排序函数:对就绪状态的作业按照优先权排序。优先权相同时进入等待队列时间早的作业在前。注意考虑到达时间调度函数:每次从等待队列队首调度优先权最高的作业执行,状态变化。并在执行一个时间单位后优先权变化,服务时间变化,状态变化。当服务时间为0时,状态变为F。删除函数:撤销状态为F的作业。三、实验代码#include#include#includetype
3、defstructPCB2{charname[10];//进程名intruntime;//要求运行时间intfrist;//定义优先数charzhuangtai;//定义状态,R为就绪,F为完成};structPCB2PCBcontrol[4];//定义进程控制块数组voidyouxian()//构造优先函数{inti,n;printf("请输入进程的个数:");scanf("%d",&n);printf("请输入进程的名字、优先权、运行时间");printf("");for(i=0;i4、);scanf("%s%d%d",&PCBcontrol[i].name,&PCBcontrol[i].frist,&PCBcontrol[i].runtime);PCBcontrol[i].zhuangtai='R';//进程初始状态均为就绪getchar();//等待回车进入下一次运行}}intmax_frist_process()//确定最大优先级进程子程序{intmax=-10;//max为最大优先数,初始化为-10inti,key;for(i=0;i<5;i++){if(PCBcontrol[i].zhuangtai=='r')//r表示正在运行return-5、1;//返回-1elseif(max6、前状态");printf("*****************************************");for(i=0;i<5;i++)//依次显示每个进程的名、优先数、要求运行时间和状态{printf("%st%dt%dt%st",&PCBcontrol[i].name,PCBcontrol[i].frist,PCBcontrol[i].runtime,&PCBcontrol[i].zhuangtai);}printf("请按回车键进行查看");}voidrun()//进程运行子程序{inti,j;intt=0;//t为运行次数fo7、r(j=0;j<5;j++){t+=PCBcontrol[j].runtime;}//运行次数即为各个进程运行时间之和printf("进程没运行前,当前的状态是:");show();//调用show()子程序显示运行前PCB的情况getchar();//等待回车进入下一次运行for(j=0;j
4、);scanf("%s%d%d",&PCBcontrol[i].name,&PCBcontrol[i].frist,&PCBcontrol[i].runtime);PCBcontrol[i].zhuangtai='R';//进程初始状态均为就绪getchar();//等待回车进入下一次运行}}intmax_frist_process()//确定最大优先级进程子程序{intmax=-10;//max为最大优先数,初始化为-10inti,key;for(i=0;i<5;i++){if(PCBcontrol[i].zhuangtai=='r')//r表示正在运行return-
5、1;//返回-1elseif(max6、前状态");printf("*****************************************");for(i=0;i<5;i++)//依次显示每个进程的名、优先数、要求运行时间和状态{printf("%st%dt%dt%st",&PCBcontrol[i].name,PCBcontrol[i].frist,PCBcontrol[i].runtime,&PCBcontrol[i].zhuangtai);}printf("请按回车键进行查看");}voidrun()//进程运行子程序{inti,j;intt=0;//t为运行次数fo7、r(j=0;j<5;j++){t+=PCBcontrol[j].runtime;}//运行次数即为各个进程运行时间之和printf("进程没运行前,当前的状态是:");show();//调用show()子程序显示运行前PCB的情况getchar();//等待回车进入下一次运行for(j=0;j
6、前状态");printf("*****************************************");for(i=0;i<5;i++)//依次显示每个进程的名、优先数、要求运行时间和状态{printf("%st%dt%dt%st",&PCBcontrol[i].name,PCBcontrol[i].frist,PCBcontrol[i].runtime,&PCBcontrol[i].zhuangtai);}printf("请按回车键进行查看");}voidrun()//进程运行子程序{inti,j;intt=0;//t为运行次数fo
7、r(j=0;j<5;j++){t+=PCBcontrol[j].runtime;}//运行次数即为各个进程运行时间之和printf("进程没运行前,当前的状态是:");show();//调用show()子程序显示运行前PCB的情况getchar();//等待回车进入下一次运行for(j=0;j
此文档下载收益归作者所有