操作系统中存在多种调度算法,有的调度算法适用于作业调度,有的调度算法适用于进程调度,有的调度算法两者都适用

文章目录

  • 先来先服务(FCFS)调度算法
  • 短作业优先(SJF)调度算法
  • 优先级调度算法
  • 高响应比优先调度算法
  • 时间片轮转调度算法
  • 多级反馈队列调度算法(融合了前几种算法的优点)

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

FCFS调度算法是一种最简单的调度算法,它既可用于作业调度,又可用于进程调度。在作业调度中,算法每次从后备作业队列中选择最先进入该队列的一个或几个作业,将它们调入内存,分配必要的资源,创建进程并放入就绪队列。
进程调度中,FCFS调度算法每次从就绪队列中选择最先进入该队列的进程,将处理机分配给它,使之投入运行,直到完成或因某种原因而阻塞时才释放处理机。

FCFS调度算法属于不可剥夺算法。从表面上看,它对所有作业都是公平的,但若一个长作业先到达系统,就会使后面的许多短作业等待很长时间,因此它不能作为分时系统和实时系统的主要调度策略。但它常被结合在其他调度策略中使用。例如,在使用优先级作为调度策略的系统中,往往对多个具有相同优先级的进程按FCFS原则处理。

FCFS调度算法的特点是算法简单,但效率低;对长作业比较有利,但对短作业不利(相对SJF和高响应比);有利于CPU繁忙型作业,而不利于IO繁忙型作业。

短作业优先(SJF)调度算法

短作业(进程)优先调度算法是指对短作业(进程)优先调度的算法。短作业优先(SJF)调度算法从后备队列中选择一个或若干估计运行时间最短的作业,将它们调入内存运行;短进程优先(SPF)调度算法从就绪队列中选择一个估计运行时间最短的进程,将处理机分配给它,使之立即执行,直到完成或发生某事件而阻塞时,才释放处理机。

SJF调度算法的缺点:
1 )该算法对长作业不利,SJF调度算法中长作业的周转时间会增加。更严重的是,若有一长作业进入系统的后备队列,由于调度程序总是优先调度那些(即使是后进来的)短作业,将导致长作业长期不被调度(“饥饿”现象,注意区分“死锁”,后者是系统环形等待,前者是调度策略问题)
2)该算法完全未考虑作业的紧迫程度,因而不能保证紧迫性作业会被及时处理。
3)由于作业的长短只是根据用户所提供的估计执行时间而定的,而用户又可能会有意或无意地缩短其作业的估计运行时间,致使该算法不一定能真正做到短作业优先调度。

注意,SJF 调度算法的平均等待时间、平均周转时间最少。

优先级调度算法

优先级调度算法又称优先权调度算法,它既可用于作业调度,又可用于进程调度。该算法中的优先级用于描述作业运行的紧迫程度。

作业调度中, 优先级调度算法每次从后备作业队列中选择优先级最高的一个或几个作业,将它们调入内存,分配必要的资源,创建进程并放入就绪队列。在进程调度中,优先级调度算法每次从就绪队列中选择优先级最高的进程,将处理机分配给它,使之投入运行。

根据新的更高优先级进程能否抢占正在执行的进程,可将该调度算法分为如下两种:
1)非剥夺式优先级调度算法。当一个进程正在处理机上运行时,即使有某个更为重要或紧迫的进程进入就绪队列,仍然让正在运行的进程继续运行,直到由于其自身的原因而主动让出处理机时(任务完成或等待事件),才把处理机分配给更为重要或紧迫的进程。
2)剥夺式优先级调度算法。当一个进程正在处理机上运行时,若有某个更为重要或紧迫的进程进入就绪队列,则立即暂停正在运行的进程,将处理机分配给更重要或紧迫的进程。

而根据进程创建后其优先级是否可以改变,可以将进程优先级分为以下两种:
1)静态优先级。优先级是在创建进程时确定的,且在进程的整个运行期间保持不变。确定静态优先级的主要依据有进程类型、进程对资源的要求、用户要求。
2)动态优先级。在进程运行过程中,根据进程情况的变化动态调整优先级。动态调整优先级的主要依据有进程占有CPU时间的长短、就绪进程等待CPU时间的长短。

一般来说,进程优先级的设置可以参照以下原则:

1)系统进程>用户进程。系统进程作为系统的管理者,理应拥有更高的优先级。

2)交互型进程>非交互型进程(或前台进程>后台进程)。大家平时在使用手机时,在前台运行的正在和你交互的进程应该更快速地响应你,因此自然需要被优先处理,即要有更高的优先级。

