总论:所有的程序都是CPU和I/O等待交替执行


CPU调度器的操作时机

  调用CPU调度器的时机,通常发生在

    某一进程从执行状态转化为等待状态

    某一进程从执行状态转化为就绪状态

    某一进程从等待状态转为就绪状态

    某一进程终止

注意,调度时机不限于此4种情况,有非抢占式调度,和抢占式调度


CPU调度器

  决定了将CPU分配给谁

  后续操作就是, CPU分配器将CPU控制权交给该进程,操作内容通常包括

    上下文切换

    从内核态转移至用户态

    跳转至用户程序中PC寄存器所指示的位置

分配延迟

  CPU分配暂停前一进程,启动后一进程所经历的时间


CPU调度追求的指标


线程调度算法

1.First-Come,First-Served(FCFS)

2.Shortest-Job-First(SJF)调度算法

  算法要求:

    进入就绪队列的进程预告需要多长CPU时间才能完成本次执行

  算法思想:

    选取就绪队列中,需要CPU时间最短的进程

3.Highest response Ratio Next

从甘特图中可以得到这个结果.以上几个算法不好实现或者效果不太好

4.优先权法(Priority Scheduling)

  每个进程都有一个优先数,通常是整型数,选取就绪队列中,优先权最高的进程

  当优先权定义为进程"需要的CPU时间"时,SJF算法就是有优先权法

5.轮转法(Round Robin,RR)

  每个就绪进程获得一小段CPU时间(时间片,time quantum),通常10ms-100ms

  时间片用完,这个进程被迫交出CPU,重新挂回到就绪队列

  当然,进程在时间片用毕之前其Burst Cycle结束,也主动交出CPU

  假设n个就绪进程,时间片q,每个就绪进程得到1/n的CPU时间.任何就绪进程最        多等待(n-1)q单位时间.


多层队列

  把就绪队列拆分成几个队列

  列入:

    要求交互的进程,在前台队列

    可以批处理的进程,在后台队列每个队列有其自己的调度算法

      前台就绪队列 -- RR

      后台就绪队列--FCFS


设计多层队列

  就绪队列进入就绪队列时,决定去哪儿?

  CPU怎么在队列间分配?

    固定优先权法.列如,先前台队列,再后台队列

    时间片办法.列如,80%的CPU时间给前台队列,20%的CPU时间给后台进       程


多层反馈队列示例

  三层队列

     Q0 - 用RR算法,时间片8ms

     Q1 - 用RR算法,时间片16ms

    Q2 - 用FCFS算法


多层反馈队列示例

调度场景

  一个就绪进程进入Q0层.当它分配到CPU,可执行8ms.如果它8s后没有执行完毕,则迁移至Q1层.否则,它离开就绪队列,该干嘛干嘛.

  在Q1层,当它分配到CPU,可执行16ms.如果16ms后没有执行完毕,则迁移至Q2层.否则离开就绪队列,该干嘛干嘛.


设计多层反馈队列

  队列个数

  每层队列它自己的调度算法

  一个算法,将就绪进程升级至高层次队列

  一个算法,将就绪进程降级至低层次队列

  一个算法,决定当一个就绪进程进入就绪队列时,去那层


实时调度

  硬实时系统 - 调度机制能够确保一个关键任务在给定的时间点前完成(必须的)

  软实时计算 - 调度机制尽量给与关键任务最高优先级,尽量在预定时间点钱完      成 (尽量完成)

最新文章

  1. 客服小妹是如何泡到手的——C#定时提醒·语音录制·语音播放·文件转录Demo源码——倾情奉献!
  2. convert与int.parse int
  3. DOM的基本属性
  4. jquery中focus()函数实现当对象获得焦点后自动把光标移到内容最后
  5. 2016年GitHub 排名前 100 的安卓、iOS项目简介(收藏)
  6. POJ 3142 The Balance
  7. SQL中对XML的处理
  8. Codeforces 626D Jerry's Protest 「数学组合」「数学概率」
  9. OC - 21.CALayer核心要点及实例解析
  10. NHibernate考察实例:简单映射
  11. YYmodel 郭耀源 底层分析
  12. Nginx学习——http配置项解析编程
  13. Lintcode393 Best Time to Buy and Sell Stock IV solution 题解
  14. SpringCloud微服务如何优雅停机及源码分析
  15. ElasticSearch-6.3.2 linux 安装
  16. [Swift]LeetCode208. 实现 Trie (前缀树) | Implement Trie (Prefix Tree)
  17. BZOJ1975[Sdoi2010]魔法猪学院——可持久化可并堆+最短路树
  18. php 使用代理IP进行数据抓取
  19. linux 常用指令
  20. Android端高性能图像分类解决方案

热门文章

  1. Coding上部署Ghost博客
  2. Java5新特性之枚举
  3. jQuery Mobile(jqm)button的隐藏和显示,包含a标签,圆角和非圆角button
  4. gpg 的使用
  5. linux ps 命令查看进程状态
  6. Windows 下 Sketch 替代 APP(UWP)
  7. Sublime使用随记
  8. FCC高级编程篇之Exact Change
  9. Artisan 命令
  10. 【Paper Reading】Improved Textured Networks: Maximizing quality and diversity in Feed-Forward Stylization and Texture Synthesis