常见的作业调度和进程调度算法

首先,我们来解释一下一会儿需要使用到的几个名词,分别是:调度、调度算法、作业调度、进程调度。

  • 调度:操作系统管理的系统资源有限,当有多个进程(或多个进程发出的请求)要使用这些资源时,必须按照一定的原则选择进程(请求)来占用资源。也就是说调度的实质是一种资源分配。
  • 调度算法:根据系统的资源分配策略所规定的资源分配算法。
  • 作业调度:根据JCB中的信息,检查系统中的资源是否能满足作业对资源的需求,以及按照一定的调度算法,从外存的后备队列中选取某些作业调入内存,并为他们创建进程,分配必要的资源,然后再将新创建的进程排在就绪队列上等待调度。因此,也把作业调度称为接纳调度。
  • 进程调度:当计算机系统处于就绪状态的用户进程数多于CPU数时,就会产生多个进程或线程同时竞争CPU的结果。假设现在只有一个CPU可用,那么操作系统就必须选择一个进程运行,并把处理机分配给该进程。
  • 非抢占式算法:在采用这种调度方式时,一旦把处理机分配给某进程时,就让它一直运行下去,绝不会因为时钟中断或者任何其他原因去抢占当前正在运行晋城的处理机,直至该进程完成,或者因为发生某件事被阻塞时,才把处理机分配给别的进程。
  • 抢占式算法:这种调度方式允许调度程序根据某种规则,去暂停某个正在执行的进程,将已经分配给该进程的处理机重新分配给另一进程。(当然,抢占是有一定原则的:1)优先权原则;2)短进程优先原则;3)时间片原则)

接下来我们分别讲解一下几种常见算法以及它们适用的调度类型。

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

算法思想 算法规则 适用调度类型 是否可以抢占 优点 缺点 是否会饥饿
主要从公平的角度考虑 按照作业/进程到达的先后顺序进行调度 ,即:优先考虑在系统中等待时间最长的作业 进程调度和作业调度 非抢占式算法 满足公平原则,且算法容易实现,比较利于长作业/进程 排在长进程后的短进程的等待时间大,而且带权周转时间大,不利于短作业/进程 不会

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

在这里我们需要注意一下:短进程调度算法简称为SPF

算法思想 算法规则 适用调度类型 是否可以抢占 优点 缺点 是否会饥饿
实际上,短进程/作业(要求服务时间最短)在实际情况中占有很大比例,为了使得它们优先执行,追求最少的平均等待时间时间、平均周转时间、平均带权周转时间 要求服务时间最短的进程/作业优先得到服务 进程调度和作业调度 非抢占式算法,但是也有抢占式版本,即:最短剩余时间优先算法(SRTN) 可以得到最少的平均等待时间时间、平均周转时间、平均带权周转时间 不公平,对长作业不友好,对短作业友好 会(短作业优先可能导致长作业一直得不到处理)

高响应比优先调度算法(HRRN)

算法思想 算法规则 适用调度类型 是否可以抢占 优点 缺点 是否会饥饿
综合考虑等待时间和运行时间 在每次调度时,先计算各个作业/进程的优先权:优先权=响应比=(等待时间+要求服务时间)/要求服务时间=相应时间/要求服务时间,选择优先权高的进行服务 进程调度和作业调度 非抢占式算法 综合考虑了等待时间和要求服务时间,在等待时间相同时,要求服务的时间愈短,其优先权愈高,拥有SJF的优点,在要求服务时间相同时,作业的优先权决定于其等待时间,等待时间愈长,其优先权愈高,拥有FCFS的优点 需要计算优先权,增加了系统的开销 不会

时间片轮转调度算法(RR)

算法思想 算法规则 适用调度类型 是否可以抢占 优点 缺点 是否会饥饿
公平的、轮流的为各个进程服务,让每个进程在一定时间间隔内都可以得到响应 系统根据FCFS策略,将所有的就绪进程排成一个就绪队列。轮流让各个进程执行一个时间片的,若进程未在一个时间片内执行完,则被剥夺处理机,将进程放到就绪队列队尾重新排队。 进程调度 抢占式算法 公平、响应快,适用于分时操作系统 由于高频率的进程切换,增加了开销,并且它不区分任务的紧急程度 不会

