作业调度和低级调度算法2

合集下载

计算机windows操作系统调度

计算机windows操作系统调度

9.0 9.2 0.2 1.0
4
9:10 0.1 0.1 9.2 9.3 0.2 2.0
2
• 任一调度算法要想同时满足上述目标是 不可能的:
1)如要想吞吐量大,调度算法就应选择那些 估计执行时间短的作业。这对那些估计执 行时间长的作业不公平,并且可能使它们 的得不到调度执行或响应时间很长。
2)如果考虑的因素过多,调度算法就会变得 非常复杂。其结果是系统开销增加,资源 利用率下降。
衡量调度策略的常用指标
• 周转时间:指将一个作业提交给计算机系统 后到该作业的结果返回给用户所需要的时间。
• 吞吐量:指在给定的时间内,一个计算机系 统所完成的总工作量(作业数)。
• 响应时间:指从用户向计算机发出一个命令 到计算机把相应的执行结果返回给用户所需 要的时间。
• 设备利用率:输入输出设备的使用情况,在 有些要求I/O处理能力强(如管理信息系统)的 系统中,高的设备利用率也是一个衡量调度 策略好坏的重要指标。
时间片轮转程序调度算法 (RR)
把CPU划分成若干时间片,并且按顺序赋给就绪 队列中的每一个进程,进程轮流占有CPU,当 时间片用完时,即使进程未执行完毕,系统 也剥夺该进程的CPU,将该进程排在就绪队列 末尾。同时系统选择另一个进程运行
本算法主要用于微观调度,说明怎样并发运行,即切换 的方式;设计目标是提高资源利用率。
2 短作业优先(Shortest Job first,SJF)方式
选择那些估计需要执行时间最短的作业投入执 行,为它们创建进程和分配资源。有可能使 得那些长作业永远得不到调度执行
3 响应比高者优先( Highest Response-ratio Next , HRN)方式
• 响应比R=(W+T)/T=1+W/T T:为估计需要的执行时间 W:在后备状态队列中的等待时间 T+W:响应时间

处理机调度算法的比较

处理机调度算法的比较

处理机调度算法的比较计算机科学学院计算机科学与技术2009摘要:处理机调度基本概念、调度算法优劣的评价准则、多种处理机调度算法的介绍引言操作系统是处理计算机硬件的一层软件和作为计算机用户与计算机硬件的中间的协调者。

操作系统的CPU调度器负责给各个任务分发CPU带宽资源。

调度算法负责管理当前执行任务等额顺序和性能3 内容:3.1 处理机调度的基本概念高/中/低级调度1. 高级调度(作业调度)决定把外存上处于后备队列中的哪些作业调入内存,并为它们创建进程、分配必要的资源,准备执行。

2. 低级调度(进程调度)决定就绪队列中的哪个进程应获得处理机,然后再由分派程序执行把处理机分配给该进程的具体操作。

非抢占方式和抢占方式3. 中级调度决定把又具备运行条件的挂起进程重新调入内存,挂到就绪队列上,准备执行。

3.2 调度算法优劣的评价准则衡量和比较调度算法性能优劣主要有一下几个因素:(1)CPU利用率。

CPU是计算机系统中最重要的资源,所以应尽可能使CPU保持忙,使这一资源利用率最高。

(2)吞吐量。

CPU运行时表示系统正处于工作状态,工作量的大小是以每单位时间所完成的作业数目来描述的,这就叫吞吐量。

(3)周转时间。

指从作业提交到作业完成所经过的时间,包括作业等待,在就绪队列中排队,在处理机上运行以及进行输入/输出操作所花时间的总和。

(4)等待时间。

处理机调度算法实际上并不影响作业执行或输入/输出操作的时间,只影响作业在就绪队列中等待所花的时间。

因此,衡量一个调度算法优劣常常简单的考察等待时间。

(5)响应时间。

指从作业提交到系统作出相应所经过的时间。

在交互式系统中,作业的周转时间并不一定是最好的衡量准则,因此,常常使用另一种度量准则,即相应时间。

从用户观点看,响应时间应该快一点好,但这常常要牺牲系统资源利用率为代价。

(6)公平性——确保每个用户每个进程获得合理的 CPU 份额或其他资源份额,不会出现饿死情况。

当然,这些目标本身就存在着矛盾之处,操作系统在设计时必须根据其类型的不同进行权衡,以达到较好的效果。

作业调度算法的选择原则

作业调度算法的选择原则

作业调度算法的选择原则作业调度是操作系统中的重要组成部分,选择合适的作业调度算法直接影响到系统的性能和资源利用率。

在选择作业调度算法时,需要考虑多个方面,包括资源利用率、响应时间、公平性、优先级、系统开销、稳定性、可扩展性以及简单易用性。

1.资源利用率资源利用率是衡量作业调度算法的重要指标之一。

高效的作业调度算法应该能够最大限度地利用系统资源,包括CPU、内存、磁盘和网络等资源。

资源利用率越高,系统的性能和吞吐量就越好。

2.响应时间响应时间是衡量作业调度算法性能的另一个重要指标。

响应时间越短,用户感受到的系统响应就越快,从而提高了用户体验。

因此,在选择作业调度算法时,应优先考虑能够缩短响应时间的算法。

3.公平性公平性是指作业调度算法对所有用户和进程的平等处理能力。

一个好的作业调度算法应该能够公平地分配系统资源,确保所有用户和进程都能得到合理的服务。

4.优先级优先级是指作业调度算法根据任务的重要性和紧急性对任务进行排序的能力。

在选择作业调度算法时,应该考虑如何根据任务的优先级来合理地安排任务的执行顺序,以确保重要和紧急的任务能够优先得到处理。

5.系统开销系统开销是指作业调度算法的运行成本,包括CPU时间、内存消耗以及磁盘I/O等。

在选择作业调度算法时,需要考虑这些开销对系统性能的影响,并尽量选择开销较小的算法。

6.稳定性稳定性是指作业调度算法在长期运行过程中的可靠性。

