欢迎来到天天文库
浏览记录
ID:38374134
大小:63.00 KB
页数:4页
时间:2019-06-11
《进程调度算法设计实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、进程调度算法的设计一、实验题目:实现先来先服务调度算法(FCFS)实现时间片轮转调度算法(RR)二、实验目的:通过对进程调度算法的设计,深入理解进程调度的原理。进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。进程调度分配处理机,是控制协调进程对CPU的竞争,即按一定的调度算法从就绪队列中选中一个进程,把CPU的使用权交给被选中的进程。三、实验原理:1.先来先服务(FCFS)调度算法每次调度是从就绪队列中,选择一个最先进入就绪队列的进程,把处理器分配给该进程,使之得到执行。该进程一旦占有了处理器,它就一直
2、运行下去,直到该进程完成或因发生事件而阻塞,才退出处理器。将用户作业和就绪进程按提交顺序或变为就绪状态的先后排成队列,并按照先来先服务的方式进行调度处理,是一种最普遍和最简单的方法。它优先考虑在系统中等待时间最长的作业,而不管要求运行时间的长短按照就绪进程进入就绪队列的先后次序进行调度,简单易实现,利于长进程,CPU繁忙型作业,不利于短进程,排队时间相对过长2.时间片轮转调度算法RR时间片轮转法主要用于进程调度。采用此算法的系统,其程序就绪队列往往按进程到达的时间来排序。进程调度按一定时间片(q)轮番运行各个进程.进程按到达时间在就绪
3、队列中排队,调度程序每次把CPU分配给就绪队列首进程使用一个时间片,运行完一个时间片释放CPU,排到就绪队列末尾参加下一轮调度,CPU分配给就绪队列的首进程。四、数据结构:数组五、程序代码:packagesufa;importjava.util.Arrays;importjava.util.Scanner;publicclassDispatch{publicstaticvoidmain(String[]args){intslice=1;//时间片System.out.println("请输入要创建的进程数目:");Scannerrea
4、der=newScanner(System.in);intnum=reader.nextInt();//用户要输入的进程数Process1arr[]=newProcess1[num];//创建多个进程System.out.println("请分别输入进程的名称、到达时间以及区间时间");for(inti=0;i5、的进程的到达时间System.out.println("-----开始进入FCFS算法-----");System.out.println(""+"arrtime"+""+"burstime"+""+"overtime"+""+"周转时间");for(inti=0;i6、arrtime;//计算进程的周转时间System.out.println("进程"+arr[i].id+"开始运行"+"t"+arr[i].arrtime+"t"+arr[i].bursttime+"t"+arr[i].overtime+"t"+arr[i].turnovertime);}intcount=arr.length;System.out.println("-----开始进入RR算法-----");System.out.println(""+"lasttime");while(count>0){for(inti=07、;i0){//如果剩余区间还有时间arr[i].bursttime=arr[i].bursttime-slice;//每循环运行一次就减去时间片,并打印下面语句System.out.println("进程"+arr[i].id+"开始运行"+"t"+arr[i].bursttime);}if(arr[i].bursttime==0)count--;//当有某个进程的剩余时间为0的时候,count进行减1,当count减到等于0时,即每个进程都没有剩余时间了,就8、不再运行了}}}}classProcess1implementsComparable{intid;//进程名称intarrtime;//到达时间intbursttime;//区间时间intovertime;//结束时间d
5、的进程的到达时间System.out.println("-----开始进入FCFS算法-----");System.out.println(""+"arrtime"+""+"burstime"+""+"overtime"+""+"周转时间");for(inti=0;i6、arrtime;//计算进程的周转时间System.out.println("进程"+arr[i].id+"开始运行"+"t"+arr[i].arrtime+"t"+arr[i].bursttime+"t"+arr[i].overtime+"t"+arr[i].turnovertime);}intcount=arr.length;System.out.println("-----开始进入RR算法-----");System.out.println(""+"lasttime");while(count>0){for(inti=07、;i0){//如果剩余区间还有时间arr[i].bursttime=arr[i].bursttime-slice;//每循环运行一次就减去时间片,并打印下面语句System.out.println("进程"+arr[i].id+"开始运行"+"t"+arr[i].bursttime);}if(arr[i].bursttime==0)count--;//当有某个进程的剩余时间为0的时候,count进行减1,当count减到等于0时,即每个进程都没有剩余时间了,就8、不再运行了}}}}classProcess1implementsComparable{intid;//进程名称intarrtime;//到达时间intbursttime;//区间时间intovertime;//结束时间d
6、arrtime;//计算进程的周转时间System.out.println("进程"+arr[i].id+"开始运行"+"t"+arr[i].arrtime+"t"+arr[i].bursttime+"t"+arr[i].overtime+"t"+arr[i].turnovertime);}intcount=arr.length;System.out.println("-----开始进入RR算法-----");System.out.println(""+"lasttime");while(count>0){for(inti=0
7、;i0){//如果剩余区间还有时间arr[i].bursttime=arr[i].bursttime-slice;//每循环运行一次就减去时间片,并打印下面语句System.out.println("进程"+arr[i].id+"开始运行"+"t"+arr[i].bursttime);}if(arr[i].bursttime==0)count--;//当有某个进程的剩余时间为0的时候,count进行减1,当count减到等于0时,即每个进程都没有剩余时间了,就
8、不再运行了}}}}classProcess1implementsComparable{intid;//进程名称intarrtime;//到达时间intbursttime;//区间时间intovertime;//结束时间d
此文档下载收益归作者所有