如果cpu正在运行进程,谁在运行内核?

时间:2011-12-29 11:49:59

标签: linux-kernel kernel cpu multitasking

假设在一个双进程环境中,一个进程被内核调度执行,并且需要一些RAM中没有的数据。所以cpu会指示内核没有可用的东西,并且进程将被暂停。然后在内核加载第二个进程以通过CPU执行并开始调查辅助内存位置(比如虚拟内存)中的数据并获取它后,通过交换到当前处于非活动状态的内存数据将其放回主内存,并且将进程放回就绪队列中以便执行。

我们知道计算机系统中的所有内容都只能由CPU操纵,如果CPU忙着连续执行进程代码,那么谁在执行内核代码来执行内核完成的任务? 如果我能够解释这个场景,请告诉我。

3 个答案:

答案 0 :(得分:4)

内核由于硬件中断而运行,或者由进程调用来执行某些操作。在这两种情况下,当前执行的代码都会停止运行,直到内核完成其工作。

它类似于函数调用:当函数A调用函数B时,函数A必须等到函数B完成它所做的事情,然后将控制权返回给函数A.你不需要多个CPU或任何类型的CPU魔术来实现这一目标。

答案 1 :(得分:3)

在任何时间点,CPU(/ s)都将

  1. 以用户模式运行流程。
  2. 代表内核模式下的进程运行以执行带有权限的指令或访问硬件(例如,在发出系统调用读/写时)。
  3. 以repsonse运行到硬件中断。即在中断环境中运行。 (特别是与任何进程无关)和内核模式中的是。
  4. 运行一些内核线程来提供像soft irq这样的延迟工作。 (Tasklet / Softirq)
  5. 如果没有任何内容可以执行,则运行CPU空闲线程。
  6. 如果你特别询问安排,那么

    1. 假设一个进程正在运行,现在它已发出一个读取调用来从硬盘检索数据,比如说,然后从cpu中移除进程,内核调用schedule()函数。所以这里,第一个进程问题是读取系统调用,这导致从用户模式切换到内核模式。代表进程运行的内核准备进行硬盘读取操作,然后调用schedule()函数
    2. 假设硬件中断已经到来,那么当前正在运行的进程被删除,并且该中断的中断服务处理程序开始在内核模式下执行(显然)。
    3. 基本上,内核在用户进程之间运行!!

      现在清楚?

      词shash

答案 2 :(得分:2)

CPU不会持续执行进程代码。 CPU被中断以执行各种操作。中断可能由于各种原因而发生:资源可用,先前的操作完成,或者只是计时器熄灭。

我推荐这一系列视频,以获取更深入的信息:http://academicearth.org/courses/operating-systems-and-system-programming