0 前言

上一篇文章:进程调度(3):RR(轮转) 算法 原理与实践

1 前提铺垫

与上一篇同。

2 引入I/O操作

之前我们一直提及的是计算密集型程序,现在我们的程序可以进行I/O交互了,它会发起I/O请求,比如向磁盘发起请求获取数据。

这个时候,我们之前的算法会发生怎样的变化呢?我们来探索一下!

2.1 进程的三状态模型

  • Ready:就绪态
  • Running:运行态
  • Waiting:阻塞态 / 等待

最后还有一个DONE,代表执行完成,我们看一下其定义:

RUNNING - the process is using the CPU right now
READY   - the process could be using the CPU right nowbut (alas) some other process is
WAITING - the process is waiting on I/O(e.g., it issued a request to a disk)
DONE    - the process is finished executing

之前我们的计算密集型程序,仅仅使用CPU,没有Waiting状态,不过现在有了!

2.2 傻等:糟糕的资源利用方式

我们看一看一个向磁盘发起IO请求的程序,将会如何执行。

我们先假定其采用FIFO策略顺序执行吧!

  • A:每在CPU执行10s,就发起IO请求,IO耗时10s,之后再在CPU执行10s,发起IO,共循环3次。
  • B:运行时间30s,100%使用CPU,不发起IO请求。

假定A比B先到达一点点。

它的执行就成了这样,注意红色箭头部分,CPU是空闲的!OMG!CPU空闲了30s!如此昂贵的CPU空闲30s……这真是太糟糕了。

2.3 重叠:高效利用资源

既然B执行30s,为什么不在空闲的时候执行B呢?反正我们拥有上下文切换机制!


这看起来棒多了,A和B重叠了起来!CPU没有被浪费,系统的整体性能也提高了,之前100s做的现在70s完成了!

3 不可预测的运行时间

3.1 无法预知的未来

之前我们的假设是任务运行时间已知,但是这怎么可能?我们不可能在程序运行前,就知道它将会运行多久……这很荒谬不是吗?那怎么办?

3.2 以史为鉴:预测时间

我们将会使用以史为鉴的方式,估计运行时间,也就是基于该程序之前运行时间的历史情况,估算一下,这听起来还有点靠谱了!具体实现先不谈,之后再说。

3.3 思想贯通:CPU流水线的分支预测

CPU流水线,是硬件,也有类似的技术,就是分支预测,更著名的是动态分支预测,这这很棒!我想之后软硬件的预测思想可以结合起来理解,达到融会贯通。

4 预告:进程调度(5)MLFQ(多级反馈队列)算法 原理与实践

之前我们的算法,无法同时兼顾周转时间和响应时间,那么,何不将二者的优点结合? 这也就是接下来我们做的事情。

5 模拟软件链接

点击此处,在Linux可以运行模拟软件,请阅读README.md文档,然后进行软件的使用。

