0 前言

接上一篇文章:进程调度(2a):SJF(短任务优先) 算法 原理与实践

1 前提铺垫

与上一篇同。

2 STCF 原理

STCF(Shortest Time-to-Completion First)最短完成时间优先。

2.1 算法

还记得上一个算法SJF吗?它是非抢占式的,只能傻傻地等着长任务A完成,这显然是“懦弱”的,并且降低了系统的效率,因此,让我们给它添加一个抢占功能吧!

抢占什么呢?当然是A了,还是用上次的例子

  • A:100
  • B:10
  • C:20

A在0时刻到达并执行,B和C在10时刻到达。之前B和C只能等着A结束执行再按照B、C的顺序执行,现在,我们有抢占功能了!

在时刻10的时候,Scheduler(调度器)发现B和C的执行时间比A短,那么好,A你就不要再执行了,让B先来吧! 这里,我们也使用到了上下文切换机制,先保存了A执行的状态,等B、C执行完,再让A继续执行。

一个问题:究竟是识别A剩余执行时间,还是全部执行时间,又或者什么呢?A、B和C的执行时间,系统又怎样得知?这些我们以后再谈,并且这设计到了具体实现的层次,现在,我们的假设还是运行时间是已知的,并且是在抽象层次在谈论。


这样,看起来就比之前的SJF棒多了!起码它学会了“抢车位”。

现在,Average Turnaround Time = (10 + 30 + 130)/ 3 = 56.67,要知道,之前可是110。

不过,这个算法也会有一些问题,我们下面说一下。

2.2 缺点:长任务“饥饿”

试想一下,对于一个长任务,如果有远远不断地短任务进入,那么这个长任务可能永远不会被执行了……(它也太惨了……)

不仅如此,对于一个交互型程序来说,与用户交互的响应时间(我们下一讲说这个指标,简单来说,就是用户发送命令,到看见屏幕产生变化的时间,这应该很快才对)就会非常长,想象一下,你敲击键盘的字母A后,等待10s才看见屏幕上显示了A……这简直让人发疯!

说明:在原书中没有给出STCF算法的模拟,因此暂时没有实践内容,不过因为该算法与SJF的区别就在于抢占,因此比较容易理解。

2.3 关注点:顺序执行的打破

我们之前看到的进程,都是从一开始执行,就一直执行到完成才停止,这个过程并不需要上下文切换机制(前面的篇章好像写错了……),而这一次,我们看到了任务A被分成了两段来执行,这时候就使用到了上下文切换机制了,被打断的A,必须要保存现场,然后下一次被执行的时候,恢复现场继续执行。

这也是我们第一次见到,多个任务不是顺序执行的,而是切换执行的,下一篇轮转算法,你将更清晰地体会到这一点!

3 核心思想

STCF与SJF本质是一样的,区别就是,前者是抢占式,后者是非抢占式的。

核心思想就是,让运行时间短的任务先执行

这样做的缺点也分析过,长任务可能一直得不到执行,后续我们会解决这个问题的。

4 预告:进程调度(3):RR(轮转) 算法 原理与实践

我们接下来会使用轮转算法解决交互式程序响应时间问题。这样能让用户获得很好的体验。

下一篇链接:RR(轮转) 算法 原理与实践