3)IO型进程>计算型进程。所谓IO型进程,是指那些会频繁使用IO设备的进程,而计算型进程是那些频繁使用CPU的进程(很少使用IO设备)。我们知道,IO设备(如打印机)的处理速度要比CPU慢得多,因此若将IO型进程的优先级设置得更高,就更有可能让IO设备尽早开始工作,进而提升系统的整体效率。

高响应比优先调度算法

高响应比优先调度算法主要用于作业调度,是对FCFS调度算法和SJF调度算法的一种综合平衡,同时考虑了每个作业的等待时间和估计的运行时间。在每次进行作业调度时,先计算后备作业队列中每个作业的响应比,从中选出响应比最高的作业投入运行.

1)作业的等待时间相同时,要求服务时间越短,响应比越高,有利于短作业。
2)要求服务时间相同时,作业的响应比由其等待时间决定,等待时间越长,因而它实现的是先来先服务。
3)对于长作业,作业的响应比可以随等待时间的增加而提高,等待时间足够长时,其响应比便可升到很高,从而也可获得处理机。因此,克服了饥饿状态,兼顾了长作业。

时间片轮转调度算法

时间片轮转调度算法主要适用于分时系统。在这种算法中,系统将所有就绪进程按到达时间的先后次序排成一个队列,进程调度程序总是选择就绪队列中的第一个进程执行, 即先来先服务的原则,但仅能运行一个时间片, 如100ms 在使用完一个时间片后, 即使进程并未完成其运行,它也必须释放出(被剥夺)处理机给下一个就绪的进程,而被剥夺的进程返回到就绪队列的末尾重新排队,等候再次运行。

在时间片轮转调度算法中,时间片的大小对系统性能的影响很大。若时间片足够大,以至于所有进程都能在一个时间片内执行完毕,则时间片轮转调度算法就退化为先来先服务调度算法。若时间片很小,则处理机将在进程间过于频繁地切换,使处理机的开销增大,而真正用于运行用户进程的时间将减少。因此,时间片的大小应选择适当。

时间片的长短通常由以下因素确定:
系统的响应时间就绪队列中的进程数目系统的处理能力

多级反馈队列调度算法(融合了前几种算法的优点)

多级反馈队列调度算法时间片轮转调度算法优先级调度算法的综合与发展,通过动态调整进程优先级和时间片大小,多级反馈队列调度算法可以兼顾多方面的系统目标。例如,为提高系统吞吐量和缩短平均周转时间而照顾短进程;为获得较好的IO设备利用率和缩短响应时间而照顾IO型进程;同时,也不必事先估计进程的执行时间。

多级反馈队列调度算法的实现思想如下:

1)设置多个就绪队列,并为各个队列赋予不同的优先级,第1级队列的优先级最高,第2级队列次之,其余队列的优先级逐次降低。

2)赋予各个队列中进程执行时间片的大小各不相同。在优先级越高的队列中,每个进程的运行时间片越小。例如,第2级队列的时间片要比第1级队列的时间片长1…第i+1级队列的时间片要比第i级队列的时间片长1倍。
3)一个新进程进入内存后,首先将它放入第1级队列的末尾,按FCFS原则排队等待调度。当轮到该进程执行时,如它能在该时间片内完成,便可准备撤离系统;若它在一个时间片结束时尚未完成,调度程序便将该进程转入第2级队列的末尾,再同样按FCFS原则等待调度执行;若它在第2级队列中运行一个时间片后仍未完成,再以同样的方法放入第3级队列…如此下去,当一个长进程从第1级队列依次降到第n级队列后,在第n级队列中便采用时间片轮转的方式运行。

4)仅当第1级队列为空时,调度程序才调度第2级队列中的进程运行;仅当第1~(i- 1)级队列均为空时,才会调度第i级队列中的进程运行。若处理机正在执行第i级队列中的某进程,这时又有新进程进入优先级较高的队列[第1~(i-1)中的任何一个队列] ,则此时新进程将抢占正在运行进程的处理机,即由调度程序把正在运行的进程放回第i级队列的末尾,把处理机分配给新到的更高优先级的进程。

多级反馈队列的优势有以下几点:

1)终端型作业用户:短作业优先。

2)短批处理作业用户:周转时间较短。

3)长批处理作业用户:经过前面几个队列得到部分执行,不会长期得不到处理。

