在另一个进程运行时,内核会做什么

时间:2015-11-30 08:22:57

标签: operating-system kernel scheduling

考虑这一点:当一个任务/进程在单个处理器系统上运行时,另一个任务必须等待轮到第一个任务暂停或终止(取决于调度算法)。 内核还包含各种任务,这些任务使用相同的CPU来执行与操作系统相关的操作 - 如调度,内存管理,响应系统调用等。

因此,当内核调度特定任务/进程以给它CPU时间时,它是否放弃对CPU的控制?即它是否暂时停止?如果不是,当其他进程在CPU上运行时,它如何继续运行以执行所有与OS相关的任务?调度程序是否移到一边,以便在行CPU中提供下一个任务,如果是这样,是什么让调度程序返回继续进行进一步的调度活动?这个问题很相似,但它没有包含足够的细节 - How can kernel run all the time?

我对这部分感到困惑,我不明白这是如何工作的。有人可以详细解释一下。如果你能用一个例子来解释它会很有帮助。

2 个答案:

答案 0 :(得分:5)

是的..你应该停止将操作系统内核视为一个进程并考虑它而不仅仅是代码和数据 - 一个处理/线程调用的状态机,以便在一端获得特定服务,(例如,I / O请求)和驱动程序在另一端调用以提供服务解决方案(例如,I / O完成)。

内核本身不需要任何执行线程。它仅在从syscalls(来自运行用户线程/进程的类似中断的调用)或驱动程序(来自磁盘/ NIC / KB /鼠标等硬件的硬件中断)输入时运行。有时,此类调用将更改在可用内核上运行的线程集(例如,如果等待网络缓冲区的线程已准备就绪,因为NIC驱动程序已完成操作,则操作系统可能会尝试将其分配给核心& #39;立即',如果需要,先取代其他线程。

如果没有系统调用,并且没有硬件中断,则内核不执行任何操作,因为它没有输入 - 没有任何内容可以执行。

答案 1 :(得分:0)

您缺少的是现在很少有操作系统像您所描述的那样拥有监控过程。

存在严重过度简化的风险,操作系统会遇到异常和中断。

假设你有两个进程,P和Q.P是正在运行的进程,Q是下一个进程。切换进程的一种方法是系统定时器关闭触发中断。 P切换到内核模式并处理该中断。 P运行处理定时器的中断代码并确定Q应该运行。然后P保存其上下文并加载Q.此时,Q是正在运行的进程。中断处理程序退出并获取Q之前的位置。

换句话说,进程P在处理中断时成为内核调度程序。每个进程都成为加载下一个进程的调度程序。

另一个例子,让我们说Q已经将读操作排队到磁盘。该操作完成并触发中断。 P,正在运行的进程,进入内核模式来处理中断。 P然后处理Q的磁盘读操作。