欢迎来到天天文库
浏览记录
ID:20364833
大小:398.45 KB
页数:8页
时间:2018-10-12
《fcfs和sjf进程调度算法实验报告》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、FCFS和SJF进程调度算法实验报告【实验题目】:编写程序,实现FCFS和SJE算法,模拟作业调度过程,加深对作业调度的理解、【实验内容】实现FCFS和SJF调度算法。-数据结构设计(JCB,后备作业队列)-算法实现与模拟(排序、调度)-输出调度结果,展示调度过程并解释【实验要求】1.设计作、Ik控制块(JCB)的数据结构-应包含实验必须的数据项,如作业ID、耑要的服务吋间、进入系统时间、完成时间,以及实验秆认为有必要的其他数裾项。2.实现排序算法(将作业排队)-策略1:按“进入系统时间”对作业队列排序(FCFS)-策略2:按“需要的服务时叫”对作业队列排序(
2、SJF)3.实现调度过程模拟(1)毎个作业用一个JCB表示,如果模拟ECES,按策略1将作业排队,如果模拟SJF,按策略2将作业排队(2)选抒队首的作业,将其从后备队列移出(3)(作业运行过程,在本实验中,无需实现,可认为后备队列的作业一们.被调度程序选出,就顺利运行完毕,可以进入第4步)(4)计算选中作业的周转时闹(5)进行下一次调度(去往第2步)4.实现结果输出-输出作业状态农,展示调度过程•初始作业状态(未凋度时)•每次调度后的作业状态设计作业控制块(JCB)的数据结构每个作业由一个作业控制块JCB表示,JCB可以包含如下信S:作业名、捉交时间、所需的运
3、行时间、所蔣的资源、作业状态、链折针等等。具体结构如K:typcdefstructjcb{charname[10];/*作业名*/charstate;/*作业状态*/intts;/*提交时间*/floatsuper;/*优先权*/inttb;/*开始运行吋间*/inttc;/*完成时间*/floatti;/*周转时间*/floatwi;/*带权周转时间*/intntime;/*作业所需运行时间*/charresource[10]:/*所需资源*/structjeb*next;/*结构体指针*/}JCB;JCB*p,*tail=NULL,*head=NULL;作
4、业的状态可以是等待W(Wait)、运行K(Run)和完成F(Finish)三种状态之一。每个作业的最初状态总是等待,组成一个后备队列等待,总是首先调度等待队列中队首的作业。本实验采川链表的形式存放各后备队列当屮的作业控制块,各个等待的作业按照提交时刻的先后次序排队。当一个作业进入系统时,就为其动态建立一作业控制块(JCB),挂入后备队列尾部。当作业调度时,从后备队列中按某种调度算法选择一作业,让其:进入主存以便占用CPU执行。每个作业完成后耍打印该作业的开始运行吋刻、完成吋刻、周转吋间和带权周转吋间,这一组作业完成后要计算并打印这组作业的平均周转吋间、带权平均
5、周转吋M。程序代码:#include#include#defineNumber5voidmainO{intn;intdaoda[Number],fuwu[Number],i;cout〈〈"请依次输入各个进程的到达吋叫弁以空格叫隔:'for(i=0;i〈Number;i++){cin»daoda[i]:)COut〈〈"请依次输入各个进程的服务吋叫,弁以空格叫隔for(i=0;i〈Number;i++){cin»fuwu[i];)cout〈〈"请输入n=l选择FCFS或芯n=2选择SJF或芯n=3M吋调用FCFS和SJ
6、F,n=";cin»n;while(n7、8、n>3){cout<〈〃输入的n行谈,谴重新输入n,n=";cin>>n;)structstatcdd//声明结构{booldoneE,doneS;intdaoda,fuwu;floatwancheng,zhouzhuan,daiquan,wan,zhou,dai;>;stateddprocess[Number丨;//声明结构变靖,这甩力数组inttimeflyE=O,timeflyS=O;//定义两个类似于秒表的变量intj,k,1,nextproF,nextproS;//获取数裾for(i=0;i〈Number9、;i++)process[i].doneE=false;process[i].doneS=false;process[i].wancheng=0;process[i].zhouzhucin=0;processfi].daiquan=0;process[i].wan=0;process[i].zhou=0;proccss[i].dai=0;processfi].daoda=daoda[i];processfi].fuwu=fuwu[i];)//获取先到达的进程下标firstintfirst=0;1二first;for(i=l;i〈Number;i++){if(d10、aoda[first]>daoda[i
7、
8、n>3){cout<〈〃输入的n行谈,谴重新输入n,n=";cin>>n;)structstatcdd//声明结构{booldoneE,doneS;intdaoda,fuwu;floatwancheng,zhouzhuan,daiquan,wan,zhou,dai;>;stateddprocess[Number丨;//声明结构变靖,这甩力数组inttimeflyE=O,timeflyS=O;//定义两个类似于秒表的变量intj,k,1,nextproF,nextproS;//获取数裾for(i=0;i〈Number
9、;i++)process[i].doneE=false;process[i].doneS=false;process[i].wancheng=0;process[i].zhouzhucin=0;processfi].daiquan=0;process[i].wan=0;process[i].zhou=0;proccss[i].dai=0;processfi].daoda=daoda[i];processfi].fuwu=fuwu[i];)//获取先到达的进程下标firstintfirst=0;1二first;for(i=l;i〈Number;i++){if(d
10、aoda[first]>daoda[i
此文档下载收益归作者所有