CPU的调度

小概念

  • 我们所做的多进程,多线程,多道程序设计,批处理等等一些操作的目的就是为了最大化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