一个好的作业调度算法应该具有较高的稳定性,以确保系统在长时间运行过程中保持稳定可靠。

7.可扩展性可扩展性是指作业调度算法在处理大规模任务时的性能表现。

在选择作业调度算法时,需要考虑系统的规模和增长趋势,选择能够适应系统规模增长和扩展的算法。

8.简单易用性最后,简单易用性也是选择作业调度算法时需要考虑的因素之一。

简单的算法通常更容易理解和实现,也更容易进行维护和优化。

因此,在满足上述指标的前提下,应尽量选择简单易用的算法。

操作系统——作业调度

操作系统——作业调度

操作系统——作业调度实验⼆作业调度模拟程序⼀、⽬的和要求 1. 实验⽬的 (1)加深对作业调度算法的理解; (2)进⾏程序设计的训练。

2.实验要求 ⽤⾼级语⾔编写⼀个或多个作业调度的模拟程序。

单道批处理系统的作业调度程序。

作业⼀投⼊运⾏,它就占有计算机的⼀切资源直到作业完成为⽌,因此调度作业时不必考虑它所需要的资源是否得到满⾜,它所运⾏的时间等因素。

作业调度算法: 1) 采⽤先来先服务(FCFS)调度算法,即按作业到达的先后次序进⾏调度。

总是⾸先调度在系统中等待时间最长的作业。

2) 短作业优先 (SJF) 调度算法,优先调度要求运⾏时间最短的作业。

3) 响应⽐⾼者优先(HRRN)调度算法,为每个作业设置⼀个优先权(响应⽐),调度之前先计算各作业的优先权,优先数⾼者优先调度。

RP (响应⽐)=作业周转时间 / 作业运⾏时间=1+作业等待时间/作业运⾏时间每个作业由⼀个作业控制块JCB表⽰,JCB可以包含以下信息:作业名、提交(到达)时间、所需的运⾏时间、所需的资源、作业状态、链指针等等。

作业的状态可以是等待W(Wait)、运⾏R(Run)和完成F(Finish)三种之⼀。

每个作业的最初状态都是等待W。

⼀、模拟数据的⽣成 1.允许⽤户指定作业的个数(2-24),默认值为5。

2. 允许⽤户选择输⼊每个作业的到达时间和所需运⾏时间。

3.(**)从⽂件中读⼊以上数据。

4.(**)也允许⽤户选择通过伪随机数指定每个作业的到达时间(0-30)和所需运⾏时间(1-8)。

⼆、模拟程序的功能 1.按照模拟数据的到达时间和所需运⾏时间,执⾏FCFS, SJF和HRRN调度算法,程序计算各作业的开始执⾏时间,各作业的完成时间,周转时间和带权周转时间(周转系数)。

2. 动态演⽰每调度⼀次,更新现在系统时刻,处于运⾏状态和等待各作业的相应信息(作业名、到达时间、所需的运⾏时间等)对于HRRN算法,能在每次调度时显⽰各作业的响应⽐R情况。

太原理工大学操作系统-第三章处理机调度与死锁分析

太原理工大学操作系统-第三章处理机调度与死锁分析

统 都要经历4个状态:提交、后备(收容)、执行和完成。
1)提交状态:通过终端设备向计算机的磁盘输入作业信息 时所处的状态。
第 2)后备状态:作业的全部信息已输入到磁盘的一个专用区
三 (输入井)中等待作业调度时所处的状态。

处 3)执行状态:在后备作业队列中的作业一旦被作业调度程
理 序选中,为它分配了必要的资源,并且建立了进程, 开始处


6

作 系
二、调度队列模型

1. 仅有进程调度的调度队列模型
时间片完
第 交互用户














就绪 队列 阻塞队列
进程调度
进程完成 CP U
等待事件
仅具有进程调度的调度队列模型
7

作 2. 具有高级和低级调度的调度队列模型


作业
时间 片完
调度
后备队列
就绪 队 列
进程 调度
进程 完成 CP U
锁 不宜采用这种调度方式。
4

作 系
2)抢占式调度方式

当重要或紧迫的进程一到,便把正在执行的进程占
有的处理机强行剥夺下来,并转给这个优先级比它更高
的重要或紧迫的就绪进程,使其运行。

三 章
抢占的原则:

(1) 优先权原则
理 机
(2) 短作业(进程)优先原则
调 度
(3) 时间片原则



5

作 系
第 行的进程继续执行,直到该进程完成任务终止运行或发生某

2016___操作系统处理器调度

2016___操作系统处理器调度

JCB的主要内容包括: (1)作业情况 (2)资源需求 (3)资源使用情况 (4)作业控制 (5)作业类型
作业调度与进程调度的关系
SPOOLin g作业预 输入 输 入 状 态 预输 入完 成 进程调度 后 备 状 态 就 绪 等 待 完
运 行
成 状 态
SPOOLin g作业缓 输出
作业调度(选 中并创建进程)
作业控制
作业调度(作 业终止并撤离)
3)批作业的调度
(1) 选择作业: (2) 分配资源: (3) 创建进程: (4) 作业控制: (5) 后续处理:
2 交互作业的组织和管理
• 分时系统的作业就是用户的一次上机交互过程, 可认为终端进程的创建是一个交互型作业的开始, 退出命令运行结束代表用户交互型作业的中止。 • 交互作业的情况和资源需求通过操作命令告知系 统,分时用户逐条输入命令,即提交作业(步) 和控制作业运行,系统则逐条执行并给出应答, 每键入一条或一组有关操作命令,便在系统内部 创建一个进程或若干进程来完成相应命令。 • 键盘命令有:作业控制类;资源申请类;文件操 作类;目录操作类;设备控制类等。
响应比定义
响应比 =(等待时间 + 要求执行时间) / 要求 执行时间=1+等待时间/要求执行时间 •短作业容易得到较高响应比, •长作业等待时间足够长后,也将获得足 够高的响应比, •饥饿现象不会发生。
HRRF算法举例
四个作业到达系统时间/所需CPU时间:作业1-0/20, 作业2-5/15,作业3-10 /5,作业4- 15/ 10。 • SJF调度顺序为作业1、3、4、2,平均作业周转时 间T=25, 平均带权作业周转时间W=2.25 。 • FCFS调度顺序为作业1、2、3、4,平均作业周转 时 间 T=28.75 , 平 均 带 权 作 业 周 转 时 间 W=3.125 。 • HRRF 调度顺序为作业 1 、 3 、 2 、 4 ,平均作业周 转 时 间 T=26.25 , 平 均 带 权 作 业 周 转 时 间 W=2.46 。

