cpu调度其实做的事情就是去选择下一个进程
目标是让昨天提到的各个评判指标达到最优
优先级调度 一个很重要的调度的方法
但优先级调度不能说是一个单独的调度方法,只是一种实现策略。就是优先级高的先调度,而优先级谁高谁低是根据算法
优先级调度也有问题,就是优先级低的进程可能被饿死。
再来一种调度方法,Round Robin是时间片轮转法
每个进程分一个时间片(Burst TIme),每个进程一次用cpu一个时间片的时间
时间片大小的选择
很明显如果时间片太大,就近似成了先来先服务的算法
然后就可以想到把优先级调度和时间片轮转法相结合,perfect
总结一句话:
时间片轮转在就绪队列里选择优先级高的进程先运行
使用多级队列
级别从上往下分别是:
系统级的
交互式的,IO绑定的进程,也就是说IO用的很多
batch processes P处理进程,IO用的相对少
学生进程
而且不同的队列里也会放着不同的调度算法
时间片轮转法的具体实现:
用到最多的是 多级反馈队列
多级反馈队列的调度办法是现在的操作系统中普遍采用的策略。
优先级高的队列放在前面,优先级低的队列放在后面,相同优先级的放在同一队列里。
反馈是如何实现的?
前两个采用的是时间片轮转法,最后一个采用的是先来先服务。
从上往下仍,每个进程进来都会先被放在优先级最高的队列中,如果他一下把优先级最高的的队列规定的时间片用完了,那就会把这个进程往下放。以此类推。反之亦然依然.
以上判断是动态的,并不是只判断一次,而且还有着弹回机制。
从等待态到就绪态转变的进程的优先级都会被提高一些些。
以上基本都是单cpu调度的情况。
关于多cpu调度
与单cpu调度相同的部分是下一个进程运行的选择策略,优先级高的优先运行
每个内核任意时刻只能运行一个进程。
负载均衡
关于同构cpu和异构cpu
目前基本都是同构的,同构就是所有cpu都完全一摸一样的。异构的特别特别复杂。
关于对称式和非对称式
非对称式的多处理器管理:一个内核只运行操作系统,其他内核只运行应用程序
好处:对操作系统来说,简单的多了。
对称式的多处理器管理:所有处理器都是完全平等的,每一个内核极可能运行操作系统,也可能运行应用程序。
对于就绪队列的管理:两种
1、每一个处理器都有一个私有的就绪队列, 较常见
2、多个处理器共享同一个就绪队列。
如果把一个进程从一个cpu切换到另一个cpu,会导致cpu的cache刷新。这个刷新要消耗的。
亲和性:(咱们自己做的) 有软亲和性和硬亲和性之分。
负载均衡:操作系统做的。 迁移。
push migration 当前cpu太忙了
pull migration 当前cpu太闲了
solaris 线程调度 优先级数字越大,优先级越高
有一个solaris dispatch table,这个表系统管理员可以更改的
优先级 时间片 降低优先级的多少 从等待到就绪时优先级的变化
做到大致看得懂这个表
windows 优先级 优先级数字越大优先级越高
linux 数字越小优先级越高
real-time: 0-99
nice: 100-140
p23结束