先来先服务FCFS和短作业优先SJF进程调度算法_第1页
先来先服务FCFS和短作业优先SJF进程调度算法_第2页
先来先服务FCFS和短作业优先SJF进程调度算法_第3页
先来先服务FCFS和短作业优先SJF进程调度算法_第4页
先来先服务FCFS和短作业优先SJF进程调度算法_第5页
已阅读5页,还剩7页未读, 继续免费阅读

下载本文档

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

文档简介

1、实验一 先来先服务FCFS和短作业优先SJF进程调度算法班级:2013级软件3班 姓名:陈夏玲 学号:1325112005【实验目的】:通过这次实验,加深对进程概念的理解,进一步掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。【实验内容】1、需求分析(1) 输入的形式和输入值的范围;进程的个数num:大于0的整数进程的到达时间ArrivalTimei:大于等于0的整数进程的服务时间ServiceTimei; 大于0的整数(2) 输出的形式输出计算出来的每个进程的周转时间、带权周转时间、所有进程的平均周转时间以及带权平均周转时间。(3) 程序所能达到的功能;先来先服务FCFS和短作业优

2、先SJF分别调度进程运行,计算每个进程的周转时间和带权周转时间,并且计算所有进程的平均周转时间和带权平均周转时间(4) 测试数据,包括正确的输入及其输出结果和含有错误的输入及其输出结果。2、概要设计设计程序模拟进程的先来先服务FCFS和短作业优先SJF调度过程。假设有n个进程分别在T1, ,Tn时刻到达系统,它们需要的服务时间分别为S1, ,Sn。分别采用先来先服务FCFS和短作业优先SJF进程调度算法进行调度,计算每个进程的完成时间、周转时间和带权周转时间,并且统计n个进程的平均周转时间和平均带权周转时间。Ø 变量初始化;Ø 接收用户输入n,T1, ,Tn,S1, ,Sn

3、;算法选择1-FCFS,2-SJF;Ø 按照选择算法进行进程调度,计算进程的完成时间、周转时间和带权周转时间;Ø 计算所有进程的平均周转时间和平均带权周转时间;Ø 按格式输出调度结果。3、详细设计 2个算法void FCFS(int *ArrivalTime, int *ServiceTime, int num)int i = 0;int j = 0;int *FinishTime = new intnum;int *WholeTime = new intnum;double *WeightWholeTime = new doublenum;double Aver

4、ageWholeTime = 0;double AverageWeightWholeTime = 0;int lastFinishTime = 0;for (i = 0; i<num; i+)if (ArrivalTimei>lastFinishTime)FinishTimei = ArrivalTimei + ServiceTimei;elseFinishTimei = lastFinishTime + ServiceTimei;lastFinishTime = FinishTimei;WholeTimei = FinishTimei - ArrivalTimei;WeightW

5、holeTimei = WholeTimei / (double)ServiceTimei;cout << "完成时间为:" << endl;for (i = 0; i<num; i+)cout << FinishTimei << " "cout << endl;cout << "周转时间如下:" << endl;int allWholeTime = 0;for (i = 0; i<num; i+)allWholeTime = allWho

6、leTime + WholeTimei;cout << WholeTimei << " "cout << endl;AverageWholeTime = allWholeTime / (double)num;cout << "平均周转时间为:" << AverageWholeTime << endl;cout << "带权周转时间如下:" << endl;double allWeightWholeTime = 0;for (i = 0; i

7、<num; i+)allWeightWholeTime = allWeightWholeTime + WeightWholeTimei;cout << WeightWholeTimei << " "cout << endl;AverageWeightWholeTime = allWeightWholeTime / num;cout << "平均带权周转时间为:" << AverageWeightWholeTime << endl;cout << endl;void

8、SJF(int *ArrivalTime, int *ServiceTime, int num)int i = 0;int j = 0;bool *done = new boolnum;int *copyArrivalTime = new intnum;for (i = 0; i<num; i+)copyArrivalTimei = ArrivalTimei;int *copyServiceTime = new intnum;for (i = 0; i<num; i+)copyServiceTimei = ServiceTimei;for (i = 0; i<num; i+)

9、donei = false;int *FinishTime = new intnum;int *copyFinishTime = new intnum;int *WholeTime = new intnum;double *WeightWholeTime = new doublenum;double AverageWholeTime = 0;double AverageWeightWholeTime = 0;int lastFinishTime = 0;int tempTime = 0;int tempService = 0;cout << endl;for (i = 0; i&l

10、t;num; i+)if (i != 0)for (j = i; j<num; j+)if (copyServiceTimej<copyServiceTimei)if (copyArrivalTimej<lastFinishTime)tempTime = copyArrivalTimei;tempService = copyServiceTimei;copyArrivalTimei = copyArrivalTimej;copyServiceTimei = copyServiceTimej;copyArrivalTimej = tempTime;copyServiceTime

11、j = tempService;copyFinishTimei = lastFinishTime + copyServiceTimei;lastFinishTime = copyFinishTimei;cout << endl;for (i = 0; i<num; i+)for (j = 0; j<num; j+)if (ArrivalTimei = copyArrivalTimej)FinishTimei = copyFinishTimej;WholeTimei = FinishTimei - ArrivalTimei;WeightWholeTimei = Whole

12、Timei / (double)ServiceTimei;cout << "完成时间为:" << endl;for (i = 0; i<num; i+)cout << FinishTimei << " "cout << endl;cout << "周转时间如下:" << endl;int allWholeTime = 0;for (i = 0; i<num; i+)allWholeTime = allWholeTime + WholeTim

