OS短作业优先调度算法C语言_第1页
OS短作业优先调度算法C语言_第2页
OS短作业优先调度算法C语言_第3页
OS短作业优先调度算法C语言_第4页
OS短作业优先调度算法C语言_第5页
免费预览已结束,剩余8页可下载查看

下载本文档

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

文档简介

1、采用短作业优先调度算法调度程序学号:姓名:专业:指导老师:日期:一、实验题目3二、课程设计的目的3三、设计内容3四、设计要求3五、主要数据结构及其说明4六、程序运行结果5七、流程图7八、源程序文件9九、实验体会13十、参考文献13摘要在多道程序环境下,主存中有着多个进程,其数目往往多于处理机数目。这就要求系统能按某种算法,动态地把处理机分配给就绪队列中的一个进程,使之执行。分配处理机的任务是由处理机调度程序完成的。由于处理机是最重要的计算机资源,提高处理机的利用率及改善系统性能(吞吐量、响应时间),在很大程度上取决于处理机调度性能的好坏,因而,处理机调度便成为操作系统设计的中心问题之一。在多道

2、程序系统中,一个作业被提交后必须经过处理机调度后,方能获得处理机执行。对于批量型作业而言,通常需要经历作业调度和进程调度两个过程后方能获得处理机。作业调度是对成批进入系统的用户作业,根据作业控制块的信息,按一定的策略选取若干个作业使它们可以去获得处理器运行的一项工作。而对每个用户来说总希望自己的作业的周转时间是最小的,短作业优先(SJF)便是其中一种调度方法。本次课程设计主要是模拟短作业优先(SJF)调度算法。采用短作业优先算法的的进程调度程序二、课程设计的目的操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合一起,独立分析和解决实际

3、问题的机会。进一步巩固和复习操作系统的基础知识。培养学生结构化程序、模块化程序设计的方法和能力。提高学生调试程序的技巧和软件设计的能力。提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。三、设计内容设计并实现一个采用短作业优先算的进程调度算法演示程序四、设计要求1,每一个进程有一个PCB,其内容可以根据具体情况设定。2.进程数、进入内存时间、要求服务时间、优先级等均可以在界面上设定3,可读取样例数据(要求存放在外部文件中)进行进程数、进入内存时间、时间片长度、进程优先级的初始化4,可以在运行中显示各进程的状态:就绪、执行(由于不要求设置互斥资源与进程间同步关系,故只有两种状态)5

4、,采用可视化界面,可在进程调度过程中随时暂停调度,查看当前进程的状态以及相应的阻塞队列五、主要数据结构及其说明算法的基本概念和原理:本次课程设计主要是采用短作业优先算法进程的进程调度过程。短作业优先调度算法,是指对短作业或短进程优先调度的算法。他们可以分别用于作业调度和进程调度,短作业优先的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将他们调入内存运行。而短进程优先调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给他,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再度重新调度。本程序采用了非抢占式短作业优先调度。而非抢占式这种方式,一旦把处

5、理机分配给某进程后,便让该进程一直执行,直至该进程完成或发生某事件而被阻塞时,才再把处理机分配给其它进程,决不允许某进程抢占已经分配出去的处理机。这种调度方式的优点是实现简单,系统开销小,适用于大多数的批处理系统环境。但它难以满足紧急任务的要求一一立即执行,因而可能造成难以预料的后果。因此,在要求比较严格的实时系统中,不宜采用这种调度方式。本课程设计主要是在满足要求多道单处理机的情况下进行短作业的优先调度。算法的简要说明:短作业(进程)优先调度算法SJ(P)F,是指对短作业或短进程优先调度的算法。它们可以分别用于作业调度和进程调度。短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估