低级调度,中级调度,高级调度的区别

低级调度,中级调度,高级调度的区别

低级调度,中级调度,高级调度的区别低级调度、中级调度、高级调度是计算机操作系统中的重要概念,用于提供有效的任务管理和资源调度,以保证系统的高效运行。

这三种调度策略主要在任务优先级,调度时间和调度数量等方面存在差异。

下面我们将分别从这三个角度来详细介绍低级调度、中级调度、高级调度的区别。

首先,低级调度也称为进程调度,是针对就绪队列中的进程进行调度的一种策略。

低级调度的主要目标是尽快让就绪进程获得CPU的执行权,从而保证系统的响应速度。

低级调度采用的调度算法多为抢占式调度算法,如最短作业优先(SJF)、优先级调度等。

低级调度的调度时间短,一般是微秒级的时间片轮转,以确保CPU资源能够充分利用。

低级调度的调度数量较高,每个时间片段内,可能会有多个进程被调度,以提高系统的并发度。

其次,中级调度也称为作业调度,是针对外存中的作业进行调度的一种策略。

中级调度的主要目标是合理安排作业的提交和执行,以优化系统资源的利用率。

中级调度的调度算法主要有先来先服务(FCFS)和短作业优先(SJB)等,也可以依据作业的优先级进行调度。

中级调度的调度时间较长,一般是毫秒级的调度时间间隔,以确保作业提交和执行的效率。

中级调度的调度数量较低,每次调度只处理一个作业,以保证系统的稳定性和可靠性。

最后,高级调度也称为长程调度,是针对外存中的长程作业进行调度的一种策略。

高级调度的主要目标是合理调度作业的提交和执行,以充分利用系统的资源,并满足系统的性能指标。

高级调度的调度算法主要有多级反馈队列调度算法、最短剩余时间优先(SRT)和最短进程优先(SPN)等。

高级调度的调度时间较长,一般是秒级的调度时间间隔,以支持作业的长时间运行。

高级调度的调度数量较低,每次调度只处理少量作业,以保证系统的稳定性和高效性。

综上所述,低级调度、中级调度、高级调度在任务优先级、调度时间和调度数量等方面存在明显差异。

低级调度更加关注系统的响应速度,采用抢占式调度算法,调度时间短,调度数量较高。

单道批处理系统作业调度

单道批处理系统作业调度

单道批处理系统作业调度单道批处理系统作业调度是指在单道批处理系统中,根据作业的特性和系统资源的情况,合理地安排作业的执行顺序和分配系统资源的过程。

它是操作系统中的一个重要组成部份,对于提高系统的效率和资源利用率至关重要。

一、作业调度的原则1. 公平性原则:保证每一个作业都有机会获得系统资源,避免某些作业长期占用资源而导致其他作业等待过久。

2. 高效性原则:尽量减少作业的等待时间,提高系统的吞吐量和响应速度。

3. 紧急性原则:优先处理紧急的作业,确保系统的稳定运行。

4. 先来先服务原则:按照作业提交的先后顺序进行调度,保证公平性和公正性。

二、作业调度的算法1. 先来先服务(FCFS)算法:按照作业提交的先后顺序进行调度,先提交的作业先执行。

适合于作业的执行时间相对较短且相对稳定的情况。

2. 短作业优先(SJF)算法:根据作业的执行时间预测,选择执行时间最短的作业优先执行。

适合于作业的执行时间差异较大的情况。

3. 优先级调度算法:为每一个作业分配一个优先级,根据优先级高低进行调度。

适合于需要根据作业的重要性和紧急程度进行调度的情况。

4. 时间片轮转(RR)算法:将系统的执行时间划分为多个时间片,每一个作业在一个时间片内执行一定的时间,然后切换到下一个作业。

适合于多个作业之间的执行时间相对均衡的情况。

三、作业调度的流程1. 作业提交:用户将作业提交到系统中,包括作业的名称、优先级、执行时间等信息。

2. 作业入队:将提交的作业加入到作业队列中,按照先来先服务或者其他调度算法进行排序。

3. 作业调度:根据调度算法选择下一个执行的作业,并将其从作业队列中取出。

4. 资源分配:根据作业的资源需求,分配相应的系统资源给作业,如CPU、内存等。

5. 作业执行:作业开始执行,占用系统资源进行计算、IO操作等。

6. 作业完成:作业执行完毕后,释放占用的系统资源,并将结果返回给用户。

7. 下一个作业:根据调度算法选择下一个执行的作业,重复步骤3-6,直到所有作业执行完毕。

调度算法OS

调度算法OS

调度算法OS调度算法(OS)2011-04-05 20:59处理机调度的分级高级、中级和低级调度作业从提交开始直到完成,往往要经历下述三级调度:高级调度:(High-Level Scheduling)又称为作业调度,它决定把后备作业调入内存运行;低级调度:(Low-Level Scheduling)又称为进程调度,它决定把就绪队列的某进程获得CPU;中级调度:(Intermediate-Level Scheduling)又称为在虚拟存储器中引入,在内、外存对换区进行进程对换。

1.进程调度算法(处理器管理)A).先来先服务和短作业(进程)优先调度算法B).高优先权优先调度算法C).基于时间片的轮转调度算法2.作业调度算法2)短作业优先法SJF、3)最高响应比优先法HRN、4定时轮转法和优先数法3.移臂(磁盘)调度算法(设备管理根本目的在于有效利用磁盘,保证磁盘的快速访问)1)先来先服务算法;(根据访问者提出访问请求的先后次序来决定执行次序。

)2)最短寻找时间优先调度算法;(从等待的访问者中挑选寻找时间最短的那个请求执行,而不管访问者的先后次序。

)3)电梯4)单向扫描4.页式调度算法(存储器管理)1先进先出调度算法2最近最少调度算法3最近最不常用调度算法/////////////////////////////调度算法是指:根据系统的资源分配策略所规定的资源分配算法。

