CPU调度算法——FCFS算法/SJF算法/优先级调度算法/RR算法

一、先来先服务(FCFS)调度算法

非抢占式调度,选择就绪队列中等待最长时间的进程。
评价:简单;系统开销小;对长进程有优势;更利于多CPU处理的进程。

带权周转时间=周转时间/服务时间

例子:下图中,P1到P5五个进程根据到达时间,每个进程结束之后,下一个进程才开始运行。
在这里插入图片描述

二、最短作业优先(SJF)算法

选择下一个期望最短处理时间的进程运行。

1. 非抢占式SJF

当运行进程主动放弃CPU控制权时进行调度。

例子:P1进程0时刻到达,开始运行,运行到2时刻时,P2进程到达并等待。P1在3时刻运行完,此时只有P2在等待,故P2开始运行。运行期间,4时刻时,P3到达,6时刻时P4到达,8时刻时P5到达,9时刻时P2运行完,此时P3、P4、P5都在等待,根据最短作业优先算法,P5运行时间最短,故先调度P5。P5结束后,P3和P4中,P3运行时间最短,故调度P3,最后调度P4。
在这里插入图片描述

2. 抢占式SJF

进程主动离开CPU时调度运行时间最短的进程。
新到达进程的运行时间小于正在运行进程的剩余运行时间时,调度新进程。
缺点:需要知道或者估计进程会执行多长时间;可能使长进程产生饥饿;因为没有剥夺,所以不适合在实时系统中实现。

例子:P1在0时刻到达,开始运行。2时刻时P2到达,此时P1剩余运行时间为1,P2的运行时间为6,P1更小,故P1继续运行。3时刻时,P1运行结束。此时只有进程P2在等待,故P2开始运行。4时刻时,P3到达,此时P2的剩余运行时间为5,P3的运行时间为4,P3更小,故P2中断,调度P3运行,P2进入等待队列。6时刻时,P4到达,此时P3的剩余运行时间为2,P4的运行时间为5,P3更小,故继续运行P3,P4进入等待队列。8时刻时,P4运行结束,P5到达。此时等待队列中又P2、P4和P5,运行时长分别为5、5和2。故P5先运行。由于时长一样,故P5结束后从队列中按FCFS运行P2和P4。
在这里插入图片描述

三、优先级调度算法

非抢占式/抢占式
每个进程有一个优先级,优先级由优先数来表示。
优先级不同时调度优先权最高的进程,优先级相同时按照FCFS顺序调度。

1. 非抢占式优先级调度算法

优先数在括号中给出,优先数越小,优先级越大。

例子:0时刻P1到达开始运行。2时刻P2到达后等待。P1运行之后,等待的进程P2开始运行。P2运行期间,P3、P4、P5都到达了,都在等待队列中。此时由于优先级P5>P3>P2,故P2运行完之后,按着优先级依次调度P5、P3和P2。
在这里插入图片描述

2. 抢占式优先级调度算法

新进程到达时,若其优先级高于正在运行的进程,则调度新进程。

四、时间片轮转(RR)算法

抢占式调度算法
时钟每隔一段时间产生一个中断,运行状态的进程进入就绪状态,用FCFS方法从就绪队列中选择一个进程去执行。
若时间片太短,则系统开销大;若时间片太长,则变成FCFS算法。

例子:假设时间片长度设为4,P1运行时间长度3,长度小于4,用不完一个时间片。2时刻P2进入就绪队列。3时刻P1结束进程后,P2开始运行,期间4时刻P3到达,6时刻P4到达,P3和P4依次进入就绪队列。7时刻P2中断,运行P3,P2进入就绪队列,此时就绪队列中进程顺序为P4、P2。8时刻P5到达,进入就绪队列,此时就绪队列中进程顺序为P4、P2、P5。11时刻P3运行完,运行P4,此时就绪队列中进程顺序为P2、P5。15时刻,P4中断并进入就绪队列,此时就绪队列中进程顺序为P2、P5、P4,运行时间均小于4,按FCFS依次运行完。
在这里插入图片描述

五、多级队列调度