6、计运行时间最短的作业,将它们调入内存运行。而短进程(SPF)调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机再重新调度。优点是SJ(P)F调度算法能有效地降低作业(进程)的平均等待时间,提高系统吞吐量。缺点是该算法对长作业不利;完全未考虑作业的紧迫程度,因而不能保证紧迫性作业(进程)长期不被调度;由于作业(进程)的长短只是根据用户所提供的估计执行时间而定的,而用户又可能会有意或无意地缩短其作业的估计运行时问,致使该算法不一定能真正做到短作业游戏那调度。该程序定义了一个进程数据块(structProcess_)

7、该数据块有进程名(name)、到达时间(arrivetime)、服务时间(servicetime)、开始执行时间(starttime)、完成时间(finishtime)、周转时间(zztime)、带权周转时间(dqzztime)、执行顺序(order)。用到的公式有:完成时间=到达时间+服务时间;周转时间=完成时间+到达时间;带权周转时间=周转时间/服务时间;(第一次执行的进程的完成时间二该进程的到达时间;下一个进程的开始执行时间=上一个进程的完成时间)。运行进程的顺序需要对进程的到达时间和服务时间进行比较。如果某一进程是从0时刻到达的,那么首先执行该进程;之后就比较进程的服务时间,谁的服务时

8、间短就先执行谁(如果服务时间相同则看它们的到达时间,到达时间短的先执行);如果到达时问和服务时间相同,则按先来先服务算法执行。六、程序运行结果1进入操作界面如下C:DOCUMEHTS,SETTINGSADIINISTRATOR、桌面LKQzDebugz.exen|x噜用短作业优先XKK*XKK*XKK*XKK*XKK*XKK*XKK*XKK*XXK*XXK*XXK*XXK*X2输入进程的信息* 1使用短作业优先* 0退出*11111XlllIWlliW11111117X11II1111'111111111111务进程用短作业优先调度.请输入进程个数:53各时刻进程的状态函C:DOCUI

9、EKTSAUDSETTISGSADIHriSTRATORffiLSQzDebuEYx1使用短作业优先0退出务进程用短作业优先调度口请输入进程个数;5箸输入到达时间:请输入服务时间工4内人一T进隹:人进程名旅、输入到达时间:请输入服务时间:3请输入到达时间:卷输入服务时间:3请输入到达时间=3请输入服务时间:2请掇入一个进程:请辎入进程名就e请输入到达时间:请输入服务时间二24进程信息匚%"C:DOCU1EHTSAffDSETTIBGSADIINISTRATOR®LXQzDebuEz_exe"进程名称到达T运行T开始运行T结束T执行顺序周转T0带权周转1Q.0000

10、001:a12i313:b2134200.0000004:c3246306.0000006:d4268466.0000008:&43B1150-0.000000average_turn_i»ouind_timcr=3.600000weight_avei*age_tupn_i'ound_time产-L.766667Pressan9keytocontinue.5平均带权周转时间界面Cvei*age_tuvn_Foumd_tiner=J.b/修修bififht_average_turn_round_timer=l.766667七、流程图本次课程设计主要是通过比较各个进程的优

11、先级以及各进程所需要占用的CPU寸间来确定哪个作业优先运行,短作业优先调度算法除了能保证优先级更高的作业优先运行外,还能使相同优先级的前提下,所需CPU寸间最短的那个作业优先运行,次外,本次课程设计还增加了阻塞时间和被阻塞时间来对个进程的运行加以控制。此次课程设计的总体流程图如下:八、源程序文件#include<iostream>#defineMaxNum100usingnamespacestd;structProcess_structintNumber;/进程编号charNameMaxNum;进程名称intArrivalTime;到达时间intServiceTime;开始运行时间

12、intFinishTime;运行结束时间intWholeTime;/运行时间intrun_flag;/调度标志intorder;/运行次序doubleWeightWholeTime;/周转时间doubleAverageWT_FCFS,AverageWT_SJF;/平均周转时间doubleAverageWWT_FCFS,AverageWWT_SJF;平均带权周转时间ProcessMaxNum;intN;/实际进程个数intSJF();/短作业优先intSJF()/短作业优先算法inttemp_time=0;当期那时间inti=0,j;intnumber_schedul,temp_counter;

