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利用率和吞吐率是针对整个系统的,而最后三条是针对单一进程的
分类
FCFS 先来先服务
谁先到谁先执行
Non-Preemptive SJF 非抢占式最短作业优先
运行所占时间最短的先运行,运行过程中不能被抢占
Preemptive SJF 抢占式最短作业优先
运行所占时间最短的先运行,运行过程中可以被抢占
调度最有效的依据是进程将来在CPU上消耗的时间,并期望用时最短的进程最优先运行。
但是系统不知道进程将来要运行多长时间,所以应该统计过去,预测未来。下面所说的多级反馈队列可以实现这一点
调度策略
- 优先级调度
优先级高的先运行,但有一个问题,就是优先级低的进程可能被饿死。 - Round Robin(时间片轮转法)
两种方法的结合
时间片论转法在就绪队列里选择优先级高的进程先运行
数据结构对调度的实现
- 多级队列
将所有进程分成多个不同优先级的队列- 实时性进程
- 系统进程
- 交互式进程
- 批处理进程
- 学生进程
- 多级反馈队列(Multilevel Feedback Queue)
这种策略是当代系统中普遍采用的策略,反馈是表示对之前进程行为的统计,预测未来
预测的实现方法:- 新加入的进程先置于最高优先级,如果将分配的时间片一次就用光了,那么就将其放入下一级队列,如果又用光了,那么再降一级;如果进程在当前所在优先级没能将其分配的时间片用光的话,那么就留在此优先级;如果优先级比较低的进程做过一次IO,那么它的优先级就会提高一点。
- 只要有一次用光所在优先级的时间片,那么就降优先级
- 优先级越低的队列,使用CPU越多,优先级越高的队列,使用IO越多
总结:进程调度最常用的方法是时间片轮转法,实现的策略是多级反馈队列
阅读全文
0 0
- CPU 调度
- cpu调度
- cpu调度
- CPU调度
- CPU调度
- CPU调度
- cpu调度
- CPU调度
- CPU调度
- CPU调度
- CPU调度
- CPU调度(进程调度)策略
- 操作系统--CPU调度
- cpu调度的层次
- CPU调度算法演示
- 操作系统之CPU调度
- XEN cpu 调度问题
- CPU调度算法
- 一文入门 Python 数据分析库 Pandas
- C++中作用域和定义在类外部的成员
- 纹理贴图
- 编写并运行第一个Lisp程序
- CS231n-Assignment1(作业1)-SVM
- CPU调度
- QT设置窗口颜色
- roc和auc
- 环境光
- 类与对象
- 组合模式(Composite)-----基于JAVA语言
- 漫射光
- 机器学习基石_课后练习答案链接
- Java