【操作系统】进程调度(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(轮转) 算法 原理与实践

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/384674.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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

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

【操作系统】进程调度(4):I/O、不可预测的运行时间

0 前言 上一篇文章:进程调度(3):RR(轮转) 算法 原理与实践 1 前提铺垫 与上一篇同。 2 引入I/O操作 之前我们一直提及的是计算密集型程序,现在我们的程序可以进行I/O交互了,它会…

【计算机系统设计】重点 · 学习笔记(0)

HDL等硬件描述语言,例如Verilog,是并行的,而不像软件一样的顺序执行的,例如很多的always块,initial块,都是并行的,他们会转换为硬件电路,而在仿真的时候,他们也是并发执行…

【计算机系统设计】学习笔记(1)03,04

疑问:sw和lw指令,获取的地址不是4的整倍数(字节不对齐)的时候,应该如何处理? 东南大学MOCC 计算机系统综合设计 03 03-1 寄存器 介绍了MIPS寄存器,32个寄存器的基本功能和使用,注…

【期末考试】计算机网络、网络及其计算 考试重点

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 计算机网络及其计算 期末考点 🚀数…

【计算机系统设计】学习笔记(2)

5.1 对于CPU与外界的读写,只有load和store指令能够做,所以很多情况下,直接通过bypass跳过去了,或者闲置,尤其对于流水线,更应该直接跳过而不是闲置(如何设计?)。 另一方面&#xf…

【计算机系统设计】重点 · 学习笔记(1)(资源消耗)

这一点先浅显理解,就好比我要造一个楼 我是用现成的材料造节省?还是需要用XX材料,但是XX材料还需要现成材料造呢? 这也不一定,但是基本来说,如果使用现有资源,能够直接用,那其实是最好不过的…

【计算机系统设计】重点 · 学习笔记(0)(数据通路设计思想)

重点1:05.1 设计思想 设计思想至关重要,这决定了你能不能自己根据ISA设计出来CPU架构,而不是只是抄别人的,也决定你能不能完成自己的设计更优化的架构。 描述方式约定 6 数据通路 ≠ Verilog代码 我们构建的数据通路&#…

【计算机系统设计】实践笔记(1)数据通路构建:取指部件分析

0 核心思想 根据指令功能,分析出需求,从而得出需要的部件、控制信号以及其他设计。 1. 针对的指令 取指阶段,针对所有指令,任何指令都需要进行取指。 2 功能(需求)分析 CPU的内部采用的是字节编址&…

【计算机系统设计】实践笔记(2)数据通路构建:第一类R型指令分析(1)

0 回顾 上一次实践笔记(0)我们实现了一个最简单的,能够每个上升沿4的PC。 我们最需要关注的就是器件功能的独立性,避免内外功能混杂,同时一定要注意脑中有电路(RTL级描述的抽象电路而不是实际的门级电路&…

接口的抽象与实现(概述)

概述 我们先建立一个整体的接口格局观,建立知识地图,了解接口的大概面貌。 整体来说,就这点事儿,4个箭头代表了所有! 三个器件4个箭头 把这几个都想明白,就完事儿了。 第一层(顶层&#xf…

从功能层次,阐述CPU、接口和外设之间的交互

我们从功能抽象层次,阐述一下CPU、接口芯片和外设之间的交互情况: 三个器件4个箭头 我们依次将其描述清楚。 数据 箭头①和③ CPU给接口可以发送数据,然后接口暂存数据,之后再发给外设,这就是数据缓冲。 发送的数…

Vivado工程文件分类

只需要在创建的时候,选择自定义路径即可,最好在原有的new文件夹下新建文件夹。 至于路径的匹配,可以自己试试,在原有默认new下创建文件夹,选中新的文件夹后,内部的Verilog文件可以访问外部new文件夹的文件&…

【微机原理与接口技术】具体芯片(1)并行接口8255A(1):全局观

并行接口8255A 首先,它是传输并行数据的,与CPU一样,然后,它是可编程的,也是多功能的,CPU可以对其进行一些控制。 管脚 先从最宏观层面分类 一部分引脚与外设相连一部分引脚与CPU相连GND和Vcc 注意&…

【算法】【殊途同归】搜索算法之(深度优先 || 广度优先) (约束条件 || 限界函数)

对于所谓的分支限界法和回溯法,我们完全可以更加灵活,请看表格。 深度优先广度优先约束条件限界函数算法策略√√回溯法局部判定√√√分支限界法局部判定√√√加限界的回溯法局部判定√枚举法全局判定√枚举法全局判定 前两种是我们常见的&#xff0c…

【算法】学习笔记(0):算法初探(逻辑抽象 + 示例 + 代码实现)

什么是算法? 人生皆算法,算法的本质,是解决问题的方法,遇到问题,寻找答案,解决问题,是作为一个人,一生都在做的事情。 算法是人类思维的产物,是解决问题的方案,并且&a…

【Verilog】数据流建模传输问题:赋值传输有方向

这次,我们说明的是,assign语句实现的数据流建模,包含的是两个层面 建立联系传输方向 assign A B的本质含义是 A与B建立关联B的值传给A 这个传输方向至关重要,实际情况是什么,就必须按照顺序进行,不是单…

【计算机系统设计】实践笔记(2)数据通路构建:第一类R型指令分析(2)

待办事项 时钟频率高,取指周期长,远大于执行周期,如何处理? 不可综合逻辑的处理 接上一篇 【计算机系统设计】实践笔记(2)数据通路构建:第一类R型指令分析(1) 8.2 ALU运…

【计算机系统设计】实践笔记(2)插叙:综合与实现

接上一篇文章的第10节 之前完成了功能仿真,下面我们进行综合实现。 10.1.1 综合 综合成功。 实现试试 这真是令人悲伤……找Bug吧。 我们看看综合后的门级网表。 发现综合后的并不是我们想要的……看了看可能是综合的目录错误,我们再试试。 不是这…