补充:时间片大小的确定

  • 时间片过小:有利于短作业,因为它能在该时间片内完成,但是,意味着频繁的执行进程调度和进程上下文的切换,增加系统的开销。即:退化为短作业优先算法 。
  • 时间片过大:每个进程都能在一个时间片内完成,即退化为FCFS算法。

优先级调度算法

算法思想 算法规则 适用调度类型 是否可以抢占 优点 缺点 是否会饥饿
根据任务的紧急程度进行调度 调度时选择优先级最高的作业/进程,为其分配处理机 进程调度、作业调度、I/O调度 抢占式算法和非抢占式算法 用优先级区分任务的紧急程度,适用于实时操作系统。 如果有源源不断的高优先级进程到来,那么低优先级的进程可能会饥饿

补充:
1、优先级是利用某一范围内的整数来表示的,又把该整数称为优先数(优先数的大小并不一定和优先级成正比)。确定优先级大小的依据如下;

  • 进程类型
  • 进程对资源的需求
  • 用户要求
    2、优先级的类型有两种:
  • 静态优先级:在创建进程时确定的,在进程的整个运行期间保持不变。虽然静态优先级简单易行,系统开销小,但是不够精确,可能会出现优先级低的进程长期没有被调度的情况。
  • 动态优先级:在创建程序之初,先赋予其一个优先级,然后其值随进程的推进或者等待时间的增加而改变,以获得更好的调度性能。

多级反馈队列调度算法

算法思想 算法规则 适用调度类型 是否可以抢占 优点 缺点 是否会饥饿
对以上调度算法的权衡和弥补 1、设置多个就绪队列,各级队列的优先级由高到低,时间片从小到大;2、新进程到达时先进入第一级队列,按照FCFS的原则排队等待被分配时间片,若时间片已经用完进程还没结束,则进程进入下一级队尾,如果此时进程已经在最低一级的队列,则将其重新放回该队列的队尾;3、只有第k级队列为空时,才会为第k+1级队列分配时间片 进程调度 抢占式算法,当第k级队列在运行过程中,若更上级的队列到来了一个新进程,由于优先级问题,新进程会抢占处理机,并将原来运行的进程放回第k级队列的队尾 对各种类型的进程都比较公平,每个新到达的进程都会很快得到响应,短进程只用较少的时间就可以完成,不用估计进程的运行时间。 / 可能会导致饥饿,概率不大

总结

  • FCFS,SJF,HRRN三种算法主要关心对用户的公平性、平均周转时间、平均等待时间等评价系统整体性能的指标,并不关心相应时间,也不区分任务的紧急程度,交互性糟糕。因此,这三种方式适用于早期的批处理系统。
  • 时间片轮转调度算法(RR),优先级调度算法,多级反馈队列调度算法注重响应时间,公平性等,因此,这三种算法适用于交互式系统。

