先来先服务FCFS和短作业优先SJF进程调度算法
- 格式:doc
- 大小:255.50 KB
- 文档页数:9
进程调度模拟算法进程调度是操作系统中的重要组成部分之一,它负责决定在多道程序环境下,哪个进程将获得CPU的使用权。
进程调度模拟算法是为了研究和评估不同调度策略的性能而开发的一种仿真方法。
在实际系统中,调度算法会受到多种因素的影响,如进程优先级、进程的I/O需求、进程的实际执行时间等。
通过模拟这些因素,可以更好地理解不同调度算法之间的差异,并选择最合适的算法来满足特定需求。
下面介绍两种常见的进程调度模拟算法:先来先服务(FCFS)和最短作业优先(SJF)算法。
1. 先来先服务(FCFS)算法:该算法按照进程到达的顺序来调度任务。
当一个进程完成或阻塞时,下一个已到达的进程将获得CPU的使用权。
这种算法非常简单,但是不适用于长作业时间和短作业时间交替出现的情况。
在短作业启动时,长作业仍然在运行,使得短作业的等待时间增加。
2. 最短作业优先(SJF)算法:该算法根据任务的执行时间来调度进程。
在该算法中,每个进程的执行时间都是已知的,并且操作系统根据已知的执行时间来决定哪个进程获得CPU的使用权。
在短作业优先算法中,短作业将会先被调度,这样有助于减少平均周转时间和等待时间。
但是,短作业优先算法容易产生“饥饿”现象,即长作业可能会一直等待,而短作业一直得到CPU的使用权。
除了以上两种算法,还有其他的进程调度模拟算法。
例如:- 时间片轮转(RR)调度算法:使用固定的时间片来调度进程,当时间片用完后,该进程被放入就绪队列的末尾。
- 优先级调度算法:每个进程都拥有一个优先级,优先级越高的进程越早被调度。
这种方法可以根据不同进程的紧迫程度和重要性来进行调度。
- 多级反馈队列调度算法:将就绪队列划分为多个队列,并根据进程的性质和优先级将进程放入不同的队列。
每个队列都有不同的优先级和时间片大小,进程可以通过提高优先级或时间片大小来提高被调度的机会。
在实际应用中,需要根据系统需求和性能指标选择合适的调度算法。
常用的性能指标包括平均周转时间、平均等待时间、CPU利用率等。
先来先服务FCFS和短作业优先SJF进程调度算法
先来先服务(FCFS)算法是最简单的一种进程调度算法。
它的原则是按照作业到达的顺序,将作业分配给处理器。
当一个作业到达系统后,它将占用处理器并运行,直到完成所有的工作。
在FCFS算法中,没有考虑作业的大小或者运行时间,所有的作业都按照到达的先后顺序进行处理。
FCFS算法的优点是实现简单,没有复杂的调度信息和数据结构的支持;缺点是对于长作业或者执行时间较长的作业来说,等待时间会很长,导致响应时间较慢,同时也会降低系统的吞吐量。
短作业优先(SJF)算法是一种根据作业的执行时间进行调度的算法。
它的原则是当一个作业到达系统后,系统将根据作业的执行时间,将处理器分配给执行时间最短的作业。
在SJF算法中,系统需要对每一个作业的执行时间进行估计,然后选择执行时间最短的作业。
SJF算法的优点是能够最大限度地减少作业的等待时间,提高系统的响应速度和吞吐量;缺点是需要对作业的执行时间进行准确的估计,而这往往是比较困难的。
如果估计不准确,可能会导致执行时间较长的作业一直等待,而执行时间较短的作业得到了优先处理。
总结起来,FCFS和SJF两种进程调度算法各有优缺点。
FCFS算法简单直观,但可能导致作业的等待时间较长;而SJF算法可以最大限度地减少作业的等待时间,但需要准确地估计作业的执行时间。
在实际使用中,可以根据作业的特点和系统的需求选择适合的调度算法。
同时,也可以考虑使用其他的调度算法,如时间片轮转、优先级调度等,来满足更复杂的任务调度需求。
常用的调度算法调度算法是指操作系统中用于决定进程何时执行、何时暂停等的一种算法。
常用的调度算法包括先来先服务(FCFS)、短作业优先(SJF)、优先级调度、时间片轮转等。
下面将对这些常用的调度算法进行详细介绍。
一、先来先服务(FCFS)先来先服务是最简单的调度算法之一,它按照进程到达的顺序进行调度,即谁先到谁先执行。
这种算法容易实现,但是存在“饥饿”现象,即如果某个进程长时间等待,则其他进程可能会一直占用CPU资源,导致该进程无法得到执行。
因此,在实际应用中,FCFS很少被使用。
二、短作业优先(SJF)短作业优先是一种以作业运行时间为依据的调度算法。
它通过预测每个进程需要运行的时间,并将其按照运行时间从小到大排序,然后依次执行。
这种算法可以最大限度地减少平均等待时间和平均周转时间,并且不会出现“饥饿”现象。
但是,在实际应用中,由于很难准确预测每个进程需要运行的时间,因此SJF也存在缺陷。
如果预测不准确,那么就会出现长作业等待短作业的情况,导致长作业的等待时间变长。
三、优先级调度优先级调度是一种按照进程优先级进行调度的算法。
每个进程都有一个优先级,系统会根据进程的优先级来决定下一个要执行的进程。
通常情况下,优先级越高的进程越有可能得到CPU资源。
但是,如果某个进程的优先级一直比其他进程高,那么其他进程就会一直等待,导致“饥饿”现象。
此外,在实际应用中,由于不同进程之间的优先级差别较大,因此可能会导致低优先级的进程长时间等待。
四、时间片轮转时间片轮转是一种按照时间片进行调度的算法。
它将CPU资源划分成若干个时间片,并将每个时间片分配给一个正在运行或等待运行的进程。
当一个进程用完了它所分配到的时间片后,系统会将其挂起,并将CPU资源分配给下一个等待运行的进程。
这种算法可以避免“饥饿”现象,并且能够保证所有正在运行或等待运行的进程都能够得到CPU资源。
但是,如果时间片太小,会导致进程频繁切换,影响系统性能;如果时间片太大,会导致长作业等待时间变长。
操作系统中常用作业调度算法的分析作业调度算法是操作系统中非常重要的一部分,它负责决定哪个进程应该被调度执行、以及在什么时候执行。
不同的作业调度算法会对系统的性能和资源利用率产生不同的影响,因此了解和分析常用的作业调度算法对于优化系统性能至关重要。
在操作系统中,常用的作业调度算法包括先来先服务(FCFS)、短作业优先(SJF)、最高响应比优先(HRRN)、优先级调度、轮转调度和多级反馈队列调度等。
下面对这些常见的作业调度算法进行详细分析。
1. 先来先服务(FCFS)先来先服务是最简单的作业调度算法之一,它按照作业到达的先后顺序来进行调度。
当一个作业到达系统后,系统会将其放入就绪队列,然后按照先来先服务的原则,依次执行队列中的作业。
FCFS算法的优点是实现简单、公平性好,但缺点也非常明显。
由于该算法没有考虑作业的执行时间,因此可能导致长作业等待时间过长,影响系统的响应时间和吞吐量。
2. 短作业优先(SJF)短作业优先算法是一种非抢占式作业调度算法,它会根据作业的执行时间来进行调度。
当一个作业到达系统后,系统会根据其执行时间与就绪队列中其他作业的执行时间进行比较,选取执行时间最短的作业进行执行。
SJF算法的优点是能够最大程度地减少平均等待时间,提高系统的响应速度和吞吐量。
但这种算法也存在缺陷,即当有长作业不断地进入系统时,可能导致短作业一直得不到执行,进而影响系统的公平性。
3. 最高响应比优先(HRRN)最高响应比优先算法是一种动态优先级调度算法,它根据作业的响应比来进行调度。
作业的响应比定义为(等待时间+服务时间)/ 服务时间,响应比越高的作业被优先调度执行。
HRRN算法的优点是能够最大程度地提高系统的响应速度,同时保持较高的公平性。
但由于需要不断地计算和更新作业的响应比,因此算法的复杂度较高。
4. 优先级调度优先级调度算法是一种静态优先级调度算法,它根据作业的优先级来进行调度。
每个作业在进入系统时就会被赋予一个优先级,系统会按照作业的优先级来决定执行顺序。
先来先服务FCFS和短作业优先SJF进程调度算法FCFS(先来先服务)算法是最简单的进程调度算法之一、它按照进程到达的顺序来分配CPU时间,即先到达的进程先执行。
在FCFS算法中,进程按照它们进入就绪队列的时间排序,随后按照就绪队列的顺序被调度执行。
FCFS算法不考虑进程的执行时间,也不会对进程进行任何优先级排序。
FCFS算法的优点是简单易懂,实现起来非常简单。
但是,FCFS算法有一个明显的缺点是不利于短进程的执行。
当一个长进程到达并占据CPU 资源时,短进程可能要等待很长时间才能执行。
这种情况下,CPU的利用率会较低,响应时间也会较长。
因此,FCFS算法适用于进程的执行时间相对较短且没有明显的优先级关系的场景。
SJF(短作业优先)算法是根据进程的执行时间进行优先级排序的进程调度算法。
在SJF算法中,短进程将会优先执行,而长进程需等待。
当一个进程到达就绪队列时,系统会根据其估计的执行时间大小将其插入到就绪队列的适当位置。
当前执行的进程完成后,下一个执行的是就绪队列中估计执行时间最短的进程。
SJF算法的优点是能够减少平均等待时间,提高系统整体的吞吐量。
由于短进程占用CPU时间较少,因此能够更快地释放CPU资源给其他进程使用,从而减少等待时间。
然而,SJF算法存在一个问题是如何准确估计进程的执行时间。
在实际场景中,准确估计进程的执行时间是很困难的,因此SJF算法很容易出现估计错误,导致长进程等待时间过长。
总结来说,FCFS和SJF都是进程调度算法,但它们有不同的特点和适用场景。
FCFS算法简单易懂,适用于进程执行时间相对较短且没有明显优先级的场景;而SJF算法适用于进程执行时间有较大差异的场景,能够减少平均等待时间。
然而,SJF算法对进程的执行时间要求较高,需要准确估计执行时间,否则可能导致长进程等待时间过长。
在实际应用中,通常会根据具体情况选择不同的调度算法。
例如,在交互式系统中,为了提供更好的用户体验,使用SJF算法能够减少响应时间;而在批处理系统中,FCFS算法通常被用于处理较短的作业。
关于作业调度算法作业调度算法是指在计算机系统中对作业进行合理安排和调度的一种方法。
作业调度算法的目标是优化系统资源的利用,提高作业的响应时间和吞吐量,提高系统的整体性能。
在实际应用中,作业调度算法起着至关重要的作用。
作业调度算法有很多种,每种算法都有其适用的场景和特点。
下面将介绍几种常见的作业调度算法。
1.先来先服务(FCFS)算法:先来先服务算法是通过按照作业到达的顺序进行调度的算法。
简单来说,就是按照作业提交的先后顺序进行调度。
这种算法的特点是简单、公平,但是对于作业的响应时间和系统的吞吐量效果较差。
2.短作业优先(SJF)算法:短作业优先算法是根据作业的执行时间进行调度的算法。
它的原理是,执行时间短的作业能够更快地完成,从而能够提高系统的响应时间和吞吐量。
然而,这种算法容易导致长作业等待时间过长,从而影响长作业的执行效率。
3.最高响应比优先(HRRN)算法:最高响应比优先算法是根据作业的等待时间和执行时间的比值进行调度的算法。
它的原理是,等待时间长的作业和执行时间短的作业都有更高的响应比,因此优先调度等待时间长的作业。
这种算法能够兼顾作业的响应时间和系统的吞吐量。
4.时间片轮转(RR)算法:时间片轮转算法是指将CPU的执行时间分成多个时间片,每个时间片的长度固定,作业按照时间片的顺序进行调度。
当作业的执行时间超过一个时间片时,将被放入一个等待队列,并在下一个时间片重新调度。
这种算法能够保证每个作业都能获得一定的执行时间,但不能很好地兼顾作业的响应时间。
5.最短剩余时间(SRT)算法:最短剩余时间算法是在短作业优先算法的基础上进行优化得到的。
在该算法中,系统会根据当前作业的执行时间和剩余执行时间来选择下一个要执行的作业。
这种算法能够更加准确地估计作业的完成时间,从而提高系统的响应时间和吞吐量。
除了以上几种常见的作业调度算法,还有很多其他的算法可以根据系统的特点和需求进行选择和优化,如最短作业优先(SJN)算法、优先级调度算法、多级反馈队列调度算法等。
操作系统实验_先来先服务的调度算法及短作业优先1.引言操作系统的调度算法是指在多进程环境中,操作系统为进程分配CPU 的顺序和策略。
先来先服务(FCFS)调度算法是最简单的调度算法之一,它按照进程到达的顺序为其分配CPU。
而短作业优先(SJF)调度算法是根据进程的执行时间来为其分配CPU,执行时间越短的进程越先执行。
本文将分别介绍FCFS调度算法和SJF调度算法,并对其进行评价和比较。
2.先来先服务(FCFS)调度算法2.1调度原理FCFS调度算法的原理非常简单,按照进程到达的顺序为其分配CPU。
当一个进程进入就绪队列后,如果CPU空闲,则立即为其分配CPU。
如果CPU正忙,则进程进入等待队列,等待CPU空闲后再分配。
在该算法中,进程的运行时间不考虑,只考虑进程到达的时间。
2.2优点与缺点FCFS调度算法的主要优点是实现简单,无需对进程的运行时间进行估计。
但FCFS算法存在一定的缺点。
首先,长作业在短作业前面等待的时间较长,可能导致长作业的响应时间过长。
其次,如果有一个进程出现阻塞或响应时间过长,其后面的进程也会受到影响,造成整个系统的性能下降。
3.短作业优先(SJF)调度算法3.1调度原理短作业优先(SJF)调度算法是根据进程的执行时间来为其分配CPU。
当一个进程进入就绪队列后,如果其执行时间比当前正在运行的进程短,则优先为该进程分配CPU。
如果当前没有运行的进程或者当前运行的进程执行完毕,则立即为该进程分配CPU。
在该算法中,进程的到达时间不考虑,只考虑进程的执行时间。
3.2优点与缺点SJF调度算法的主要优点是可以最大程度地减少平均等待时间,提高系统的吞吐量。
短作业可以快速执行完毕,从而让更多的作业得以执行。
但SJF算法存在一定的缺点。
首先,需要对进程的执行时间有一个准确的估计,对于实时系统或动态系统来说,估计执行时间可能会有一定的误差。
其次,在长作业激增的情况下,短作业可能会一直得不到CPU的分配,造成长时间的等待。
先来先服务FCFS和短作业优先SJF进程调度算法1、实验目的通过这次实验,加深对进程概念的理解,进一步掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。
2、需求分析(1) 输入的形式和输入值的范围输入值:进程个数Num 范围:0<Num<=100依次输入Num个进程的到达时刻范围:依次输入Num个进程的服务时刻范围:输入要使用的算法(1-FCFS,2-SJF)范围:1或者2(2) 输出的形式(X表示变量)时刻X:进程X开始运行。
其完成时刻:X 周转时刻:X 带权周转时刻:X…(省略(Num-1)个)平均周转时刻:X平均带权周转时刻:X(3) 程序所能达到的功能输入进程个数Num,每个进程到达时刻ArrivalTime[i],服务时刻ServiceTime[i]。
采纳先来先服务FCFS或者短作业优先SJF进程调度算法进行调度,计算每个进程的完成时刻、周转时刻和带权周转时刻,同时统计Num个进程的平均周转时刻和平均带权周转时刻。
3、概要设计讲明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。
4、详细设计5、调试分析(1)调试过程中遇到的问题以及解决方法,设计与实现的回忆讨论和分析○1开始的时候没有推断进程是否到达,导致短进程优先算法运行结果错误,后来加上了推断语句后就解决了改问题。
○2差不多完成的设计所要实现的功能,总的来讲,FCFS编写容易,SJF需要先找到差不多到达的进程,再从差不多到达的进程里找到进程服务时刻最短的进程,再进行计算。
(2)算法的改进设想改进:即使用户输入的进程到达时刻没有先后顺序也能准确的计算出结果。
(确实是再加个循环,推断各个进程的到达时刻先后,组成一个有序的序列)(3)经验和体会通过本次实验,深入理解了先来先服务和短进程优先进程调度算法的思想,培养了自己的动手能力,通过实践加深了经历。
6、用户使用讲明(1)输入进程个数Num(2)依次输入Num个进程的到达时刻(3)依次输入Num个进程的服务时刻(4)选择要使用的算法7、测试结果正确一(FCFS):正确一(SJF):正确二(FCFS):正确二(SJF):错误(进程个数错误):错误(选择算法错误):8、附录//***************************************************** **************//** 进程调度算法 BY:09软件工程二班李群**//***************************************************** **************#include<iostream>#include<iomanip>using namespace std;static const int Max=100;int ArrivalTime[Max];//到达时刻int ServiceTime[Max];//服务时刻int FinishTime[Max];//完成时刻int WholeTime[Max];//周转时刻double WeightWholeTime[Max];//帯权周庄时刻double AverageWT_FCFS,AverageWT_SJF; //平均周转时刻double AverageWWT_FCFS,AverageWWT_SJF;//平均帯权周转时刻int ServiceTime_SJF[Max];//在SJF算法中使用到int Num=0;int NowTime=0;//记录当前时刻double SumWT=0,SumWWT=0;//SumWT用来计算总的周转时刻,SumWWT用来计算总的帯权周转时刻int i;int choice;//记录选择//***************************************************** *************// 先到先服务算法//***************************************************** *************void FCFS()//找最早到达的。
5种进程调度算法进程调度算法是操作系统中的重要组成部分,用于确定哪个进程将获得CPU的使用权。
根据不同的算法,进程可以以不同的顺序运行,并根据优先级、运行时间、等待时间等因素进行调度。
本文将介绍和分析五种常见的进程调度算法,包括先来先服务(FCFS)、最短作业优先(SJF)、高响应比优先(HRRN)、轮转调度(RR)和多级反馈队列调度(MFQ)。
1.先来先服务(FCFS)先来先服务是最简单的进程调度算法,按照进程到达的顺序分配CPU片段。
当一个进程执行完成或者遇到I/O请求时,CPU被分配给下一个进程。
该算法简单直观,但可能导致长作业等待时间增加,且无法满足实时性要求。
2.最短作业优先(SJF)最短作业优先调度算法根据预计的执行时间为进程分配CPU时间。
在所有就绪队列中,选择执行时间最短的进程。
该算法可以最大程度地减少平均等待时间,但需要准确预测进程的执行时间,而实际中很难精确估计。
3.高响应比优先(HRRN)高响应比优先是一个动态优先级调度算法,根据进程等待时间的长度为进程分配CPU时间。
等待时间越长,优先级越高。
因此,较长等待的进程将获得更多的处理时间,以保证公平性。
该算法在处理短作业时效果较好,但容易导致无限等待。
4.轮转调度(RR)轮转调度算法按照轮询的方式为每个进程分配固定的时间片,通常为几十毫秒。
当时间片用尽时,进程将被暂停,下一个进程得到时间片。
该方法保证了公平性,但对于长时间的进程,可能会浪费大量的CPU时间在进程切换上。
5.多级反馈队列调度(MFQ)多级反馈队列调度算法将进程划分为多个队列,根据进程特性和优先级的不同,为每个队列分配不同的时间片或优先级。
当进程进入就绪队列时,首先进入最高优先级的队列,若运行时间超过时间片,则移入下一级队列。
该算法综合了前几种算法的优点,可以同时满足长短作业的需求。
通过对这五种进程调度算法的介绍和分析,我们可以看到每种算法都有其优点和缺点。
选择适合的进程调度算法取决于系统的需求和特定场景的要求。
先来先服务FCFS和短作业优先SJF进程调度算法【实验题目】:先来先服务FCFS和短作业优先SJF进程调度算法通过这次实验,加深对进程概念的理解,进一步掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。
【实验内容】问题描述:设计程序模拟进程的先来先服务FCFS和短作业优先SJF调度过程。
假设有n个进程分别在T1, …,T n时刻到达系统,它们需要的服务时间分别为S1, … ,S n。
分别采用先来先服务FCFS和短作业优先SJF 进程调度算法进行调度,计算每个进程的完成时间,周转时间和带权周转时间,并且统计n个进程的平均周转时间和平均带权周转时间。
【实验要求】要求如下:1)进程个数n;每个进程的到达时间T1, …,T n和服务时间S1, … ,S n;选择算法1-FCFS,2-SJF。
2)要求采用先来先服务FCFS和短作业优先SJF分别调度进程运行,计算每个进程的周转时间,带权周转时间,并且计算所有进程的平均周转时间,带权平均周转时间;3)输出:要求模拟整个调度过程,输出每个时刻的进程运行状态,如“时刻3:进程B开始运行”等等;4)输出:要求输出计算出来的每个进程的周转时间,带权周转时间,所有进程的平均周转时间,带权平均周转时间。
程序代码:#include<iostream.h>#include<iomanip.h>#define Number 5void main(){int n;int daoda[Number],fuwu[Number],i;cout<<"请依次输入各个进程的到达时间并以空格间隔:";for(i=0;i<Number;i++){cin>>daoda[i];}cout<<"请依次输入各个进程的服务时间,并以空格间隔:";for(i=0;i<Number;i++){cin>>fuwu[i];}cout<<"请输入n=1选择FCFS或者n=2选择SJF或者n=3同时调用FCFS 和SJF,n=";cin>>n;while(n<1||n>3){cout<<"输入的n有误,请重新输入n,n=";cin>>n;}struct statedd //声明结构{bool doneF,doneS;int daoda,fuwu;float wancheng,zhouzhuan,daiquan,wan,zhou,dai;};statedd process[Number];//声明结构变量,这里为数组int timeflyF=0,timeflyS=0;//定义两个类似于秒表的变量int j,k,l,nextproF,nextproS;// 获取数据for(i=0;i<Number;i++){process[i].doneF = false;process[i].doneS = false;process[i].wancheng = 0;process[i].zhouzhuan = 0;process[i].daiquan = 0;process[i].wan = 0;process[i].zhou = 0;process[i].dai =0;process[i].daoda = daoda[i];process[i].fuwu = fuwu[i];}// 获取最先到达的进程下标firstint first=0;l=first;for(i=1;i<Number;i++){if(daoda[first]>daoda[i])first=i;}process[first].doneF=true;process[first].doneS=true;process[first].wancheng = process[first].fuwu + process[first].daoda;process[first].wan = process[first].fuwu + process[first].daoda;timeflyF += process[first].daoda+process[first].fuwu;timeflyS += process[first].daoda+process[first].fuwu;// 接下去到达的进程//************************************************************* // fcfs ******************************************************** for(j=1;j<Number;j++){nextproF = Number+1;for(k =0 ; k<Number; k++ ){if( !process[k].doneF ){if( process[k].daoda <= timeflyF ) // 到达{if( nextproF ==Number+1)nextproF = k;else{if( process[nextproF].daoda > process[k].daoda )nextproF = k; //获取到达时刻最先的进程}//else}//if2}//if1}//for// 处理process[nextproF].wancheng = process[nextproF].fuwu + timeflyF;timeflyF += process[nextproF].fuwu;process[nextproF].doneF=true;} // circle2// SJF **********************************************for(j=1;j<Number;j++){nextproS = Number+1;for(k=0 ; k<Number; k++ ){if(!process[k].doneS){if( process[k].daoda <= timeflyS ) // 到达{if( nextproS ==Number+1 )nextproS = k;else{if( process[nextproS].fuwu > process[k].fuwu )nextproS = k; //获取服务时间最小的进程}//else}//if2}//if1}//for// 处理process[nextproS].wan = process[nextproS].fuwu + timeflyS;timeflyS += process[nextproS].fuwu;process[nextproS].doneS=true;} // circle2//**************************************************************** float Fz=0,Fdq=0,Sz=0,Sdq=0;//for(i=0;i<Number;i++){ //----------------------------------------------------process[i].zhouzhuan=process[i].wancheng-process[i].daoda;Fz += process[i].zhouzhuan;process[i].daiquan=process[i].zhouzhuan/process[i].fuwu;Fdq += process[i].daiquan;//----------------------------------------------------process[i].zhou=process[i].wan-process[i].daoda;Sz += process[i].zhou;process[i].dai=process[i].zhou/process[i].fuwu;Sdq += process[i].dai;}//=========================输出==================================//-------------------------------------------------------------------if(n==1||n==3){cout<<"\t"<<endl;cout<<"FCFS:"<<endl;for(i=0;i<Number;i++){if(i<1){cout<<"时刻"<<l<<":进程"<<i+1<<"在运行"<<endl;}else{cout<<"时刻"<<process[i-1].wancheng<<":进程"<<i+1<<"在运行"<<endl;}}cout<<setw(10)<<"进程ID"<<" ";cout<<setw(10)<<"完成时间"<<" ";cout<<setw(10)<<"周转时间"<<" ";cout<<setw(10)<<"带权周转时间"<<" "<<endl;for(i=0;i<Number;i++){cout<<setw(10)<<i+1<<" ";cout<<setw(10)<<setiosflags(ios::fixed)<<setprecision(2)<<process[i].wanc heng<<" ";cout<<setw(10)<<setiosflags(ios::fixed)<<setprecision(2)<<process[i].zhouz huan<<" ";cout<<setw(10)<<setiosflags(ios::fixed)<<setprecision(2)<<process[i].daiqu an<<" "<<endl;}cout<<"平均周转时间为:"<<setiosflags(ios::fixed)<<setprecision(2)<<Fz/Number<<endl;cout<<"平均带权周转时间为:"<<setiosflags(ios::fixed)<<setprecision(2)<<Fdq/Number<<endl;}//-------------------------------------------------------------------if(n==2||n==3){cout<<"\t"<<endl;cout<<"SJF:"<<endl;for(i=0;i<Number;i++){if(i<1){cout<<"时刻"<<l<<":进程"<<i+1<<"在运行"<<endl;}else{cout<<"时刻"<<process[i-1].wan<<":进程"<<i+1<<"在运行"<<endl;}}cout<<setw(10)<<"进程ID"<<" ";cout<<setw(10)<<"完成时间"<<" ";cout<<setw(10)<<"周转时间"<<" ";cout<<setw(10)<<"带权周转时间"<<" "<<endl;for(i=0;i<Number;i++){cout<<setw(10)<<i+1<<" ";cout<<setw(10)<<setiosflags(ios::fixed)<<setprecision(2)<<process[i].wan< <" ";cout<<setw(10)<<setiosflags(ios::fixed)<<setprecision(2)<<process[i].zhou< <" ";cout<<setw(10)<<setiosflags(ios::fixed)<<setprecision(2)<<process[i].dai<< " "<<endl;}cout<<"平均周转时间为:"<<setiosflags(ios::fixed)<<setprecision(2)<<Sz/Number<<endl;cout<<"平均带权周转时间为:"<<setiosflags(ios::fixed)<<setprecision(2)<<Sdq/Number<<endl;cout<<"\t"<<endl;}}实例截图:五个进程,到达时间分别为0,1,3,4,6服务时间分别为5,7,3,8,2设置选择量n,当n=1时,选择FCFS当n=2时,选择SJF当n=3时,同时分别调用FCFS和SJFn不为1或2或3时提示错误,重新输入n;1-FCFS 算法2-SJF算法3同时调用FCFS和SJF。