目录

0、前置知识

0.1 调度性能指标

0.2 上下文切换

1、进程调度算法简单介绍

1.1 先进先出(FIFO)

1.2 最短任务优先(SJF)

1.3 最短完成时间优先(STCF)

1.4 轮转(RR)

2、多考虑一些情况

2.1 结合I/O

2.2 工作长度未知

3、小结

3.1 各自的优缺点

4、提到的其他技术

4.1 摊销(amortization)

4.2 重叠(overlap)


0、前置知识

0.1 调度性能指标

周转时间:周转时间 = 完成时间 - 到达时间

响应时间:响应时间 = 首次运行时间 - 到达时间

0.2 上下文切换

当一个进程停止时,他的寄存器将被保存在这个内存位置。通过恢复这些寄存器(将他们的值放回实际的物理寄存器中),操作系统可以恢复运行该进程。这种技术叫做上下文切换

1、进程调度算法简单介绍

1.1 先进先出(FIFO)

先进先出(First In First Out)调度是我们可以实现的最基本的算法,有时也被称为先到先服务(First Come First Served或FCFS)。

优点:简单,易于实现。

举个例子看看为什么FIFO不好:假设A(100s)、B(10s)、C(10s)三个工作几乎同时来到系统,A稍微比B早一点,B稍微比C早一点,那么,一定要等到A完成后,B才有机会运行。所以系统平均周转时间为:

(100+110+120)/ 3 = 110 s

这个问题通常被称作护航效应,简单来说,就是一些耗时较少的潜在资源消费者被排在重量级资源消费者之后。

那么如何解决这个问题呢?咱们接着往下看:

1.2 最短任务优先(SJF)

最短任务优先(Shortest Job First)很好地解决了这个问题。它的策略为:先运行最短的任务,然后运行次短的任务。

当在只考虑平均周转时间的情况下,SJF显然比FIFO要好的多,同样是上面的例子,平均周转时间为:

(10+20+100)/ 3 = 50 s

事实上,考虑到所有工作同时到达的假设,我们几乎可以证明SJF确实是最优的调度算法。然而,当我们考虑实际:工作可以随时到达,这又会出现什么情况呢?

我们再用一个例子来说明:假设 A 在 t = 0 时到达,且需要运行 100s。而 B 和 C 在 t = 10 到达,且各需要运行 10s。用SJF,平均周转时间为:

(100 + (90+10)+ (100+10))/ 3 = 103.33

可以看到,SJF遭遇了同样的护航问题。

1.3 最短完成时间优先(STCF)

事实上,当 B 和 C 到达时,调度程序当然可以做其他事情:它可以抢占(preempt)工作 A,并决定运行另一个工作,或许稍后继续工作 A。那么,为了解决刚才遭遇的护航问题,我们可以向SJF添加抢占:称为最短完成时间优先(Shortest Time-to-Completion First,STCF)或抢占式最短作业优先(Preemptive Shortest Job First ,PSJF)调度程序。

他的做法是这样的:每当新工作进入系统时,它就会确定剩余工作和新工作中,谁的剩余时间最少,然后调度该工作。

补充一点:几乎所有现代化的调度程序都是抢占式的(preemptive),非常愿意停止一个进程以运行另一个进程。这意味着调度程序采用了我们之前学习的机制。特别是调度程序可以进行上下文切换,临时停止一个运行进程,并恢复(或启动)另一个进程。

因此,在我们的例子中,STCF 将抢占 A 并运行 B 和 C 以完成。只有在它们完成后,才能调度 A 的剩余时间。平均周转时间为:

(120+10+20)/ 3 = 50 s

其实,考虑可抢占的假设,可以证明STCF为最优的调度算法。

那么,假如加入新的度量指标:响应时间呢?

还是使用刚才的例子:A 在时间 0 到达,B 和 C 在时间 10 达到,假如使用STCF,平均响应时间为:

(0 + 0 + 10)/ 3 = 3.33 s

而非抢占式的FIFO和SJF的响应时间都是0s,可以看出,STCF虽然有很好的周转时间,但对于响应时间和交互性上是糟糕的。就好像我们在终端按下回车,肯定不希望在10s之后才给我们显示内容。