此模拟软件可以充分体会多进程运行时候的转换,体会IO引入程序之后带来的重叠使用方式。

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

  1. java模拟实现操作系统进程调度中的多级反馈队列算法

    java模拟实现操作系统进程调度中的多级反馈队列算法 操作系统学了一学期了,期末作业布置下来,用编程语言模拟进程调度的过程,只会java,于是就写了一下,通过控制台模拟,模拟过程看起来可能十分不直观. ...

  2. ChinaSkills-网络系统管理(2022改革Linux部分国产操作系统统信UOS安装运行预测[带图形界面])

    2022年全国职业技能大赛网络系统管理赛项相较2021年再次做出改动,Linux部分从之前的Debian又换回了CentOS,不过相应增加了UOS国产操作系统. 交流共享资料群号:926132419 ...

  3. 操作系统-进程调度(FCFS和SJF)

    文章目录 进程调度(FCFS和SJF) 问题描述 实验环境 输入 输出 测试数据 实验设计 数据结构 函数的功能.参数和输出 主要函数算法设计 详细设计 流程图 实验结果与分析 结果展示与描述 结果分 ...

  4. 【操作系统 进程调度】

    操作系统与进程调度 操作系统 1.操作系统的概念: 2.操作系统的主要功能: 1.进程管理: 2.内存管理: 3.设备管理: 4.文件管理: 5.提供操作系统与用户之间的接口: 3.程序与进程: 3. ...

  5. 操作系统 进程调度-银行家算法实验报告

    实验要求 一. 实验目的 死锁会引起计算机工作僵死,因此操作系统中必须防止.本实验的目的在于让学生独立的使用高级语言编写和调试一个系统动态分配资源的简单模拟程序,了解死锁产生的条件和原因,并采用银行家 ...

  6. 0512 操作系统进程调度实验

    实验三进程调度模拟程序 专业:商软2班   姓名:韩麒麟 学号:201406114253 一.    目的和要求 1.1.           实验目的 用高级语言完成一个进程调度程序,以加深对进程的 ...

  7. 5.12 操作系统——进程调度

    1.    目的和要求 1.1.           实验目的 用高级语言完成一个进程调度程序,以加深对进程的概念及进程调度算法的理解. 1.2.           实验要求 1.2.1例题:设计一 ...

  8. 操作系统-进程调度(HRRN和RR)

    文章目录 进程调度(HRRN和RR) 问题描述 实验环境 输入 输出 测试数据 实验设计 数据结构 函数的功能.参数和输出 主要函数算法设计 详细设计 流程图 实验结果与分析 结果展示与描述 结果分析 ...

  9. 操作系统—进程调度—HRRN,RR 高响应比和时间片轮转算法

    1.问题描述及需求分析 设计程序模拟进程的高响应比HRRN和时间片轮转RR调度过程.假设有n个进程分别在T1, - ,Tn时刻到达系统,它们需要的服务时间分别为S1, - ,Sn.如果选择RR算法,还 ...

最新文章

  1. Ubuntu 14.04 安装小企鹅输入法 Fcitx
  2. 这款Web SSH工具超牛逼!
  3. 数据结构---KMP模式匹配病毒感染人的DNA检测
  4. kafka 消费端 api_在消费者的眼中:您真的需要为您的API提供客户端库吗?
  5. win10文件显示后缀名_win10系统,如何去除“此电脑” 里的6个多余文件夹
  6. 北大出版社继续送书 | 附上周4位中奖的朋友信息
  7. 对接第三方支付接口-记录
  8. HALCON:lines_gauss用法解析
  9. win10磁盘管理界面各系统分区介绍
  10. 大数据导论习题_2020高校邦《数据科学与大数据技术导论》课后作业习题答案...
  11. PC微信多开源代码-消息钩子+ZwQuerySystemInformation
  12. JSCH连接SFTP Algorithm negotiation fail
  13. socketException之broken pipe
  14. 跨年巨作 13万字 腾讯高工手写JDK源码笔记 带你飙向实战
  15. mysql多线程复制crash_MySQL 并行复制(MTS) 从库发生异常crash分析
  16. 罗技 连点 脚本_罗技发布无线版的Pro X游戏耳机,拥有20小时续航时间
  17. CSUST 2007-我爱吃烧烤(状压DP)
  18. 应该担心什么不应该关心什么(做正确的事,把事情做对)
  19. TDA4863G完全符合世界标准,经过优化,可为电子镇流器和离线式SMPS提供极其紧凑且经济高效的PFC解决方案
  20. 《MA‑CRNN: a multi‑scale attention CRNN for Chinese text line recognition in natural scenes》论文阅读

热门文章

  1. aix内核是linux,查看Linux及AIX硬件信息方法总结
  2. mysql 子字符串函数_MySQL 内置字符串函数
  3. 前后对接数字几_开源数字货币交易所开发学习笔记(1)——系统架构
  4. postgresql存图片字段类型_PostgreSQL让人着迷的多态性,另辟蹊径省时又省力
  5. 虚幻4毛发系统_虚幻引擎复活!苹果与Epic对决,有哪些游戏险些中枪?
  6. 怎么用PHP实现年月日date,PHP date函数用法,php年月日写法
  7. 怎么用PHP建立购物网站,如何使用PHP建设一个购物网站
  8. python2clock_控制fps的时钟Clock类源码
  9. r语言ggplot2 多线图绘制图例_plotnine: Python版的ggplot2作图库
  10. win10资源管理器怎么打开_让你效率倍增的电脑神器,最强资源管理器增强工具「QTTabBar」...