将就绪队列划分为多个队列,各个队列有不同的优先级。一个进程进入系统后根据其具体情况(比如内存大小、优先级大小、进程的类型等)分批到固定的队列中,队列之间用优先级调度,同一队列用自己的调度算法。
例如:前台交互进程和后台批处理进程放到不同的队列中,前台交互式进程优先级更高。前台交互式进程采用RR,后台批处理进程用FCFS。

高优先级的进程没有运行完,低优先级的进程无法运行。低优先级的进程正在运行时,有高优先级的进程到达的话,可以抢占CPU。
在这里插入图片描述

  • 42
    点赞
  • 252
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 实验目的 调度的实质是操作系统按照某种预定的策略来分配资源。进程调度的目的是分配CPU资源。由于进程调度程序执行的频率很高,因此调度算法的好坏直接影响到操作系统的性能。本实验的目的是编程模拟实现几种常用的进程调度算法,通过对几组进程分别使用不同的调度算法,计算进程的平均周转时间和平均带权周转时间,比较各种算法的性能优劣。 2. 实验原理 [1]. 进程调度算法描述 进程调度算法包括先来先服务调度算法、最短作业时间优先(抢占和非抢占)、最高响应比调度算法4种。(每个人必须做FCFS,然后在后面的三种中任选一种,即每个人必须做2种调度算法的模拟。) [2]. 衡量算法性能的参数 计算进程的平均周转时间和平均带权周转时间。 3. 实验内容 (1)编程实现本实验的程序,要求: [1]. 建立进程的进程控制块,进程控制块至少包括: a) 进程名称; b) 进程需要执行时间; c) 进入就绪队列时间; d) 进程执行开始时间 e) 进程执行结束时间 [2]. 编程实现调度算法。 [3]. 进程及相关信息的输入。这些信息可以直接从键盘上输入,也可以从文件读取。 [4]. 时间片与时间流逝的模拟。本实验需要对算法的执行计时,程序应该提供计算时间的方法。一种最简单的方法是使用键盘,比如每敲一次空格代表一个时间片的流逝。另一种方法是使用系统时钟。 [5]. 一组进程序列执行完毕,打印出结果信息。程序需要计算出每个进程的开始执行时间、结束时间、周转时间和带权周转时间,并为整个进程序列计算平均周转时间和平均带权周转时间。程序将计算结果按一定的格显示在计算机屏幕上或输出到文件中。打印出进程调度顺序图。 [6]. 实现数据在磁盘文件上的存取功能。 (2)对下列就绪进程序列分别使用上面的几种算法进行调度,计算每种算法下的平均周转时间和平均带权周转时间。 进程号 到达时间 要求执行时间 0 0 1 1 1 35 2 2 10 3 3 5 4 6 9 5 7 21 6 9 35 7 11 23 8 12 42 9 13 1 10 14 7 11 20 5 12 23 3 13 24 22 14 25 31
下面是对先来先服务调度算法FCFS)、短作业优先调度算法SJF)、时间片轮转调度算法RR)和优先级调度算法的模拟实现的简要介绍: 1. 先来先服务调度算法FCFS): - 这是一种非抢占调度算法,按照作业到达的顺序进行调度。 - 模拟实现时,可以根据作业到达的时间和执行时间,按照先后顺序进行调度,并计算平均等待时间和平均周转时间。 2. 短作业优先调度算法SJF): - 这是一种非抢占调度算法,按照作业执行时间的长短进行调度。 - 模拟实现时,可以根据作业的执行时间,选择执行时间最短的作业进行调度,并计算平均等待时间和平均周转时间。 3. 时间片轮转调度算法RR): - 这是一种抢占调度算法,将CPU时间分为固定长度的时间片,每个作业在一个时间片内执行。 - 模拟实现时,可以使用循环队列来维护就绪队列,每个作业在一个时间片内执行一定量的工作,并按照轮转的方进行调度。 4. 优先级调度算法: - 这是一种非抢占抢占调度算法,根据作业的优先级进行调度,优先级高的作业先执行。 - 模拟实现时,可以为每个作业分配一个优先级,并根据优先级选择下一个要执行的作业,并计算平均等待时间和平均周转时间。 以上算法可以通过编写C程序来进行模拟实现,你可以根据具体的需求和输入数据进行算法的测试和比较。如果你需要更详细的实现代码或有其他问题,请告诉我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值