为此,我们要引入一个新的调度算法。

1.4 轮转(RR)

轮转(RR)调度的基本思想很简单:RR 在一个时间片内运行一个工作,然后切换到运行队列中的下一个任务,而不是运行一个任务直到结束。它反复执行,直到所有任务完成。

请注意:时间片长度必须是时钟中断周期的倍数。

为了更详细地理解 RR,我们来看一个例子:假设 3 个任务 A(5s)、B (5s)和 C(5s) 在系统中同时到达。SJF 调度程序必须运行完当前任务才可运行下一个任务。相比之下,1s 时间片的 RR 可以快速地循环工作。

SJF的平均响应时间是:(0+5+10)/ 3 = 5 s

RR的平均响应时间是:(0+1+2)/ 3 = 1 s

如你所见,时间片长度对于 RR 是至关重要的。越短,RR 在响应时间上表现越好。然而,时间片太短是有问题的:突然上下文切换的成本将影响整体性能。因此,系统设计者需要权衡时间片的长度,使其足够长,以便摊销(amortize)上下文切换成本,而又不会使系统不及时响应。

可是,如果再回过头来看周转时间,我们会发现,RR几乎是最差的。但这并不奇怪,如果周转时间是我们的指标,那么 RR 确实是最糟糕的策略之一。直观地说,这应该是有意义的:RR 所做的正是延伸每个工作,只运行每个工作一小段时间,就转向下一个工作。而因为周转时间只关心作业何时完成。

2、多考虑一些情况

2.1 结合I/O

交互式作业正在执行 I/O 时,其他 CPU 密集型作业将运行,从而更好地利用处理器。

2.2 工作长度未知

事实上,在一个通用的操作系统中,操作系统通常对每个作业的长度知之甚少。因此,我们如何建立一个没有这种先验知识的 SJF/STCF?更进一步,我们如何能够将已经看到的一些想法与 RR 调度程序结合起来,以便响应时间也变得很好?这就是我们接下来要讲的问题:多级反馈队列(MLFQ)调度方法  操作系统学习(二):浅析多级反馈队列MLFQ

3、小结

按照我们介绍的顺序,几种调度算法可以这样串起来:

3.1 各自的优缺点

FIFO        优点:简单

缺点:平均周转时间长(护航问题)

SJF          优点:作业同时到达时,平均周转时间短

缺点:作业不同时到达时,同样面临护航问题

STCF       优点:作业不同时到达时,平均周转时间短

缺点:响应时间长

RR            优点:响应时间短

缺点:平均周转时间长

4、提到的其他技术

4.1 摊销(amortization)

摊销可以减少成本。

当系统某些操作有固定成本时,通常会使用摊销技术(amortization)。通过减少成本的频度(即执行较少次的操作),系统的总成本就会降低。例如,如果时间片设置为 10ms,并且上下文切换时间为 1ms,那么浪费大约 10%的时间用于上下文切换。如果要摊销这个成本,可以把时间片增加到 100ms。在这种情况下,不到 1%的时间用于上下文切换,因此时间片带来的成本就被摊销了。

4.2 重叠(overlap)

如有可能,重叠(overlap)操作可以最大限度地提高系统的利用率。重叠在许多不同的领域很有用,包括执行磁盘 I/O 或将消息发送到远程机器时。在任何一种情况下,开始操作然后切换到其他工作都是一个好主意,这也提高了系统的整体利用率和效率。

