CPU的调度
其他
2020-04-17 10:53:46
阅读次数: 0
小概念
- 我们所做的多进程,多线程,多道程序设计,批处理等等一些操作的目的就是为了最大化cpu的利用率。
- 用一会cpu,等待一会IO,循环往复,交替执行(通过IO获得数据,再通过CPU对数据进行处理,在通过IO将结果输出)
- 通过考虑CPU和IO的占用,我们还可以将进程划分为两大类:
①:CPU绑定进程(对CPU使用的比较多,很少量的时间使用IO)
②:IO绑定进程(与之相反)
- 调度:队列里面有好多个进程,选择哪一个去运行,决定下一个是谁。
①抢占式:(被动的)
②非抢占式:(自愿让出CPU)
- CPU的利用率:占了百分之多少,越多越好。
- 吞吐率:单位时间内完成了多少进程。越多,效率越高。
- 周转时间:一个进程从创建到结束,一共用了多少时间。
- 等待时间:一个进程在等待状态多长时间,这个时间越短越好。
- 响应时间:正在等待的进程,对已经发生的事件,的响应速度,越快越好。
调度策略
- 但是看得不是单个进程的性能指标,看得是所有进程加在一起,算出来的平均周转时间,平均等待时间,平均响应时间。才能看出调度能力。
- 最短作业优先(SJF) :谁运行时间最短谁来使用CPU。
- 最短剩余时间优先: 不看他以前运行了多久,只看他剩下多少时间。
- 上面这两种调度策略是在已知需要在CPU上运行多少时间的情况,但是这个运行时间未知呢?调度最有效的依据是进程将来在CPU上消耗的时间,并期望用时最短的进程最优先执行。
- 预测未来: 基于统计过去这个进程对CPU的使用情况来 预测。根据统计IO的时间多,还是使用CPU的时间多。
- 先来先服务(FCFS) :谁优先级高运行谁。会导致优先级低的进程饿死。
- 时间片轮转算法(Round Robin) :广泛采用,给定每个进程一个时间片,用完了就去等待。这个时候就要考虑时间片的设置大小。越合理越好。如果时间片太大,那么他就近似成了一个先来先服务算法。
- 将时间片轮转和优先级结合起来:时间片轮转就在就绪队列里选择优先级高的进程先运行。
- 多级队列(Multilevel Queue) :把整个系统所有的进程放在好多个队列中,这个队列里面的进程优先级是一样的,调度的时候,就按着这个队列找。
①系统级队列(最高优先级):系统进程要应对很关键的问题,它负责系统的中断处理的。(中断指令一定要及时响应,否则下一个中断进来了,就会丢失一个中断)
② 交互式的进程:属于IO绑定的进程,很少使用CPU,随时给用户一个反馈。响应速度必须得快。
③批处理进程:频繁使用CPU的进程。
- 多级反馈队列(普遍采用): 根据这个进程以前的行为的统计来预测以后怎么处置他,这个预测就是由反馈实现的。
①反馈怎么实现?:新来的进程首先设置他的优先级为最高,来根据他的行为,表现,来确定他的优先级,降级。
②只要长时间使用了CPU,就把你优先级降低,只要你做过一次IO操作,就把你优先级提一级,形成一个动态的变换。
多CPU调度
- 多核,重核。每一个内核在任意时刻只能运行一个进程。未来可能会出现128核,实际上,会有备用的核,因为出厂的时候,也许会有坏核,备用核就顶上。
- 特别之处:调度问题的复杂度增加了,如何去做负载均衡(比如说一个CPU太忙,一个CPU太闲,那这样多核就没有意义了)。
- 同构(CPU完全一样的)
①非对称式的多处理器管理(现阶段用不到):(每个内核的作用是不同的)让一个内核只运行操作系统,其他的内核只运行应用程序。好处:对操作系统简单多了,只用管理自己的内核。
②对称式的多处理器管理:所有的处理机都是完全平等的,每个内核既运行操作系统,也运行应用程序,完全由繁忙程度来决定。每一个处理器都有私有的队列。
- 异构(CPU有不同之处,特别复杂,基本上用不到)
- 负载均衡:通过迁移进程来实现,会产生cache刷新,但是利大于弊。‘
操作系统是如何实现多级反馈的
发布了116 篇原创文章 ·
获赞 59 ·
访问量 1万+
转载自blog.csdn.net/weixin_44861399/article/details/104984677