【操作系统】进程调度(2b):STCF(最短完成时间优先) 算法 原理与实践相关推荐

  1. 一、操作系统——处理机(作业)调度算法:先来先服务算法FCFS、最短作业优先算法SJF(非抢占式)、 最短剩余时间优先算法SRTN(抢占式)、最高响应比优先算法HRRN

    各种调度算法的学习思路: 调度算法的评价指标: 一.先来先服务算法(FCFS):First Come First Serve 二.最短作业优先算法(SJF非抢占式):Shortest Job Firs ...

  2. 最短寻道时间优先算法c语言程序,操作系统先来先服务、最短寻道时间优先(SSTf)、扫描算法(SCAN)、循环扫描算法(CSCAN)的c++实现.doc...

    先来先服务(FCFS).最短寻道时间优先(SSTf).扫描算法(SCAN).循环扫描算法(CSCAN) 最后有运行截图. #include #include #include #include int ...

  3. 【操作系统】进程调度(3):RR(轮转) 算法 原理与实践

    0 前言 接上一篇文章:进程调度(2b):STCF(最短完成时间优先) 算法 原理与实践 1 前提铺垫 除了与上一篇相同的,这里介绍新的基础知识. 1.1 三种类型的程序 计算密集型(CPU导向) 输 ...

  4. 【操作系统】进程调度(2a):SJF(短任务优先) 算法 原理与实践

    0 前言 接上一篇文章:进程调度(1):FIFO(先进先出)算法 原理与实践 1 前提铺垫 请参考上一篇文章的前提铺垫部分,本文与之完全一致. 2 SJF 原理 SJF(Shortest Job Fi ...

  5. 【操作系统】进程调度(1):FIFO(先进先出)算法 原理与实践

    0 前言 本文基于书籍<Operating System:Three Easy Pieces>. 中译本:<操作系统导论>,中译本质量还可以,但是英文版后来的更新,中文版目前没 ...

  6. kmeans算法原理以及实践操作

    原文:http://www.cnblogs.com/dudumiaomiao/p/5839905.html kmeans算法原理以及实践操作(多种k值确定以及如何选取初始点方法) kmeans一般在数 ...

  7. LSA/LSI算法原理和实践

    本篇文章主要转载自LSI/LSA算法原理与实践Demo 目录: 1.使用场景 2.优缺点 3.算法原理 3.1.传统向量空间模型的缺陷 3.2.Latent Semantic Analysis (La ...

  8. Apollo星火计划学习笔记——Apollo开放空间规划算法原理与实践

    文章目录 前言 1. 开放空间规划算法总体介绍 1.1 Task: OPEN_SPACE_ROI_DECIDER 1.2 Task: OPEN_SPACE_TRAJECTORY_PROVIDER 1. ...

  9. 特征值 与特征向量(机器学习算法原理与实践)

    取至:机器学习算法原理与编程实践(郑捷) # -*- coding: utf-8 -*- # Filename : matrix05.py import operator from numpy imp ...

最新文章

  1. 10.05 最初对Linux的了解,对Shell的认识
  2. 如何正确使用迁移学习
  3. 基于ATT和CK™框架的开放式方法评估网络安全产品
  4. 牛逼轰轰!GitHub 上 Star 量最高的 5 个机器学习项目
  5. python批量复制粘贴_用python批量复制特定图片
  6. CSS→代码语法、优先级、选择器、权值、字体文本、颜色、长度值、块状内联元素、盒模型、布局模型→层模型绝对相对定位、div排列、水平居中
  7. 【考研经验分享】2020信工所二室双非上岸经验贴
  8. 计算机掌握录音机的使用方法,如何使用2种方法从计算机录制音频
  9. pip install清华镜像源
  10. 刷题一个半月,一口气拿下腾讯、华为、Oppo 、微软7个大厂offer,字节跳动薪资涨幅60%!...
  11. QT-常用函数参数详解之painter->fillRect(),预设值的颜色展示
  12. 关于yuv rtp 打包_【讲堂】关于KNX编程基本规律
  13. SingleShot姿态估计部署教程
  14. 上进的凡凡,幸运数组,字符串魔法(easy)
  15. Linux中静态库和动态库(共享库)的区别
  16. 康瞳新零售护眼产品新系统 零售商城
  17. Automatic differentiation in PyTorch
  18. 如何更改vs2013,vs2019等编译器的背景,更换壁纸
  19. NS中如何编制带有期初/发生/期末余额的资产负债表?
  20. 微信小程序实现wxml中数据保留小数或取整

热门文章

  1. Codevs 2756 树上的路径
  2. 【UVA 10816】 Travel in Desert (最小瓶颈树+最短路)
  3. 优化算法的意义,之二。
  4. linux子系统备份,使用LxRunOffline工具备份/还原Linux子系统(WSL)
  5. 用php求矩形周长,PHP实现的简单三角形、矩形周长面积计算器分享
  6. 用java单源最短路径问题_单源最短路径-贪心算法
  7. 图解 继电器模组接线图_交流接触器,继电器的知识你了解多少?(值得收藏)...
  8. python程序会监控错误的语句_python装饰器实现对异常代码出现进行自动监控
  9. html5 测评游戏,暗黑之王评测:HTML5游戏铸就最华丽ARPG冒险
  10. yaf 重写index.php,php框架Yaf路由重写实例代码