进程调度算法(处理器管理)一、先来先服务和短作业(进程)优先调度算法1.先来先服务调度算法先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。

FCFS算法比较有利于长作业(进程),而不利于短作业(进程)。

由此可知,本算法适合于CPU繁忙型作业,而不利于I/O繁忙型的作业(进程)。

2.短作业(进程)优先调度算法短作业(进程)优先调度算法(SJ/PF)是指对短作业或短进程优先调度的算法,该算法既可用于作业调度,也可用于进程调度。

(完整版)计算机操作系统(第四版)课后习题答案第三章

(完整版)计算机操作系统(第四版)课后习题答案第三章

第三章处理机调度与死锁1,高级调度与低级调度的主要任务是什么?为什么要引入中级调度?【解】(1)高级调度主要任务是用于决定把外存上处于后备队列中的那些作业调入内存,并为它们创建进程,分配必要的资源,然后再将新创建的进程排在就绪队列上,准备执行。

(2)低级调度主要任务是决定就绪队列中的哪个进程将获得处理机,然后由分派程序执行把处理机分配给该进程的操作。

(3)引入中级调度的主要目的是为了提高内存的利用率和系统吞吐量。

为此,应使那些暂时不能运行的进程不再占用宝贵的内存空间,而将它们调至外存上去等待,称此时的进程状态为就绪驻外存状态或挂起状态。

当这些进程重又具备运行条件,且内存又稍有空闲时,由中级调度决定,将外存上的那些重又具备运行条件的就绪进程重新调入内存,并修改其状态为就绪状态,挂在就绪队列上,等待进程调度。

3、何谓作业、作业步和作业流?【解】作业包含通常的程序和数据,还配有作业说明书。

系统根据该说明书对程序的运行进行控制。

批处理系统中是以作业为基本单位从外存调入内存。

作业步是指每个作业运行期间都必须经过若干个相对独立相互关联的顺序加工的步骤。

作业流是指若干个作业进入系统后依次存放在外存上形成的输入作业流;在操作系统的控制下,逐个作业进程处理,于是形成了处理作业流。

4、在什么情冴下需要使用作业控制块JCB?其中包含了哪些内容?【解】每当作业进入系统时,系统便为每个作业建立一个作业控制块JCB,根据作业类型将它插入到相应的后备队列中。

JCB 包含的内容通常有:1) 作业标识2)用户名称3)用户账户4)作业类型(CPU 繁忙型、I/O芳名型、批量型、终端型)5)作业状态6)调度信息(优先级、作业已运行)7)资源要求8)进入系统时间9) 开始处理时间10) 作业完成时间11) 作业退出时间12) 资源使用情况等5.在作业调度中应如何确定接纳多少个作业和接纳哪些作业?【解】作业调度每次接纳进入内存的作业数,取决于多道程序度。

进程的调度算法

进程的调度算法

进程的调度算法调度算法的实质是:根据系统的资源分配策略所规定的资源分配算法。

先介绍⼀下进程调度与作业调度的区别:进程调度是真正让某个就绪状态的进程到处理机上运⾏,⽽作业调度只是使作业具有了竞争处理机的机会。

进程调度(⼜称微观调度、低级调度、短程调度):是按照某种调度算法从就绪状态的进程中选择⼀个进程到处理机上运⾏。

负责进程调度功能的内核程序称为进程调度程序。

作业调度(⼜称⾼级调度、宏观调度、长程调度):是按某种调度算法从后备作业队列中选择作业装⼊内存运⾏;另外当该作业执⾏完毕后,还负责回收系统资源。

完成作业调度功能的程序称为作业调度程序。

下⾯介绍⼏种常见的调度算法:先来先服务(FCFS,first come first served)FCFS调度算法是⼀种最简单的调度算法,该调度算法既可以⽤于作业调度也可以⽤于进程调度。

在作业调度中,算法每次从后备作业队列中选择最先进⼊该队列的⼀个或⼏个作业,将它们调⼊内存,分配必要的资源,创建进程并放⼊就绪队列。

在进程调度中,FCFS调度算法每次从就绪队列中选择最先进⼊该队列的进程,将处理机分配给它,使之投⼊运⾏,直到完成或因某种原因⽽阻塞时才释放处理机。

优点:保证了公平性,规则简单缺点:有利于长进程⽽不利于短进程,有利于CPU 繁忙的进程,⽽不利于I/O 繁忙的进程短作业优先(SJF,Shortest Job First)短作业(进程)优先调度算法是指对短作业(进程)优先调度的算法。

短作业优先(SJF)调度算法是从后备队列中选择⼀个或若⼲个估计运⾏时间最短的作业,将它们调⼊内存运⾏。

⽽短进程优先(SPF)调度算法,则是从就绪队列中选择⼀个估计运⾏时间最短的进程,将处理机分配给它,使之⽴即执⾏,直到完成或发⽣某事件⽽阻塞时,才释放处理机。

优点:相⽐FCFS 算法,该算法可改善平均周转时间和平均带权周转时间,缩短进程的等待时间,提⾼系统的吞吐量。

缺点:该算法对长作业不利,SJF调度算法中长作业的周转时间会增加。

操作系统原理-第四章处理机调度知识点及习题

操作系统原理-第四章处理机调度知识点及习题

第四章处理机调度与死锁4.1 知识点汇总1、处理机调度级别⑴调度:选出待分派的作业或进程⑵处理机调度:分配处理机⑶三级调度:高级调度(作业调度)、中级调度(内存对换)、低级调度(进程调度)2、作业状态⑴作业状态分为四种:提交、后备、执行和完成。

