2022年操作系统短作业优

上传人:新** 文档编号:567491099 上传时间:2024-07-20 格式:PDF 页数:10 大小:147.75KB
返回 下载 相关 举报
2022年操作系统短作业优_第1页
第1页 / 共10页
2022年操作系统短作业优_第2页
第2页 / 共10页
2022年操作系统短作业优_第3页
第3页 / 共10页
2022年操作系统短作业优_第4页
第4页 / 共10页
2022年操作系统短作业优_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《2022年操作系统短作业优》由会员分享,可在线阅读,更多相关《2022年操作系统短作业优(10页珍藏版)》请在金锄头文库上搜索。

1、先来先服务 FCFS 和短作业优先 SJF进程调度算法1、实验目的通过这次实验, 加深对进程概念的理解, 进一步掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。2、需求分析(1) 输入的形式和输入值的范围输入值:进程个数 Num 范围:0Num=100 依次输入 Num 个进程的到达时间范围:依次输入 Num 个进程的服务时间范围:输入要使用的算法( 1-FCFS ,2-SJF) 范围:1或者2 (2) 输出的形式( X表示变量)时刻X:进程 X开始运行。其完成时间: X 周转时间: X 带权周转时间:X (省略( Num-1 )个)平均周转时间: X 平均带权周转时间: X (3)

2、 程序所能达到的功能输入进程个数 Num,每个进程到达时间 ArrivalTimei ,服务时间ServiceTimei。采用先来先服务 FCFS或者短作业优先 SJF进程调度算法进行调度,计算每个进程的完成时间、周转时间和带权周转时间,并且统计 Num个进程的平均周转时间和平均带权周转时间。3、概要设计名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 10 页 - - - - - - - - - 说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层

3、次(调用) 关系。4、详细设计5、调试分析 (1) 调试过程中遇到的问题以及解决方法,设计与实现的回顾讨论和分析1开始的时候没有判断进程是否到达,导致短进程优先算法运行结果错误,后来加上了判断语句后就解决了改问题。2基本完成的设计所要实现的功能,总的来说,FCFS 编写容易,SJF需要先找到已经到达的进程, 再从已经到达的进程里找到进程服务时间最短的进程,再进行计算。 (2) 算法的改进设想改进:即使用户输入的进程到达时间没有先后顺序也能准确的计算出结果。(就是再加个循环,判断各个进程的到达时间先后,组成一个有序的序列)(3) 经验和体会通过本次实验,深入理解了先来先服务和短进程优先进程调度算

4、法的思想,培养了自己的动手能力,通过实践加深了记忆。6、用户使用说明(1)输入进程个数 Num 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 10 页 - - - - - - - - - (2)依次输入 Num 个进程的到达时间(3)依次输入 Num 个进程的服务时间(4)选择要使用的算法7、测试结果正确一( FCFS ):正确一( SJF):名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理