常见的作业调度和进程调度算法相关推荐

  1. 3.处理机调度——作业调度算法与进程调度算法

    1.作业调度与进程调度算法 作业调度算法: 先来先服务调度算法(FCFS) 短作业优先调度算法(SJF) 优先级调度算法 高响应比优先调度算法 进程调度算法: 先来先服务调度算法(FCFS) 短进程优 ...

  2. 进程调度算法-时间片轮转、最高优先级和多级反馈队列调度算法

    文章目录 前言 一.时间片轮转 二.最高优先级 三.多级反馈队列 总结 前言 从上一篇文章中已经介绍了几种常见的单核CPU进程调度算法,本篇文章顺着上一篇文章的节奏,继续讲解几种剩余常见的进程调度算法 ...

  3. 操作系统中常见的进程调度算法

    一.调度与调度算法 调度:操作系统管理了系统的有限资源,当有多个进程(或多个进程发出的请求)要使用这些资源时,因为资源的有限性,必须按照一定的原则选择进程(请求)来占用资源.这就是调度.目的是控制资源 ...

  4. 计算机操作原理进程调度算法---先来先服务,短进程优先(C语言)

    目录 先来先服务调度算法: 短进程优先调度算法: 两种进程调度算法优缺点 思维导图 程序代码: 先来先服务调度算法: 先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可 ...

  5. linux进程--进程调度算法(十三)

    1.先来先服务(FCFS)调度算法(非抢占) 先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度.当在作业调度中采用该算法时,每次调度都是从后备作业队列中选 ...

  6. 操作系统:进程调度算法

    进程调度算法 基本调度算法: 1.   先来先服务FCFS:既可以作为作业调度算法也可以作为进程调度算法:按作业或者进程到达的先后顺序依次调度:因此对于长作业比较有利. 算法优点:易于理解且实现简单, ...

  7. 操作系统(5)-进程调度算法

    一.概述 [百度百科]在操作系统中调度是指一种资源分配,因而调度算法是指:根据系统的资源分配策略所规定的资源分配算法.对于不同的的系统和系统目标,通常采用不同的调度算法,例如,在批处理系统中,为了照顾 ...

  8. 使用动态优先权的进程调度算法的模拟_我爱OS第12讲:系统调度

    操作系统必须为多个进程分配计算机资源.对于处理机而言,可分配的资源是在处理机上的执行时间.处理机是计算机系统中的重要资源,处理机调度算法不仅对处理机的利用率和用户进程的执行有影响,同时还与内存等其他资 ...

  9. 【操作系统 - 1】先来先服务FCFS和短作业优先SJF进程调度算法

    操作系统系列 学习至此,发现很多学了但很久没用的知识,久而久之,慢慢遗忘.等哪天还需要的话,却发现已经忘得差不多了,即使整理了文档(word等),还是得从头再学一遍.读研第一学期,发现很多东西都可以从 ...

最新文章

  1. Xamarin开发Anroid应用介绍
  2. 【移动开发】Android应用开发者应该知道的东西
  3. catch里面不想做任何处理_Java 如何优雅处理 Exception? 看完这 9 个示例你秒懂
  4. haproxy小结(一)基础概念篇
  5. JAVA泛型编程笔记
  6. HTML学习笔记16——尺寸的表示_px、%、em三种
  7. ASP.NET Core 3.0:将会拥有更少的依赖
  8. 鱼不长肢蛇不长脚,多多益善更烦恼?人猴嵌合肥胖有救,生活还要压力要小!...
  9. leetcode —— 12. 整数转罗马数字
  10. 二次优化问题dfp_MATLAB优化问题应用实例讲解
  11. error LNK2001: 无法解析的外部符号 _ft_sdf_renderer_class/ _ft_bitmap_sdf_renderer_class
  12. 现代密码法学算法分类
  13. SQL查询前几条数据的方法
  14. php新浪微博开发平台,PHP+新浪微博开放平台+新浪云平台(SAE)开发微博应用
  15. 泰拉瑞亚服务器云存档文件夹,泰拉瑞亚服务器云存档文件
  16. oraoledb.oracle.11,Oracle11g链接提示未“在本地计算机注册“OraOLEDB.Oracle”解决方法...
  17. Banana Pi BPI-R2 Pro 开源路由器采用瑞芯微Rockchip RK3568芯片方案设计
  18. PHP+Apache安装for windows
  19. JS原生事件如何绑定
  20. “AI+”将比“互联网+”落地更容易

热门文章

  1. 数据科学走向“去技术化”?投资银行家的转型新方向是数据科学
  2. 宽带连接错误,错误代码720问题
  3. 关于暴力女,玫瑰骑士
  4. 求知讲堂python+人工智能 99天完整版 学完可就业+某某教程Python 100例————作业(持续更新)
  5. 地下城与勇士(DNF)寂静城副本(倒悬的瞭望台、卢克的聚光镜、钢铁之臂、能源熔炉、光之舞会、王的书库)
  6. macOS如何重装系统
  7. python aes new_填充不正确。AES Python加密
  8. 是指能够被程序员看到的计算机系统的属性,计算机组成原理第2版(唐朔飞)习题答案.doc...
  9. python多线程爬取世纪佳缘女生资料并简单数据分析
  10. 香港科技大学计算机博导陈,香港科技大学刘云浩博士到我院讲学