13、ei;cout << WholeTimei << " "cout << endl;AverageWholeTime = allWholeTime / (double)num;cout << "平均周转时间为:" << AverageWholeTime << endl;cout << "带权周转时间如下:" << endl;double allWeightWholeTime = 0;for (i = 0; i<num; i+)allWe

14、ightWholeTime = allWeightWholeTime + WeightWholeTimei;cout << WeightWholeTimei << " "cout << endl;AverageWeightWholeTime = allWeightWholeTime / num;cout << "平均带权周转时间为:" << AverageWeightWholeTime << endl;cout << endl;4、调试分析 (1)调试过程中遇到的问题以及

15、解决方法,设计与实现的回顾讨论和分析;发现程序老是只能执行一般 原因是 算法函数的结尾多加了一个while(1);虽然不知道为什么,但是解决了(2)经验和体会。程序老有错误解决不了时,我就觉的我电脑坏了5、用户使用说明照截图那样输入就行了 很好理解的,就算不理解,看到黑框框也理解了6、测试结果列出测试结果,包括输入和输出。7、附录#include "stdafx.h"#include <iostream>using namespace std;void main()void FCFS(int *ArrivalTime, int *ServiceTime, int

16、 num);void SJF(int *ArrivalTime, int *ServiceTime, int num);cout << "请输入进程的个数" << endl;int num;int i = 0;int j = 0;cin >> num;int *ArrivalTime = new intnum;int *ServiceTime = new intnum;cout << "请依次输入进程的到达时间" << endl;for (i = 0; i<num; i+)cin >

17、> ArrivalTimei;cout << "请依次输入进程的服务时间" << endl;for (i = 0; i<num; i+)cin >> ServiceTimei;int opt;char ch = 'y'docout << "请选择以下算法,输入序号.n"cout << "1: FCFS 先来先服务 2: SJF 短作业优先 3:quitn"cin >> opt;while (opt < 1 | opt > 3

18、)cout << "选项不存在,请重新选择.n"cin >> opt;switch (opt)case 1:cout << "FCFS算法" << endl;FCFS(ArrivalTime, ServiceTime, num);cout << endl;break;case 2:cout << "SJF算法" << endl;SJF(ArrivalTime, ServiceTime, num);break;case 3:break;cout <

19、< "是否继续(y/n) "cin >> ch;while (ch != 'y' && ch != 'n')cout << "选项不存在,请重新选择.n"cin >> ch; while (ch = 'y');/*cout << "FCFS算法" << endl;FCFS(ArrivalTime, ServiceTime, num);cout << endl;cout << &quo

20、t;SJF算法" << endl;SJF(ArrivalTime, ServiceTime, num)*/;while (1);void FCFS(int *ArrivalTime, int *ServiceTime, int num)int i = 0;int j = 0;int *FinishTime = new intnum;int *WholeTime = new intnum;double *WeightWholeTime = new doublenum;double AverageWholeTime = 0;double AverageWeightWholeT

21、ime = 0;int lastFinishTime = 0;for (i = 0; i<num; i+)if (ArrivalTimei>lastFinishTime)FinishTimei = ArrivalTimei + ServiceTimei;elseFinishTimei = lastFinishTime + ServiceTimei;lastFinishTime = FinishTimei;WholeTimei = FinishTimei - ArrivalTimei;WeightWholeTimei = WholeTimei / (double)ServiceTim

22、ei;cout << "完成时间为:" << endl;for (i = 0; i<num; i+)cout << FinishTimei << " "cout << endl;cout << "周转时间如下:" << endl;int allWholeTime = 0;for (i = 0; i<num; i+)allWholeTime = allWholeTime + WholeTimei;cout << WholeTime

23、i << " "cout << endl;AverageWholeTime = allWholeTime / (double)num;cout << "平均周转时间为:" << AverageWholeTime << endl;cout << "带权周转时间如下:" << endl;double allWeightWholeTime = 0;for (i = 0; i<num; i+)allWeightWholeTime = allWeightW

24、holeTime + WeightWholeTimei;cout << WeightWholeTimei << " "cout << endl;AverageWeightWholeTime = allWeightWholeTime / num;cout << "平均带权周转时间为:" << AverageWeightWholeTime << endl;cout << endl;void SJF(int *ArrivalTime, int *ServiceTime, int

25、 num)int i = 0;int j = 0;bool *done = new boolnum;int *copyArrivalTime = new intnum;for (i = 0; i<num; i+)copyArrivalTimei = ArrivalTimei;int *copyServiceTime = new intnum;for (i = 0; i<num; i+)copyServiceTimei = ServiceTimei;for (i = 0; i<num; i+)donei = false;int *FinishTime = new intnum;

26、int *copyFinishTime = new intnum;int *WholeTime = new intnum;double *WeightWholeTime = new doublenum;double AverageWholeTime = 0;double AverageWeightWholeTime = 0;int lastFinishTime = 0;int tempTime = 0;int tempService = 0;cout << endl;for (i = 0; i<num; i+)if (i != 0)for (j = i; j<num;

27、j+)if (copyServiceTimej<copyServiceTimei)if (copyArrivalTimej<lastFinishTime)tempTime = copyArrivalTimei;tempService = copyServiceTimei;copyArrivalTimei = copyArrivalTimej;copyServiceTimei = copyServiceTimej;copyArrivalTimej = tempTime;copyServiceTimej = tempService;copyFinishTimei = lastFinishTime + copyServiceTimei;lastFinishTime = copyFinishTimei;cout << endl;for (i = 0; i<num; i+)for (j = 0; j<num; j+)if (ArrivalTimei = copyArrivalTimej)FinishTimei = copyFinishTimej;WholeTimei = Finish

温馨提示

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

最新文档

评论

0/150

提交评论