13、/进程编号,当前已执行进程个数floatrun_time;run_time=Processi.WholeTime;j=1;while(j<N)&&(Processi.ArrivalTime=Processj.ArrivalTime)判断是否有两个进程同时到达if(Processj.WholeTime<Processi.WholeTime)run_time=Processi.WholeTime;i=j;j+;/查找下一个被调度的进程/对找到的下一个被调度的进程求相应的参数number_schedul=i;Processnumber_schedul.ServiceTim

14、e=Processnumber_schedul.ArrivalTime;Processnumber_schedul.FinishTime=Processnumber_schedul.ServiceTime+Processnumber_schedul.WholeTime;Processnumber_schedul.run_flag=1;temp_time=Processnumber_schedul.FinishTime;Processnumber_schedul.order=1;temp_counter=1;while(temp_counter<N).for(j=0;j<N;j+)i

15、f(Processj.ArrivalTime<=temp_time)&&(!Processj.run_flag)run_time=Processj.WholeTime;number_schedul=j;break;for(j=0;j<N;j+)if(Processj.ArrivalTime<=temp_time)&&(!Processj.run_flag)if(Processj.WholeTime<run_time)run_time=Processj.WholeTime;number_schedul=j;/查找下一个被调度的进程/对找到的

16、下一个被调度的进程求相应的参数Processnumber_schedul.ServiceTime=temp_time;Processnumber_schedul.FinishTime=Processnumber_schedul.ServiceTime+Processnumber_schedul.WholeTime;Processnumber_schedul.run_flag=1;temp_time=Processnumber_schedul.FinishTime;temp_counter+;Processnumber_schedul.order=temp_counter;return0;int

17、Pinput();/进程参数输入intPoutput();/调度结果输出voidmain()intoption;printf("*主菜单*n");printf("1使用短作业优先*n");printf("*n");printf("*/system("cls");system("color1f");scanf("%d",&option);switch(option)case0:printf("运行结束。n");break;case1:pri

18、ntf("对进程用短作业优先调度。nn");Pinput();SJF();Poutput();break;intPinput()/进程参数输入inti;printf("请输入进程个数:n");scanf("%d",&N);for(i=0;i<N;i+)printf("*n");printf("请输入一个进程:n",i+1);printf("请输入进程名称:n");scanf("%s",Processi.Name);printf("请

19、输入到达时间:n");scanf("%d”,&Processi.ArrivalTime);printf("请输入服务时间:n");scanf("%d",&Processi.WholeTime);Processi.ServiceTime=0;Processi.FinishTime=0;Processi.WeightWholeTime=0;Processi.order=0;Processi.run_flag=0;system("cls");return0;intPoutput()/调度结果输出inti;

20、floatturn_round_time=0,f1,w=0;printf("诩加名称到达T运行T开始运行T结束T执行顺序周转T带权周转Tn");for(i=0;i<N;i+)Processi.WeightWholeTime=Processi.FinishTime-Processi.ArrivalTime;f1=Processi.WeightWholeTime/Processi.WholeTime;turn_round_time+=Processi.WeightWholeTime;w+=f1;printf("时亥1J%d:",Processi.Ser

21、viceTime,Processi.Name);printf("%s%d%d%d%d%d%f%fn",Processi.Name,Processi.ArrivalTime,Processi.WholeTime,Processi.ServiceTime,Processi.FinishTime,Processi.order,Processi.WeightWholeTime,f1);printf("average_turn_round_timer=%fn",turn_round_time/N);printf("weight_average_turn_round_timer=%fn",w/N);return0;九、实验体会通过本次课程设计,使我对计算机操作系统短作业优先调度算法这一节的知识有了更深的了解。短作业优先调度算法易

温馨提示

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

评论

0/150

提交评论