【OS】经典调度算法相关推荐

  1. 重温历史:Palm OS经典游戏于发布20年后公开源代码

    整理 | 彭慧中 责编 | 屠敏 出品 | CSDN(ID:CSDNnews) 近日,慕尼黑的开发者Aaron Ardiri公布了Palm OS经典游戏的源代码,而他正是曾经开发Palm OS的工程师 ...

  2. Autosar OS经典笔记整理:公众号(cloud2sunshine)

    ** 文章版权归 糖果AUTOSAR 所有,转载请注明来源及作者, 盗版必究!! 扫描或长按二维码可关注公众号 01:AUTOSAR OS分析概述 ** - AUTOSAR OS 为实时应用提供了所有 ...

  3. OS轮转调度算法RR的C++实现

    在分时系统中,最简单也是较常见的是基于时间片的轮转(round robin,RR)调度算法.该算法采取了非常公平的处理机分配方式,即让就绪队列中的每个进程仅运行一个时间片,如果就绪队列上有n个进程,则 ...

  4. 操作系统 | OS 经典同步问题之生产者-消费者问题,哲学家进餐问题

    小目录 1. 生产者-消费者问题 2. 哲学家进餐问题 3. 吸烟者问题 1. 生产者-消费者问题 生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语 ...

  5. 多级队列调度算法可视化界面_冷月手撕408之操作系统(8)-处理机调度

    操作系统的处理器资源主要是介绍了,由于多道程序设计带来的并发性,内存中运行多个进程并发运行.而处理器资源是远远小于进程的数量的,所以如何调度处理器给合适的进程成为了OS的焦点. 主要的重点冷月做出了标 ...

  6. 操作系统OS笔记(未完)

    硬件所做的事情 1.产生某种标记,比如中断标记 2.cpu得到这种标记后就会找到对应的中断处理然后告知操作系统 软件(操作系统) 1.保存当前程序状态,比如当前寄存器数据等等,以便中断结束后恢复 2. ...

  7. [转]Mac OS守护进程(服务)列表及优化建议

    /sbin/launchd 系统及用户进程管理器,它是内核装载成功后在OS环境下启动的第一个进程,是Mac OS最重要的进程之一.你无法禁用它. /usr/libexec/kextd 内核扩展服务,响 ...

  8. LTE系统上行链路调度算法研究

     <北京交通大学> 2013年 LTE系统上行链路调度算法研究 徐莹莹   [摘要]:3GPP长期演进(LTE)具有更低的传输时延.更高的传输速率.优化网络架构.降低运营费用等众多优点 ...

  9. 【笔记整理 - 操作系统】(时间较早)

    资料来源:<操作系统概念> 绪论部分 一些名词解释 硬件:计算机系统的基本计算资源. 应用程序:用户要使用计算资源解决问题,应用程序决定了使用资源的方式. 操作系统:控制硬件.协调各个应用 ...

最新文章

  1. java内存泄漏问题排查
  2. 某程序员总结大厂程序员性格:阿里出来的是人精!百度出来的脾气好!美图出来的一根筋!头条出来的心高气傲!京东出来的满嘴是兄弟!...
  3. NERDTree这个插件的用法简介
  4. python中str和input_对python中raw_input()和input()的用法详解
  5. mySQL建表允许最多多少字段?
  6. 关于form组件的补充-------formChoice
  7. Java 反射机制深入研究
  8. 带你认识FusionInsight Flink:既能批处理,又能流处理
  9. F5实现2台机器的热备 Priority Group Activation
  10. 正态分布下贝叶斯决策的引入
  11. 集成高德地图:com.autonavi.amap.mapcore.nativeNewInstance
  12. 四叶草efi_Clover EFI bootloader for Mac(四叶草启动引导工具)
  13. JAVA实战小项目——图书馆管理系统
  14. 谷歌应用程序无法启动,因为应用程序的并行配置不正确的问题解决方案
  15. 什么是拓扑结构_拓扑结构图
  16. 百度推广系列之优化之笔
  17. CTF初学笔记解题-密码1
  18. NLP基础入门:Word2Vec模型
  19. Keil 4 安装教程及简单使用【嵌入式系统】
  20. cf手游服务器维护19年9月19,CF9月新灵狐的约定计划活动_2019CF9月新灵狐的约定计划活动网址_快吧游戏...

热门文章

  1. r语言pls分析_R语言中的偏最小二乘回归PLS-DA
  2. python 摄像头标定_python 3利用Dlib 19.7实现摄像头人脸检测特征点标定
  3. mysql中having的例子_mysqlgroupby/having/distinct查询使用例子_MySQL
  4. Android中.9.png图片的使用过程和原理
  5. 使用BaseAdapter实现复杂的ListView
  6. 洛谷 P3853 [TJOI2007]路标设置
  7. 设计模式-模版方法模式
  8. 崩溃日志记录Landroid/support/v4/animation/AnimatorCompatHelper
  9. vim多窗口使用技巧
  10. jdbctemplate 批量操作