美文网首页
进程调度

进程调度

作者: KillerManA | 来源:发表于2016-07-07 22:57 被阅读29次

    这章的主要内容是进程调度相关知识,下面我们来看本章总结:
    多任务操系统分为两类:

    • 非抢占式多任务
    • 抢占式多任务
      Linux同Unix一样,提供了抢占式的多任务模式,这种模式是由调度器来决定什么时候停止一个进程。

    Linux的进程调度使用了CFS算法进行调度。
    进程的类型一般分为两类:

    • I/O消耗类型(I/O型)
    • 处理器消耗类型(计算密集型)
      调度策略的主要目标:在两个矛盾间寻找平衡点,即进程快速响应和最大系统利用率。

    那么CFS调度策略是怎样找到这个平衡点的?
    在CFS调度器调度进程时,没有将时间片直接分配给进程,而是将处理器的使用比划分给进程,这样一来,进程执行所获得的处理器时间和系统负载密切相关,这也是Linux的调度策略同其它操作系统不同之处。(CFS算法实现喜欢的童鞋可以再看看,其中CFS使用红黑树来组织进程)

    睡眠和唤醒:
    睡眠通过等待队列进行处理,等待队列是由某些时间发生的进程组成的简单链表。
    唤醒时,会将此进程放入红黑树中,通常哪段代码促使唤醒条件达成,它就负责随后的唤醒操作。

    在进程调度中还有两个重要的概念,那就是:抢占和上下文切换
    首先,我们先来看上下文切换,就是从一个可执行进程切换到另一个可执行进程,这其中要完成两个步骤的工作:
    1.调用switch_mm()函数,该函数作用是将虚拟内存从上一个进程映射切换到新进程中。
    2.调用switch_to()函数,该函数将处理器状态进行切换,包括:保存,恢复栈信息,寄存器信息,还有其它关联信息。

    下面是抢占,抢占分为用户抢占和内核抢占:
    1.用户抢占:内核即将返回用户空间的时候会产生抢占,因为此时内核进程知道自己是安全的,即可以发生抢占。
    2.内核抢占:Linux完整的支持内核抢占,只要重新调度是安全的,内核就可以在任何时间抢占正在执行的任务,怎样才算重新调度安全?只要没有持有锁就都是安全的,锁是非抢占区域的表示。我们多线程编程中加锁也是同样道理。

    这一章我们了解了内核进程调度的过程和一些概念信息。

    相关文章

      网友评论

          本文标题:进程调度

          本文链接:https://www.haomeiwen.com/subject/pmbljttx.html