CPU调度

来源:互联网 发布:在淘宝开网店流程 编辑:程序博客网 时间:2024/04/28 04:11

多进程与多线程的提出根本上是为了做大化CPU的利用率,调度也是如此

多数程序都是通过IO读取数据,之后经过CPU的运算后再通过IO输出,基本就是CPU与IO操作轮换进行。

通过分析进程对IO和CPU的占用,可以将进程分为两类:
1. CPU绑定的进程
2. IO绑定的进程

CPU scheduling decisions may take place:

  • Switch from running to waiting state –> nonpreemptive
  • Switch from running to ready state –> preemptive
  • Switch from waiting to ready –> preemptive
  • Terminates –> nonpreemptive
抢占式(preemptive)和非抢占式(nonpreemptive)
  • 抢占式是指当下一个进程要运行时,不管当前进程是否结束,强行切换CPU。
  • 非抢占式是指当下一个进程到来时,必须等待直到当前进程主动让出CPU。

CPU调度选择进程后还需要为其分配CPU,这个过程称作dispatch

Dispatcher involves:

  • Switching context
  • Switching to user mode
  • Jumping to the proper location in the user program to restart that program

调度策略

调度算法优良的指标
  • CPU利用率
  • 吞吐率 —> 单位时间内完成的进程
  • 周转时间(wall time) —>进程从创建到结束的时间
  • 等待时间 —> 在就绪队列中的时间
  • 响应时间 —> 当事件产生到能够运行之间的时间

CPU利用率和吞吐率是针对整个系统的,而最后三条是针对单一进程的

分类
  1. FCFS 先来先服务

    谁先到谁先执行

  2. Non-Preemptive SJF 非抢占式最短作业优先

    运行所占时间最短的先运行,运行过程中不能被抢占

  3. Preemptive SJF 抢占式最短作业优先

    运行所占时间最短的先运行,运行过程中可以被抢占

调度最有效的依据是进程将来在CPU上消耗的时间,并期望用时最短的进程最优先运行。
但是系统不知道进程将来要运行多长时间,所以应该统计过去,预测未来。下面所说的多级反馈队列可以实现这一点

调度策略

  1. 优先级调度
    优先级高的先运行,但有一个问题,就是优先级低的进程可能被饿死。
  2. Round Robin(时间片轮转法)

两种方法的结合
时间片论转法在就绪队列里选择优先级高的进程先运行

数据结构对调度的实现

  1. 多级队列
    将所有进程分成多个不同优先级的队列
    • 实时性进程
    • 系统进程
    • 交互式进程
    • 批处理进程
    • 学生进程
  2. 多级反馈队列(Multilevel Feedback Queue)
    这种策略是当代系统中普遍采用的策略,反馈是表示对之前进程行为的统计,预测未来
    预测的实现方法:
    • 新加入的进程先置于最高优先级,如果将分配的时间片一次就用光了,那么就将其放入下一级队列,如果又用光了,那么再降一级;如果进程在当前所在优先级没能将其分配的时间片用光的话,那么就留在此优先级;如果优先级比较低的进程做过一次IO,那么它的优先级就会提高一点。
    • 只要有一次用光所在优先级的时间片,那么就降优先级
    • 优先级越低的队列,使用CPU越多,优先级越高的队列,使用IO越多
总结:进程调度最常用的方法是时间片轮转法,实现的策略是多级反馈队列
原创粉丝点击