操作系统 时间片轮转RR进程调算法 java版_第1页
操作系统 时间片轮转RR进程调算法 java版_第2页
操作系统 时间片轮转RR进程调算法 java版_第3页
操作系统 时间片轮转RR进程调算法 java版_第4页
操作系统 时间片轮转RR进程调算法 java版_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验二 间片轮转RR进程调度算法1、 实验目的通过这次实验,加深对进程概念的理解,进一步掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。2、 试验内容问题描述:设计程序模拟进程的时间片轮转RR调度过程。假设有n个进程分别在T1, ,Tn时刻到达系统,它们需要的服务时间分别为S1, ,Sn。分别利用不同的时间片大小q,采用时间片轮转RR进程调度算法进行调度,计算每个进程的完成时间、周转时间和带权周转时间,并且统计n个进程的平均周转时间和平均带权周转时间。3、 程序要求:1)进程个数n;每个进程的到达时间T1, ,Tn和服务时间S1, ,Sn;输入时间片大小q。2)要求时间片轮转法RR调

2、度进程运行,计算每个进程的周转时间和带权周转时间,并且计算所有进程的平均周转时间和带权平均周转时间;3)输出:要求模拟整个调度过程,输出每个时刻的进程运行状态,如“时刻3:进程B开始运行”等等;4)输出:要求输出计算出来的每个进程的周转时间、带权周转时间、所有进程的平均周转时间以及带权平均周转时间。4、 需求分析(1) 输入的形式和输入值的范围时间片真实进程数各进程的到达时间各进程的服务时间(2) 输出的形式模拟整个调度过程、周转时间、带权周转时间、所有进程的平均周转时间以及带权平均周转时间。(3)测试用例 作业情况时间片进程名ABCDE平均到达时间01234服务时间43524RRq=1完成时

3、间1210181117周转时间1291681311.6带权周转时间333.243.253.29RRq=4完成时间47181317周转时间461610139.8带权周转时间123.253.252.895、 调试分析由于自己自编写代码方面与他人有一定的差距,因此在做实验的过程中我在网上搜了很多相关的资料,了解实现该算法的原理及各部分实现的代码,同时参考了几个别人写好的源代码,然后自己在理解的基础上不断的根据要求修改写程序,不过其中碰见的很多的问题。我已经自己调了好多错误,在一遍遍的调试和修改中,发现自己的经验在快速增长,这个感觉真的很不错。然而,实验的运行结果还不是很完美,每个进程在最后一个时间片

4、的运行过程中,进程列表的更新总是修改错误。不过在在本次试验中学到了不少东西,一点点的在进步。6、 测试结果输入时间片,进程数,进程到达时间,服务时间输出输入时间片,进程数,进程到达时间,服务时间输出7、 附录(java)package experiment;import java.io.BufferedInputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.util.Scanner;public class B_RR / 声明变量/ 时间片public static

5、int q = 0;/ 允许的最大进程数public static int MaxNum = 100;/ 真正的进程数public static int realNum;/ order数组的一个下标public static int number;/ 当前时间public static int NowTime;/ 各进程的达到时间public static int ArrivalTime = new intMaxNum;/ 各进程的服务时间public static int ServiceTime = new intMaxNum;/ 各进程的服务时间(用于记录进程服务时间随时间片轮转减少的过程

6、)public static int PServiceTime = new intMaxNum;/ 各进程的完成时间public static int FinishTime = new intMaxNum;/ 各进程的周转时间public static int WholeTime = new intMaxNum;/ 进程调度队列(存放的是各个进程的数字代号,如进程A数字代号为1)public static int order = new intMaxNum;/ 各进程的带权周转时间public static double WeightWholeTime = new doubleMaxNum;/

7、 平均周转时间、平均带权周转时间public static double AverageWT, AverageWWT;/ 周转时间总和public static int SumWT = 0;/ 带权周转时间总和public static double SumWWT = 0;/ 进程是否已经结束的标志public static boolean Finished = new booleanMaxNum;public static Scanner stdin;public static void main(String args) throws FileNotFoundException / 从文件

8、中输入数据BufferedInputStream in = new BufferedInputStream(new FileInputStream("./file/02");System.setIn(in);stdin = new Scanner(System.in);q = stdin.nextInt(); / 时间片qrealNum = stdin.nextInt(); / 真实进程数for (int i = 0; i < realNum; i+) / 各进程的服务时间ArrivalTimei = stdin.nextInt();for (int j = 0; j

9、 < realNum; j+) / 各进程的服务时间ServiceTimej = stdin.nextInt();PServiceTimej = ServiceTimej; /用于记录进程服务时间随时间片轮转减少的过程Finishedj = false;stdin.close();int all_add = 1; /就绪队列中的进程个数order0 = 0; /进程调度队列(存放的是各个进程的数字代号,如进程A数字代号为1)number = 1;NowTime = 0; /现在时间while (order0 != 100) /order0为100,是认为规定进程调度结束的标志/ 调度程序

10、char w = 'A'System.out.println("时刻" + NowTime + ":进程" + (char)(w + order0) + "开始运行;");if (PServiceTimeorder0 > q) /进程还未完成PServiceTimeorder0 = PServiceTimeorder0 - q; /对应的进程的服务时间减去一个时间片NowTime += q; /现在时刻增加一个时间片System.out.println("时刻" + NowTime + &qu

11、ot;:进程" + (char)(w + order0) + "停止运行,加入就绪序列尾;"); else /进程剩一个时间片后结束NowTime += PServiceTimeorder0; /现在时间增加一个时间片PServiceTimeorder0 = 0; /对应进程的服务时间归零System.out.println("时刻" + NowTime + ":进程" + (char)(w + order0) + "运行结束;");FinishTimeorder0 = NowTime;WholeTime

12、order0 = NowTime - ArrivalTimeorder0;WeightWholeTimeorder0 = 1.0 * WholeTimeorder0 / ServiceTimeorder0;/ 将到达的程序加入序列尾if (all_add < realNum) for (int i = 1; i < realNum; i+) if (NowTime >= ArrivalTimei && Finishedi = false) /判断该进程是否已经在就绪队列中ordernumber+ = i;all_add+; Finishedi = true;/

13、 将序列首程序调到序列尾int temp = order0;for (int i = 0; i < number - 1; i+) /将order中的每个数前移一位orderi = orderi + 1;if (PServiceTimetemp = 0) /进程已将全部调度结束,通过将order的第一个数标记为100,来结束进程调度order-number = 100; else /进程还未调度结束ordernumber - 1 = temp;double all = 0, all1 = 0;for (int i = 0; i < realNum; i+) / 计算总周转时间和总带权周转时间all += WholeTimei;all1 += WeightWholeTimei;System.out.println("n进程名t到达时间t服务时间t完成时间t周转时间t带权周转时间");for (int i = 0; i < realNum; i+) System.out.println(char)(i + 'A') + "t" + ArrivalTimei + "t"+ ServiceTimei + "t" + FinishTimei + &quo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论