5、- - - - - - - 第 3 页,共 10 页 - - - - - - - - - 正确二( FCFS ):名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 10 页 - - - - - - - - - 正确二( SJF):8、附录/* /* 进程调度算法 BY:09软件工程二班李群 * /* #include #include using namespace std; static const int Max=100; int ArrivalTimeMax;/到达时

6、间int ServiceTimeMax;/服务时间int FinishTimeMax;/完成时间int WholeTimeMax;/周转时间double WeightWholeTimeMax;/帯权周庄时间double AverageWT_FCFS,AverageWT_SJF; /平均周转时间double AverageWWT_FCFS,AverageWWT_SJF;/平均帯权周转时间int ServiceTime_SJFMax;/在SJF算法中使用到int Num=0; int NowTime=0;/记录当前时间double SumWT=0,SumWWT=0;/SumWT用来计算总的周转时间

7、,SumWWT用来计算总的帯权周转时间int i; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 10 页 - - - - - - - - - int choice;/记录选择/* / 先到先服务算法/* void FCFS()/找最早到达的。 cout-endl; cout-FCFS-endl; cout-endl; for(i=0;iNowTime)/假如进程到达的时间比现在已经运行的时间NowTime 大,说明在NowTime 时刻进程未到达 NowTime=Ar

8、rivalTimei;/把进程的到达时间赋给NowTime NowTime+=ServiceTimei;/把进程的服务时间加到NowTime 上FinishTimei=NowTime;/计算完成时间WholeTimei=FinishTimei-ArrivalTimei;/计算周转时间 =完成时间 - 到达时间WeightWholeTimei=(double)WholeTimei/ServiceTimei;/计算带权周转时间=周转时间/ 服务时间SumWT+=WholeTimei;/ 计算总的周转时间SumWWT+=WeightWholeTimei;/ 计算总的帯权周转时间 AverageWT_

9、FCFS=SumWT/Num;/ 平均周转时间AverageWWT_FCFS=SumWWT/Num;/平均帯权周转时间for(i=0;iNum;i+)/依次输出结果 cout 时刻 FinishTimei-ServiceTimei: 进程 i+1 开始运行。 其完成时间: FinishTimei 周转 时间: WholeTimeisetprecision(3) 帯权 周转 时间:WeightWholeTimeisetprecision(3)endl; cout 平均周转时间: AverageWT_FCFSendl; cout 平均帯权周转时间:AverageWWT_FCFSendl; /* /

10、 短进程优先算法/* void SJF()/找已经到达的且服务时间最短的进程(假定输入的进程是按照到达时间先后输入的) cout-endl; cout-SJF-endl; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 10 页 - - - - - - - - - cout-endl; int min=0; NowTime=ArrivalTime0+ServiceTime0;/计算第一次的 NowTIme FinishTime0=NowTime;/计算第一个进程的完成时间

11、ServiceTime_SJF0=1000;/赋初值。cout 时刻 FinishTime0-ServiceTime0: 进程 1 开始运行。 ; int allin=0,j,k; for(i=1;iNum;i+)/进入循环,从第二个到达的进程开始 k=1;min=0; if(allin=0)/找到已经到达的进程个数 j=0; while(ArrivalTimej=NowTime & j=Num) allin=1; else j=Num; j=j-1;/j是已经到达的进程数while(kServiceTime_SJFk)/比较,找到服务时间最短的进程min=k; k+; ServiceTime

12、_SJFmin=0;/找完后置零,便于下一次循环时使用NowTime+=ServiceTimemin;/累加当前时间FinishTimemin=NowTime;/完成时间 for(i=0;iNum;i+)/计算周转时间,带权周转时间,总的周转时间和总的带权周转时间 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 10 页 - - - - - - - - - WholeTimei=FinishTimei-ArrivalTimei; WeightWholeTimei=(dou

13、ble)WholeTimei/ServiceTimei; SumWT+=WholeTimei; SumWWT+=WeightWholeTimei; AverageWT_SJF=SumWT/Num;/ 平均周转时间AverageWWT_SJF=SumWWT/Num;/平均带权周转时间cout 其完成时间: FinishTime0 周转时间: WholeTime0setprecision(3) 帯权周转时间: WeightWholeTime0setprecision(3)endl; for(i=1;iNum;i+)/输出结果 cout 时刻 FinishTimei-ServiceTimei: 进程

14、 i+1 开始运行。 其完成时间: FinishTimei 周转 时间: WholeTimeisetprecision(3) 帯权 周转 时间:WeightWholeTimeisetprecision(3)endl; cout 平均周转时间: AverageWT_SJFendl; cout 平均帯权周转时间:AverageWWT_SJFendl; /* / 输入函数/* void input() coutNum; while(Num100|Num=0) coutNum; cout-endl; for(i=0;iNum;i+) cout 请输入第 i+1ArrivalTimei; cout-en

15、dl; for(i=0;iNum;i+) int data=0; cout 请输入第 i+1data; ServiceTimei=data; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 10 页 - - - - - - - - - ServiceTime_SJFi=data; cout-endl; coutchoice; /* / 主函数/* void main() cout*endl; cout* 进程调度算法 BY:09软件工程二班李群 *endl; cout*e

16、ndl; char flag=y; Loop: NowTime=0;SumWT=0;SumWWT=0;/参数初始化 input();/输入if(choice=1) FCFS();/调用 FCFS 算法else if(choice=2) SJF();/调用 SJF算法else/输入有误,则重新选择 while(1) cout 您的选择有误 !请重新选择 !endl; coutchoice; if(choice=1) FCFS(); break; else if(choice=2) SJF(); break; coutendlflag; if(flag=y | flag=Y) goto Loop; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 10 页 - - - - - - - - -

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号