⑵作业状态变迁图:图4-1 作业状态及变迁3、作业调度和调度的功能⑴. 作业调度的任务后备状态→执行状态执行状态→完成状态⑵作业调度的功能①记录系统中各个作业的情况②按照某种调度算法从后备作业队列中挑选作业③为选中的作业分配内存和外设等资源④为选中的作业建立相应的进程⑤作业结束后进行善后处理工作4、进程调度和调度的功能1). 进程调度:后备状态→执行状态2). 进程调度时机:任务完成后、等待资源时、运行到时了、发现重调标志3). 进程调度的功能:保存现场、挑选进程、恢复现场5、两级调度模型 作业调度和进程调度的区别6、评价调度算法的指标调度性能评价准则:CPU利用率、吞吐量、周转时间、就绪等待时间和响应时间(1)吞吐量:单位时间内CPU完成作业的数量(2)周转时间:1) 周转时间=完成时刻-提交时刻2) 平均周转时间=周转时间/n3) 带权周转时间=周转时间/实际运行时间4) 平均带权周转时间=带权周转时间/n7、作业与进程调度算法(1)先来先服务(FCFS)调度算法的实现思想:按作业(进程)到来的先后次序进行调度,即先来的先得到运行。

用于作业调度:从作业对列(按时间先后为序)中选择队头的一个或几个作业运行。

用于进程调度:从就绪队列中选择一个最先进入该队列的进程投入运行。

例如设有三个作业,编号为1,2,3。

各作业分别对应一个进程。

各作业依次到达,相差一个时间单位。

①图示出采用FCFS方式调度时这三个作业的执行顺序②算出各作业的周转时间和带权周转时间(2)时间片轮转(RR)调度算法的实现思想:系统把所有就绪进程按先进先出的原则排成一个队列。

新来的进程加到就绪队列末尾。

操作系统原理课件-第九讲处理机管理

操作系统原理课件-第九讲处理机管理
对象:外存中因暂时不能运行而被挂起的进程 动作:将外存挂起的进程激活调入内存,进入就绪队列 目的:提高内存利用率
New
Ready Activate Suspend
Suspend
Ready
Timeout Running Release
Event Occurs Event Occurs
Blocked Suspend
可见,采用短作业优先调度算法可获得最小平均作业周转时间
练习
假定有四道作业,它们的进入时间和运行时间在下表中给出:
作业号
1 2 3 4
进入时间(时)
10:00 10:10 10:20 10:30
运行时间(分钟)
40 60 30 20
在单道程序环境下,分别采用FCFS和SJF算法,试说明他们的 调度顺序及平均周转时间
从OS类型:批处理、分时、实时、多处理机调度 从调度层次:高级调度、低级调度、中级调度
(1)高级调度 作业调度 long-term scheduling
• Determines which programs are admitted to the system for processing • Controls the degree of multiprogramming • More processes, smaller percentage of time each process is executed
3) 优先权调度算法(Priority Scheduling)
High Priority First——HPF
为照顾紧迫型作业的执行而引入,分为非 抢先式和抢先式。
静态优先权 动态优先权
静态优先权
优先权在创建进程时就确定,直到进程终止前都不改变,通 常是一个整数。

操作系统 低中高级调度

操作系统 低中高级调度

1. 调度类型高级调度——作业调度批处理系统中使用,周期较长。

低级调度——进程调度是最基本的一种调度,在三种类型的OS中都必须配置。

进程调度可采用非抢占或抢占两种方式。

其中抢占方式允许调度程序根据某种原则,例时间片原则、优先权原则、短进程优先原则等去停止某个正在执行的进程,将已分配给该进程的处理机,重新分配给另一进程。

进程调度的运行频率最高,故算法不能太复杂。

中级调度——引入中级调度的目的是为了提高内存的利用率和系统吞吐量。

中级调度实际上是存储器管理中的对换功能。

2. 调度队列模型3. 选择调度方式和算法的准则周转时间(批处理)面向用户响应时间(分时)的准则截止时间的保证(实时)优先权准则面向系统系统吞吐量高(批处理)的准则处理机利用率好各类资源的平衡利用周转时间——指作业提交系统开始,到作业完成为止的时间间隔。

带权周转时间——作业的周转时间与系统为它提供的实际服务时间之比。

W=T/TS响应时间——从用户通过键盘提交一个请求开始,直至系统首次产生响应为止的时间。

截止时间——某任务必须开始执行的最迟时间,或必须完成的最迟时间。

吞吐量——单位时间内所完成的作业数。

4. 调度算法(作业调度、进程调度)先来先服务调度算法(FCFS)按进入后备(或就绪)队列的先后选择目标作业(或进程)。

有利于长作业(进程),不利于短作业(进程)。

最短作业优先调度算法SJ(P)F从后备(或就绪)队列中选择估计运行时间最短的作业(或进程)tn+1=a tn+(1-a) tn tn为实际值,tn为预测值SJF有效地降低作业的平均等待时间,提高了系统的吞吐量。

对长作业(或进程)不利,可能死等,且未考虑作业的紧迫程度。

时间片轮转调度算法(进程调度)系统将所有的就绪进程按先来先服务原则,排成一个队列,每次调度时把CPU分配给队首进程,令其执行一个时间片。

就绪队列中所有进程,在一个给定的时间内,均能获得一个时间片的处理机执行时间。

T=nq优先权调度算法适用于作业调度和进程调度。

资源调度算法

资源调度算法

资源调度算法资源调度算法:资源调度算法是指在有限的资源下,通过有效的调度算法,实现最大化资源利用率并满足任务的需求。

在计算机运维和系统管理方面,资源调度算法被广泛地应用,并对提高计算机的利用率、降低系统成本、加速任务的完成速度等方面起到了重要的作用。

本篇文章将介绍几种常见的资源调度算法。

1. 长作业优先调度算法长作业优先调度算法是指在多个作业同时到达时,首先优先分配执行时间给运行时间较长的作业。

通过对作业的长短进行排序,长作业优先调度算法可以有效地控制短作业的等待时间,并在系统资源不足的情况下,尽可能地保证长作业的完成时间。

2. 最短作业优先调度算法最短作业优先调度算法是指在多个作业同时到达时,首先分配执行时间给运行时间最短的作业。

相比于长作业优先调度算法,最短作业优先调度算法更加注重任务的效率和速度,因为较短的作业能更快地完成,从而释放资源给其他作业使用。

3. 时间片轮转调度算法时间片轮转调度算法是指将任务划分为若干个时间片,每个时间片的长度固定。

在每个时间片内,系统轮流分配给不同的任务进行执行。

当一个任务的执行时间超过当前所分配的时间片长度时,该任务将被暂停并重新加入队列,直到下一个时间片再次轮到该任务执行。

通过这种调度方式,可以保证相对公平的资源利用,并减少长作业的等待时间。

4. 最高响应比优先调度算法最高响应比优先调度算法是指根据作业的等待时间和运行时间的比值,优先分配执行时间给拥有最高响应比的作业。

响应比越高,说明该作业需要更及时地得到执行,因此资源调度算法会优先考虑这类作业的需求。

最高响应比优先调度算法不仅能够保证资源的有效利用,还能够尽可能地满足作业的需求。

5. 先来先服务调度算法先来先服务调度算法是最简单、最基础的一种资源调度算法。

它是指任务依据到达系统的先后顺序,按照先到先服务的原则执行。

这种调度方式对系统的响应时间、等待时间等方面的影响比较大,因此需要慎重考虑是否适合系统的需求。

操作系统概念整理

操作系统概念整理

操作系统概念整理名词解释:1.处理器调度按照层次可分为三级:⾼级调度、中级调度和低级调度各级主要任务:⾼级调度:⼜称作业调度、长程调度,在多道批处理操作系统中,从输⼊系统的⼀批作业中按照预定的调度策略挑选若⼲作业进⼊主存,为其分派所需资源、并创建作业的相应⽤户进程后便完成启动阶段的⾼级调度任务,已经为进程做好运⾏前的准备⼯作,等待进程调度挑选进程运⾏,在作业完成后还要做结束阶段的善后⼯作。

中级调度:⼜称平衡调度、中程调度,根据主存资源决定主存中所能容纳的进程数⽬,并根据进程的当前状态来决定辅助存储器和主存中的进程的对象。

低级调度:⼜称进程调度\线程调度、短程调度,其主要功能是根据某种原则决定就绪队列中的哪个进程\内核级线程获得处理器,并将处理器出让给它使⽤。

2.逻辑地址:⽤户⽬标程序使⽤的地址单元称为逻辑地址(相对地址),⼀个⽤户作业的⽬标程序的逻辑地址稽核称为该作业的逻辑地址空间。

物理地址:主存中的实际存储单元称为物理地址(绝对地址),物理地址的总体相应构成3.解释并发性与并⾏性答:计算机操作系统中把并⾏性和并发性明显区分开,主要是从微观的⾓度来说的,具体是指进程的并⾏性(多处理机的情况下,多个进程同时运⾏)和并发性(单处理机的情况下,多个进程在同⼀时间间隔运⾏的)。

并⾏性是指硬件的并⾏性,两个或多个事件在同⼀时刻发⽣。

并发性是指进程的并发性,两个或多个事件在同⼀时间段内发⽣。

4.解释可再⼊程序与可再⽤程序答:可再⼊程序⼜称可重⼊程序是指能够被多个程序同时调⽤的程序,是纯代码,在执⾏过程中不被修改。

可再⽤程序实在调⽤过程中可以⾃⾝修改,在调⽤它的程序退出之前是不允许其他程序来调⽤的。

5.解释进程的竞争关系和协作关系答:竞争关系:系统中的多个进程之间彼此⽆关,它们并不知道其它进程的存在,并且也不接受其它进程执⾏的影响。

协作关系:某些进程为完成同⼀任务需要分⼯协作,由于合作的每⼀个进程都是独⽴地以不可预知的速度推进,这就需要相互协作的进程在某些协调点上协调各⾃的⼯作。

最新处理器调度习题

最新处理器调度习题

处理器调度选择题•当CPU执行操作系统代码时,则处理机处于( )。

•A.执行态B.目态C.管态D.就绪态•( )是机器指令的扩充,是硬件的首次延伸,是加在硬件上的第一层软件。

•A.系统调用B.操作系统C.内核D.特权指令•操作系统提供给程序员的接口是( )。

•A.进程B.系统调用C.库函数D.B和C•用户程序向系统提出使用外设的请求方式是( )。

•A.作业申请B.原语C.系统调用D.I/O指令•当作业正常完成进入完成状态时,操作系统( )。

•A.将输出该作业的结果并删除内存中的作业•B.将收回该作业的所占资源并输出结果•C.将收回该作业的所占资源及输出结果,并删除该作业•D.将收回该作业的所占资源及输出结果,并将它的控制块从当前的队列中删除•下列选项是关于作业和进程关系的描述,其中哪一个是不正确的( )。

•A.作业的概念主要用在批处理系统中,而进程的概念则用在几乎所有的OS中。

•B.作业是比进程低一级的概念。

•C.一个作业至少由一个进程组成。

•D.作业是用户向计算机提交任务的实体,而进程是完成用户任务的执行实体以及向系统申请分配资源的基本单位。

•作业从后备作业到被调度程序选中的时间称为( )。

•周转时间B.响应时间C.等待调度时间D.运行时间•设有三个作业J1,J2,J3,它们同时到达,运行时间分别为T1,T2,T3,且T1≤T2≤T3,若它们在一台处理机上按单道运行,采用短作业优先算法,则平均周转时间为( )。

•A.T1+T2+T3 B.1/3(T1+T2+T3)•C.T1+2/3T2+1/3T3 D.T1+1/3T2+2/3T3•从作业提交给系统到作业完成的时间间隔称为作业的( )。

•A.中断时间B.等待时间C.周转时间D.响应时间•设有四个作业同时到达,每个作业执行时间均为2 h,它们在一台处理机上按单道方式运行,则平均周转时间为( )。

