计算机操作系统零散笔记——关于CPU调度(二)

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结束

发布了75 篇原创文章 · 获赞 26 · 访问量 7679

猜你喜欢

转载自blog.csdn.net/qq_40962234/article/details/104227585