操作系统学习(一):浅析操作系统进程调度算法相关推荐

  1. Java操作系统进程调度算法——时间片轮转(RR)算法

    Java操作系统进程调度算法--时间片轮转(RR)算法 文章目录 Java操作系统进程调度算法--时间片轮转(RR)算法 前言 一.算法思想 二.数据结构 1.定义PCB进程控制块 2.实现思路 三. ...

  2. Java操作系统进程调度算法——优先级调度(HPF)算法

    Java操作系统进程调度算法--优先级调度(HPF)算法 文章目录 Java操作系统进程调度算法--优先级调度(HPF)算法 前言 一.算法思想 二.数据结构 1.定义(PCB)进程控制块 2.实现思 ...

  3. 操作系统进程调度算法,进程调度实验

    操作系统进程调度算法 1 题目描述 1.1 实验目的 用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解. 1.2 实验内容 编写并调试一个模拟的进程调度程序,采用简单时间片 ...

  4. Java操作系统进程调度算法——先来先服务(FCFS)算法

    Java操作系统进程调度算法--先来先服务(FCFS)算法 Java操作系统进程调度算法--先来先服务(FCFS)算法 文章目录 Java操作系统进程调度算法--先来先服务(FCFS)算法 前言 一. ...

  5. 内功修炼之操作系统学习(一操作系统概述)。

    一:操作系统概述. 操作系统:管理系统资源.控制程序运行.改善人机界面.提供各种服务,并合理组织计算机工作流程和为用户方便而有效的使用计算机提供良好的运行环境的最基本的系统软件 . 传统的操作系统中是 ...

  6. 操作系统学习1:操作系统概述

    操作系统概述 什么是操作系统? 操作系统(Operating System,简称OS)是一个系统软件,它管理计算机的软硬件资源,并为计算机程序提供服务. 操作系统的五大功能 文件管理 文件管理包括:存 ...

  7. OS / 几个常用的操作系统进程调度算法

    在操作系统中存在多种调度算法,其中有的调度算法适用于作业调度,有的调度算法适用于进程调度,有的调度算法两者都适用.下面介绍几种常用的调度算法. 一.先来先服务(FCFS)调度算法 FCFS 调度算法是 ...

  8. 操作系统进程调度算法——吸烟者问题

    问题描述: 假设一个系统有三个吸烟者进程和一个供应者进程,每个吸烟者都需要得到三个资源才能完成吸烟操作并且他们每人都持有这三种资源中的一种,供应者一次只能提供三种资源中两种的组合,并且要等到接收到吸烟 ...

  9. 操作系统进程调度算法(FCFS、SJF、高响应比)

    进程调度算法(FCFS.SJF.高响应比) 一.算法描述 1.先来先服务(FCFS)调度算法 (1)FCFS是最简单的调度算法,该算法可用于作业调度,也可用于进程调度. (2)算法规则:系统按照作业到 ...

最新文章

  1. 联通突然从4g变成3g了_中国联通最快明年底2G全面退网 并推进3G逐步退网
  2. 【Python基础】Python3十大经典错误及解决办法
  3. SSH框架第一天——hibernate框架
  4. windows 环境下Eclipse开发MapReduce环境设置
  5. linux内核怎么修改屏幕旋转方向_树莓派4—屏幕旋转
  6. python for循环n次_Python入门10 —— for循环
  7. mysql性能优化 洪斌_洪斌 - MySQL性能诊断与实践
  8. SLAM中直接法分类及对应的项目
  9. 大屏数据可视化效果如何提升
  10. sqlite3 加密版本 下载_【平凡666】单机游戏管理器(支持未加密游戏管理) - 游戏相关...
  11. 易云维医院后勤管理系统浅谈医院空调设备管理的问题及优化建议
  12. 敏捷开发vs 传统开发
  13. 2023年计算机专业毕业设计选题有哪些?(附源码)
  14. 企业即时通讯系统十大排名
  15. (三)沟通管理风险管理采购管理@相关方管理
  16. 极客时间限时免费开放全部课程!别纠结了选这几门!
  17. 使用Unity调用派样机技术小结
  18. C++利用openssl进行公钥解密
  19. unity 如何创建六边形地图
  20. 装机软件测试工资,实际性能测试及总结_DIY攒机装机不求人-中关村在线

热门文章

  1. 培智认识计算机教案,培智学校普通教室设备配备要求.doc
  2. 10.11 10.12 英语单词
  3. TensorFlow Lite 是什么?用 TensorFlow Lite 来转换模型(附代码)
  4. 问题:Xcode8更新之后模拟器找不到了
  5. 五十.商品管理-SPU检索功能
  6. 【博学谷学习记录】超强总结,用心分享 |产品经理-关于竞品分析(二)
  7. ORB SLAM3论文大致翻译,手动整理
  8. HttpClient设置超时时间无效
  9. portainer 集群环境_Portainer 中文文档:部署
  10. 未来的计算机元器件,代表未来的不是量子计算机,光计算机才是?