您的位置:首页 > 其它

CPU调度

2017-11-26 16:37 190 查看
多进程与多线程的提出根本上是为了做大化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利用率和吞吐率是针对整个系统的,而最后三条是针对单一进程的

[b]分类[/b]

FCFS 先来先服务

谁先到谁先执行

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

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

Preemptive SJF 抢占式最短作业优先

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

调度最有效的依据是进程将来在CPU上消耗的时间,并期望用时最短的进程最优先运行。

但是系统不知道进程将来要运行多长时间,所以应该统计过去,预测未来。下面所说的多级反馈队列可以实现这一点

调度策略

优先级调度

优先级高的先运行,但有一个问题,就是优先级低的进程可能被饿死。

Round Robin(时间片轮转法)

两种方法的结合

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

数据结构对调度的实现

多级队列

将所有进程分成多个不同优先级的队列

实时性进程

系统进程

交互式进程

批处理进程

学生进程

多级反馈队列(Multilevel Feedback Queue)

这种策略是当代系统中普遍采用的策略,反馈是表示对之前进程行为的统计,预测未来

预测的实现方法:

新加入的进程先置于最高优先级,如果将分配的时间片一次就用光了,那么就将其放入下一级队列,如果又用光了,那么再降一级;如果进程在当前所在优先级没能将其分配的时间片用光的话,那么就留在此优先级;如果优先级比较低的进程做过一次IO,那么它的优先级就会提高一点。

只要有一次用光所在优先级的时间片,那么就降优先级

优先级越低的队列,使用CPU越多,优先级越高的队列,使用IO越多

总结:进程调度最常用的方法是时间片轮转法,实现的策略是多级反馈队列
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: