您的位置:首页 > 运维架构 > 网站架构

深入linux内核架构-第二章-进程管理和调度

2015-02-01 14:19 225 查看
2.1什么是进程优先级以及抢占式多任务处理?

这个用过任何操作系统的程序员都能够理解的。在这里就不多说了。

那么linux进程管理和调度采用的什么模型呢?我们称这种方案为抢占式多任务处理(preemptive multitasking),各个进程都分配到一定的时间段执行。时间段到期后,内核会从进程收回控制权,让一个不同的进程执行,而不考虑前一进程所执行的上一个任务。被抢占进程的运行时环境,即所有CPU寄存器的内容和页表,都会被保存起来,因此其执行结果不会丢失。在该进程恢复执行时,其进程环境可以被完全恢复。时间片的长度会根据进程重要性(以及因此分配的优先级)的不同而变化。

但是,这种简化模型没有考虑几个问题。

(1)进程在某些时间可能会因为没事可做而无法执行,从而导致CPU时间的利益回报大大降低。

(2)另一个忽略的事实是Linux支持不同的调度类别(在进程之间完全公平的调度和实时调度),调度时也必须考虑到这一点。

Linux进程管理的结构中还需要另外两种进程状态选项:用户状态和核心态。这反映了所有现代CPU都有至少两种不同的执行状态的事实,其中一种具有无限的权利,而另一种则受到各种限制。例如,可能禁止访问某些内存区域。

进程通常都处于用户态,只能访问自身的数据,无法干扰系统中的其他应用程序,甚至也不会注意到自身之外其他程序的存在。

从用户态切换到核心态,有两种方法:(1)系统调用;(2)中断。

内核的抢占调度模型建立了一个层次结构,用于判断哪些进程状态可以由其它状态抢占。

(1)普通进程总是可能被抢占,甚至是由其他进程抢占。在一个重要进程变为可运行时,例如编辑器收到了等待已久的键盘输入,调度器可以决定是否立即执行该进程,即使当前进程仍然在运行。对于实现良好的交互行为和低系统延迟,这种抢占起到了重要作用。

(2)如果系统处于核心态并正在处理系统调用,那么系统中的其它进程是无法夺取他的CPU执行时间的。调度器必须等待系统调用执行结束,才能选择另一个进程执行,但中断可以终止系统调用。

(3)中断可以暂停处于用户状态和核心态的进程。中断具有最高优先级,因为在中断触发后需要尽快处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: