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

Cha*_*anK 3 cpu kernel linux-kernel multitasking

假设在一个双进程环境中,一个进程被内核调度执行,它需要一些 RAM 中没有的数据。因此,cpu 会向内核指示某些内容不可用,并且进程将被挂起。然后在内核加载第二个进程以通过 CPU 执行并开始调查辅助内存位置(例如虚拟内存)中的数据并获取它之后,通过与当前不活动的内存数据的交换将其放回主内存,并且将进程放回就绪队列以供执行。

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

Sha*_*316 5

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

  1. 在用户模式下运行进程。
  2. 代表内核模式中的进程运行以执行优先指令或访问硬件(例如,在发出系统调用读/写时)。
  3. 响应硬件中断而运行。即在中断上下文中运行。(特别是与任何进程无关)并且在内核模式下是。
  4. 运行一些内核线程来服务延迟的工作,比如软中断。(Tasklet / Softirq)
  5. 如果没有要执行的内容,则运行 CPU 空闲线程。

如果您特别询问日程安排,那么

  1. 假设一个进程正在运行,现在它发出了一个读取调用来从硬盘检索数据,然后进程从 cpu 中删除,内核调用 schedule() 函数。所以在这里,第一个进程发出 read 系统调用,导致从用户模式切换到内核模式。代表进程运行的内核为硬盘读操作做准备,然后调用schedule()函数
  2. 假设一个硬件中断来了,那么当前正在运行的进程被删除,该中断的中断服务处理程序开始在内核模式下执行(显然)。

基本上,内核在用户进程之间运行!!

现在清楚了吗?

沙什