Advertisement

在linux系统上的进程调度算法

阅读量:
  1. Linux进程调度概述
    Linux系统具备支持用户态进程及内核线程的能力,值得注意的是,该系统并未直接提供用户态线程的支持,若需实现用户态线程,则必须借助第三方线程库。
    操作系统中的进程调度机制是整个系统理论体系的重要组成部分,在构建调度机制时需要重点考虑的问题包括:
    1)调度的触发条件:在何种情况下、何时进行调度操作。
    2)调度策略(policy):依据何种标准选择下一个可运行的进程。
    3)调度方式:采用“可抢占”(preemptive)还是“不可抢占”(nonpreemptive)。
    图1.2.1展示了Linux进程中各状态之间的转换关系:
    图1 Linux进程状态转换图
    Linux的进程调度机制可分为自愿调度与强制调度两种类型。1)在内核空间中,一个进程可通过调用schedule()函数启动一次调度操作;同时,在调用schedule()之前,该进程可将自身状态设置为TASK_INTERRUPTIBLE或TASK_UNINTERRUPTIBLE,从而暂时放弃CPU使用权并进入睡眠状态。这种情形通常出现在用户空间的系统调用被阻塞的情况下。而在用户空间中,用户进程可通过nanosleep()这一系统调用来实现类似目的。2)此外,还存在非自愿性调度的情况。当满足特定条件时,内核会强制剥夺当前运行的进程,并将其替换为其他就绪的进程进行执行。
    L

全部评论 (0)

还没有任何评论哟~