•A.1 h B.5 h C.2.5 h D.8 h•FCFS调度算法有利于( )。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

南京信息工程大学实验(实习)报告实验名称作业调度和低级调度算法实验日期 2011.04.21 得分指导教师毕硕本院计软院专业软件工程年级 09 班次 1 姓名潘银磊学号 200913440441.实验目的:熟悉操作系统作业管理步骤理解作业调度和低级调度算法,并熟练掌握该算法。

2.实验内容:选择四种算法,用计算机语言模拟这四种算法。

1)先来先服务算法2)优先级调度算法3)最短作业优先算法4)轮转调度算法算法3.实验步骤1)先来先服务算法#include<stdio.h>#include<stdlib.h>#include<iostream.h>#define maxsize 100void FCFS(int array[],int m){int sum=0,j;printf("\nFCFS: ");for(int i=0;i<m;i++){printf("%5d",array[i]);}for(i=0,j=1;j<m;i++,j++){if(array[i]<array[j]) sum+=(array[j]-array[i]);else sum+=(array[i]-array[j]);}printf("\n移动的总道数:");printf("%d",sum);}void ShortPath(int array[],int m){int temp;int now,pos;int i,j,sum=0,k;for(i=0;i<m;i++)for(j=i+1;j<m;j++){if(array[i]>array[j]){temp=array[i];array[i]=array[j];array[j]=temp;}}cout<<"请输入当前的磁道号:";cin>>now;for(i=0;i<m;i++){if(array[i]>=now){pos=i;break;}}printf("\nShortPath: ");if(i==0){for(int i=0;i<m;i++){printf("%5d",array[i]);}for(i=0,j=1;j<m;i++,j++){if(array[i]<array[j]) sum+=(array[j]-array[i]);else sum+=(array[i]-array[j]);}}else{if(i-1==m-1){for(int i=m-1;i>=0;i--){printf("%5d",array[i]);}for(i=m-1,j=m-2;j>=0;i--,j--){if(array[i]<array[j]) sum+=(array[j]-array[i]);else sum+=(array[i]-array[j]);}}else{if(array[i]==now) // {printf("%d",array[i]);now=array[i];for(k=i;k<m;k++)array[i]=array[i+1];m--;pos=i+1;goto kk;}else{while(m){sum=0;if((now-array[pos-1])<(array[pos]-now)){// sum+=now-array[pos-1];printf("%5d",array[pos-1]);now=array[pos-1];if(pos-1>=m){for(k=pos-1;k>0;k--)array[k]=array[k-1];}elsefor(k=pos-1;k<=m-1;k++)array[k]=array[k+1];//pos=pos;m--;}else{//sum+=array[pos]-now;printf("%5d",array[pos-1]);now=array[pos];if(pos>=m){for(k=pos;k>=0;k--)array[k]=array[k-1];}elsefor(k=pos;k<=m-1;k++)array[pos]=array[pos+1];//pos=pos+1;m--;}}}}}// printf("\n移动的总道数:");// printf("%d",sum);}void Elevator(int array[],int m){int pos,now,d,sum=0,j,temp,i;for(i=0;i<m;i++)for(j=i+1;j<m;j++){if(array[i]>array[j]){temp=array[i];array[i]=array[j];array[j]=temp;}}cout<<"请输入当前的磁道号:";cin>>now;cout<<endl;for(i=0;i<m;i++){if(now==array[i])break;}pos=i;cout<<"请输入当前移动臂的移动的方向(1 表示向内,0表示向外) : ";cin>>d;printf(" Elevator : ");if(d==1){for(i=pos,j=pos+1;i<m;i++){printf("%5d",array[i]);if(array[i]>array[j]) sum+=(array[i]-array[j]);else sum+=(array[j]-array[i]);}for(i=pos-1;i>=0;i--){printf("%5d",array[i]);if(array[i]>array[j]) sum+=(array[i]-array[j]);else sum+=(array[j]-array[i]);}}if(d==0){for(i=pos,j=pos+1;i>=0;i--){printf("%5d",array[i]);if(array[i]>array[j]) sum+=(array[i]-array[j]);else sum+=(array[j]-array[i]);}for(i=pos+1,j=pos+2;i<m;i++){printf("%5d",array[i]);if(array[i]>array[j]) sum+=(array[i]-array[j]);else sum+=(array[j]-array[i]);}}if((d!=1)&&(d!=0))cout<<endl<<"input error!"<<endl;printf("\n移动的总道数:");printf("%d",sum);}void SCAN(int array[],int m){int pos,now,sum=0,j,temp,i;for(i=0;i<m;i++)for(j=i+1;j<m;j++){if(array[i]>array[j]){temp=array[i];array[i]=array[j];array[j]=temp;}}cout<<"请输入当前的磁道号:";cin>>now;cout<<endl;for(i=0;i<m;i++){if(now==array[i])break;}pos=i;printf(" SCAN : ");for(i=pos,j=pos+1;i<m;i++){printf("%5d",array[i]);if(array[i]>array[j]) sum+=(array[i]-array[j]);else sum+=(array[j]-array[i]);}for(i=0,j=1;i<pos;i++){printf("%5d",array[i]);if(array[i]>array[j]) sum+=(array[i]-array[j]);else sum+=(array[j]-array[i]); }printf("\n移动的总道数:");printf("%d",sum);}void main(){int c;FILE *fp;int cidao[maxsize];int i=0,count;fp=fopen("cidao.txt","r+");if(fp==NULL){cout<<"can not find file!"<<endl;exit(0);}while(!feof(fp)){fscanf(fp,"%d",&cidao[i]);i++;}count=i-1;for(i=0;i<count;i++){printf("%5d",cidao[i]);}cout<<endl;while(1){cout<<endl<<"系统的菜单如下:"<<endl;printf("1. 先来先服务 2. 最短寻道时间优先 3. 电梯调度"); cout<<endl;printf("4. 单向扫描 5. 退出");cout<<endl;cout<<"请选择:";cin>>c;if(c>4)break;switch(c){case 1:FCFS(cidao,count);break;case 2:ShortPath(cidao,count);break;case 3:Elevator(cidao,count);break;case 4:SCAN(cidao,count);break;}}}2)优先级调度算法#include <stdio.h>#include <conio.h>#define N 20struct PCB{char pname[N];int pro;char state;int runtime;struct PCB *next;};struct PCB *head_input;struct PCB *head_run;struct PCB *head_run_pre;unsigned long current;int readydata(){if(head_input->next==NULL){return 0;}struct PCB *p1=head_input->next,*pmax,*p2;int maxpro=0xffff;pmax=p1;p2=head_input;//head_run_pre=head_input;while(p1!=NULL){if(p1->pro<maxpro){maxpro=p1->pro;head_run_pre=p2;pmax=p1;}p2=p1;p1=p1->next;}head_run=pmax;head_run_pre->next=head_run->next;return 1;}void runprocess(){head_run->runtime-=10;head_run->pro++;struct PCB *p1,*p2;printf("Time slice is %d",current);current+=10;printf(" %s starts\n",head_run->pname);printf("Time slice is %d",current);printf(" %s ends\n",head_run->pname);if(head_run->runtime<=0){//判断进程是否运行结束// delete(*head->run);}else{p1=head_input;p2=head_input->next;p1->next=head_run;head_run->next=p2;}}int readyprocess(){while(1){if(readydata()==0)return 0;else runprocess();}}void Init(){head_input=new PCB;head_input->next=NULL;current=0;int numpro;printf("请输入要建立的进程数:\n\n");scanf("%d",&numpro);printf("please input the information of the processes\n");printf("process 进程名******运行时间******权值\n");for(int i=0;i<numpro;i++){//printf("please input the %d-th process's information:\n",i+1);struct PCB *p1=new PCB;scanf("%s",p1->pname);scanf("%d",&p1->runtime);scanf("%d",&p1->pro);p1->state='C';p1->next=NULL;struct PCB *p2=head_input->next;head_input->next=p1;p1->next=p2;}}int main(){printf("*******xxxxxxxxxxxxxxx********\n\n");Init();printf("优先级调度算法运行结果如下:\n");readyprocess();return 0;}3)最短作业优先算法public class Job {private String name = "";private String inTime = "";private int maybeRunTime = 0;private int waitTime = 0;private int turnoverTime = 0;private int withPoweroverTime = 0;public int getTurnoverTime() {return turnoverTime;}public void setTurnoverTime(int turnoverTime) {this.turnoverTime = turnoverTime;}public int getWithPoweroverTime() {return withPoweroverTime;}public void setWithPoweroverTime(int withPoweroverTime) { this.withPoweroverTime = withPoweroverTime;}public String getInTime() {return inTime;}public void setInTime(String inTime) {this.inTime = inTime;}public int getMaybeRunTime() {return maybeRunTime;}public void setMaybeRunTime(int maybeRunTime) {this.maybeRunTime = maybeRunTime;}public String getName() {return name;}public void setName(String name) { = name;}public int getWaitTime() {return waitTime;}public void setWaitTime(int waitTime) {this.waitTime = waitTime;}}4)轮转调度算法#include <stdio.h>#define M 5 //物理页数#define Myprintf printf("|---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---|\n")typedef struct PCB{int ID;int ReachTime;int TotalTime;}PCB; //进程号,到达时间和服务时间typedef struct NOTE //备份{int ID;int TotalTime;}NOTE;PCB A[M]; //5个进程PCB a[M];NOTE temp;int queue[50]; //记录调度的进程int K=0; //调度进程数组的标识void INIT()//初始化{int i;for(i=0;i<M;i++){A[i].ID=-1;}}int GetNum()//计算进程数{int i,j=0;for(i=0;i<M;i++){if(A[i].ID!=-1){j++;}}return j;}int GetReach(int time)//找出到达进程号{int i;for(i=0;i<M;i++){if(a[i].ReachTime<=time){a[i].ReachTime=100;return i;}}return -1;}int GetInsert()//找出插入位置{int i;for(i=0;i<M;i++){if(A[i].ID==-1)return i;}return -1;}void Forward(int num)//前移{int i;for(i=0;i<num-1;i++){A[i].ID=A[i+1].ID;A[i].TotalTime=A[i+1].TotalTime;}A[num-1].ID=-1;}void Process()//执行进程{queue[K]=A[0].ID;K++;A[0].TotalTime--;temp.ID=A[0].ID;temp.TotalTime=A[0].TotalTime;}void main(){int i;int time;int t=0;int reach;int insert;int num;printf("RR算法\n\n");INIT();for(i=0;i<M;i++){printf("请输入进程ID:");scanf("%d",&a[i].ID);printf("请输入到达时间:");scanf("%d",&a[i].ReachTime);printf("请输入服务时间:");scanf("%d",&a[i].TotalTime);}for(i=0;i<M;i++)//运行时间{t=t+a[i].TotalTime;}for(i=0;i<50;i++)//初始化{queue[i]=-1;}for(time=0;time<=t;time++){reach=GetReach(time);if(reach!=-1)//有进程到达{insert=GetInsert();A[insert].ID=a[reach].ID;A[insert].TotalTime=a[reach].TotalTime;num=GetNum();continue;//进程数为1else{//进程数不为1Process();Forward(num);if(temp.TotalTime!=0){A[num-1].ID=temp.ID;A[num-1].TotalTime=temp.TotalTime;}}}else//没有进程到达{num=GetNum();if(num==1){//进程数为1Process();if(temp.TotalTime==0){A[0].ID=-1;}}else if(num==0)continue;//进程数为0else{Process();Forward(num);if(temp.TotalTime!=0){A[num-1].ID=temp.ID;A[num-1].TotalTime=temp.TotalTime;}}}}printf("\n");printf("调度顺序为:\n");Myprintf;for(i=0;i<50;i++){printf("|%2d ",queue[i]);}printf("|\n");Myprintf;printf("\n");}。

相关文档
最新文档