CPU调度
2017-11-26 16:37
190 查看
多进程与多线程的提出根本上是为了做大化CPU的利用率,调度也是如此
多数程序都是通过IO读取数据,之后经过CPU的运算后再通过IO输出,基本就是CPU与IO操作轮换进行。
通过分析进程对IO和CPU的占用,可以将进程分为两类:
1. CPU绑定的进程
2. IO绑定的进程
Switch from running to ready state –> preemptive
Switch from waiting to ready –> preemptive
Terminates –> nonpreemptive
抢占式(preemptive)和非抢占式(nonpreemptive)
抢占式是指当下一个进程要运行时,不管当前进程是否结束,强行切换CPU。
非抢占式是指当下一个进程到来时,必须等待直到当前进程主动让出CPU。
CPU调度选择进程后还需要为其分配CPU,这个过程称作dispatch
Switching to user mode
Jumping to the proper location in the user program to restart that program
CPU利用率
吞吐率 —> 单位时间内完成的进程
周转时间(wall time) —>进程从创建到结束的时间
等待时间 —> 在就绪队列中的时间
响应时间 —> 当事件产生到能够运行之间的时间
CPU利用率和吞吐率是针对整个系统的,而最后三条是针对单一进程的
[b]分类[/b]
FCFS 先来先服务
谁先到谁先执行
Non-Preemptive SJF 非抢占式最短作业优先
运行所占时间最短的先运行,运行过程中不能被抢占
Preemptive SJF 抢占式最短作业优先
运行所占时间最短的先运行,运行过程中可以被抢占
调度最有效的依据是进程将来在CPU上消耗的时间,并期望用时最短的进程最优先运行。
但是系统不知道进程将来要运行多长时间,所以应该统计过去,预测未来。下面所说的多级反馈队列可以实现这一点
优先级高的先运行,但有一个问题,就是优先级低的进程可能被饿死。
Round Robin(时间片轮转法)
两种方法的结合
时间片论转法在就绪队列里选择优先级高的进程先运行
将所有进程分成多个不同优先级的队列
实时性进程
系统进程
交互式进程
批处理进程
学生进程
多级反馈队列(Multilevel Feedback Queue)
这种策略是当代系统中普遍采用的策略,反馈是表示对之前进程行为的统计,预测未来
预测的实现方法:
新加入的进程先置于最高优先级,如果将分配的时间片一次就用光了,那么就将其放入下一级队列,如果又用光了,那么再降一级;如果进程在当前所在优先级没能将其分配的时间片用光的话,那么就留在此优先级;如果优先级比较低的进程做过一次IO,那么它的优先级就会提高一点。
只要有一次用光所在优先级的时间片,那么就降优先级
优先级越低的队列,使用CPU越多,优先级越高的队列,使用IO越多
多数程序都是通过IO读取数据,之后经过CPU的运算后再通过IO输出,基本就是CPU与IO操作轮换进行。
通过分析进程对IO和CPU的占用,可以将进程分为两类:
1. CPU绑定的进程
2. IO绑定的进程
CPU scheduling decisions may take place:
Switch from running to waiting state –> nonpreemptiveSwitch from running to ready state –> preemptive
Switch from waiting to ready –> preemptive
Terminates –> nonpreemptive
抢占式(preemptive)和非抢占式(nonpreemptive)
抢占式是指当下一个进程要运行时,不管当前进程是否结束,强行切换CPU。
非抢占式是指当下一个进程到来时,必须等待直到当前进程主动让出CPU。
CPU调度选择进程后还需要为其分配CPU,这个过程称作dispatch
Dispatcher involves:
Switching contextSwitching to user mode
Jumping to the proper location in the user program to restart that program
调度策略
调度算法优良的指标CPU利用率
吞吐率 —> 单位时间内完成的进程
周转时间(wall time) —>进程从创建到结束的时间
等待时间 —> 在就绪队列中的时间
响应时间 —> 当事件产生到能够运行之间的时间
CPU利用率和吞吐率是针对整个系统的,而最后三条是针对单一进程的
[b]分类[/b]
FCFS 先来先服务
谁先到谁先执行
Non-Preemptive SJF 非抢占式最短作业优先
运行所占时间最短的先运行,运行过程中不能被抢占
Preemptive SJF 抢占式最短作业优先
运行所占时间最短的先运行,运行过程中可以被抢占
调度最有效的依据是进程将来在CPU上消耗的时间,并期望用时最短的进程最优先运行。
但是系统不知道进程将来要运行多长时间,所以应该统计过去,预测未来。下面所说的多级反馈队列可以实现这一点
调度策略
优先级调度优先级高的先运行,但有一个问题,就是优先级低的进程可能被饿死。
Round Robin(时间片轮转法)
两种方法的结合
时间片论转法在就绪队列里选择优先级高的进程先运行
数据结构对调度的实现
多级队列将所有进程分成多个不同优先级的队列
实时性进程
系统进程
交互式进程
批处理进程
学生进程
多级反馈队列(Multilevel Feedback Queue)
这种策略是当代系统中普遍采用的策略,反馈是表示对之前进程行为的统计,预测未来
预测的实现方法:
新加入的进程先置于最高优先级,如果将分配的时间片一次就用光了,那么就将其放入下一级队列,如果又用光了,那么再降一级;如果进程在当前所在优先级没能将其分配的时间片用光的话,那么就留在此优先级;如果优先级比较低的进程做过一次IO,那么它的优先级就会提高一点。
只要有一次用光所在优先级的时间片,那么就降优先级
优先级越低的队列,使用CPU越多,优先级越高的队列,使用IO越多
总结:进程调度最常用的方法是时间片轮转法,实现的策略是多级反馈队列
相关文章推荐
- sql server中的任务调度与CPU深入讲解
- 操作系统处理器调度(CPU调度)的学习以及批处理系统中采用的调度算法、交互式系统中采用的调度算法
- 可抢占的优先级调度算法算例:CPU利用率
- 操作系统:CPU调度
- CPU进程调度
- 操作系统学习笔记:CPU调度
- 操作系统处理器调度(CPU调度)的学习以及批处理系统中采用的调度算法、交互式系统中采用的调度算法
- 操作系统---CPU调度
- 操作系统学习--CPU调度(2)
- Swing实现:模拟优先级CPU调度与内存管理(1)
- Hadoop YARN如何调度内存和CPU
- 计算资源-NUMA架构的CPU调度
- 进程与线程的关系和区别 CPU调度简介
- Hadoop YARN 内存和CPU两种资源的调度
- 操作系统概念(第五章) CPU调度
- [操作系统概念]第三部分——CPU调度
- 操作系统处理器调度(CPU调度)的学习以及批处理系统中采用的调度算法、交互式系统中采用的调度算法
- CPU概念和调度算法
- Swing实现:模拟优先级CPU调度与内存管理(2)
- 计算虚拟化-精细化CPU调度技术