【操作系统】进程调度(2b):STCF(最短完成时间优先) 算法 原理与实践
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(最短完成时间优先) 算法 原理与实践相关推荐
- 一、操作系统——处理机(作业)调度算法:先来先服务算法FCFS、最短作业优先算法SJF(非抢占式)、 最短剩余时间优先算法SRTN(抢占式)、最高响应比优先算法HRRN
各种调度算法的学习思路: 调度算法的评价指标: 一.先来先服务算法(FCFS):First Come First Serve 二.最短作业优先算法(SJF非抢占式):Shortest Job Firs ...
- 最短寻道时间优先算法c语言程序,操作系统先来先服务、最短寻道时间优先(SSTf)、扫描算法(SCAN)、循环扫描算法(CSCAN)的c++实现.doc...
先来先服务(FCFS).最短寻道时间优先(SSTf).扫描算法(SCAN).循环扫描算法(CSCAN) 最后有运行截图. #include #include #include #include int ...
- 【操作系统】进程调度(3):RR(轮转) 算法 原理与实践
0 前言 接上一篇文章:进程调度(2b):STCF(最短完成时间优先) 算法 原理与实践 1 前提铺垫 除了与上一篇相同的,这里介绍新的基础知识. 1.1 三种类型的程序 计算密集型(CPU导向) 输 ...
- 【操作系统】进程调度(2a):SJF(短任务优先) 算法 原理与实践
0 前言 接上一篇文章:进程调度(1):FIFO(先进先出)算法 原理与实践 1 前提铺垫 请参考上一篇文章的前提铺垫部分,本文与之完全一致. 2 SJF 原理 SJF(Shortest Job Fi ...
- 【操作系统】进程调度(1):FIFO(先进先出)算法 原理与实践
0 前言 本文基于书籍<Operating System:Three Easy Pieces>. 中译本:<操作系统导论>,中译本质量还可以,但是英文版后来的更新,中文版目前没 ...
- kmeans算法原理以及实践操作
原文:http://www.cnblogs.com/dudumiaomiao/p/5839905.html kmeans算法原理以及实践操作(多种k值确定以及如何选取初始点方法) kmeans一般在数 ...
- LSA/LSI算法原理和实践
本篇文章主要转载自LSI/LSA算法原理与实践Demo 目录: 1.使用场景 2.优缺点 3.算法原理 3.1.传统向量空间模型的缺陷 3.2.Latent Semantic Analysis (La ...
- Apollo星火计划学习笔记——Apollo开放空间规划算法原理与实践
文章目录 前言 1. 开放空间规划算法总体介绍 1.1 Task: OPEN_SPACE_ROI_DECIDER 1.2 Task: OPEN_SPACE_TRAJECTORY_PROVIDER 1. ...
- 特征值 与特征向量(机器学习算法原理与实践)
取至:机器学习算法原理与编程实践(郑捷) # -*- coding: utf-8 -*- # Filename : matrix05.py import operator from numpy imp ...
最新文章
- 10.05 最初对Linux的了解,对Shell的认识
- 如何正确使用迁移学习
- 基于ATT和CK™框架的开放式方法评估网络安全产品
- 牛逼轰轰!GitHub 上 Star 量最高的 5 个机器学习项目
- python批量复制粘贴_用python批量复制特定图片
- CSS→代码语法、优先级、选择器、权值、字体文本、颜色、长度值、块状内联元素、盒模型、布局模型→层模型绝对相对定位、div排列、水平居中
- 【考研经验分享】2020信工所二室双非上岸经验贴
- 计算机掌握录音机的使用方法,如何使用2种方法从计算机录制音频
- pip install清华镜像源
- 刷题一个半月,一口气拿下腾讯、华为、Oppo 、微软7个大厂offer,字节跳动薪资涨幅60%!...
- QT-常用函数参数详解之painter->fillRect(),预设值的颜色展示
- 关于yuv rtp 打包_【讲堂】关于KNX编程基本规律
- SingleShot姿态估计部署教程
- 上进的凡凡,幸运数组,字符串魔法(easy)
- Linux中静态库和动态库(共享库)的区别
- 康瞳新零售护眼产品新系统 零售商城
- Automatic differentiation in PyTorch
- 如何更改vs2013,vs2019等编译器的背景,更换壁纸
- NS中如何编制带有期初/发生/期末余额的资产负债表?
- 微信小程序实现wxml中数据保留小数或取整
热门文章
- Codevs 2756 树上的路径
- 【UVA 10816】 Travel in Desert (最小瓶颈树+最短路)
- 优化算法的意义,之二。
- linux子系统备份,使用LxRunOffline工具备份/还原Linux子系统(WSL)
- 用php求矩形周长,PHP实现的简单三角形、矩形周长面积计算器分享
- 用java单源最短路径问题_单源最短路径-贪心算法
- 图解 继电器模组接线图_交流接触器,继电器的知识你了解多少?(值得收藏)...
- python程序会监控错误的语句_python装饰器实现对异常代码出现进行自动监控
- html5 测评游戏,暗黑之王评测:HTML5游戏铸就最华丽ARPG冒险
- yaf 重写index.php,php框架Yaf路由重写实例代码