Skip to content

Latest commit

 

History

History
27 lines (19 loc) · 2.76 KB

2014-03-16-reentrant-kernel.md

File metadata and controls

27 lines (19 loc) · 2.76 KB
layout title category description tags
post
可重入内核
基础
可重入内核...
内核 重入 内核控制路径

所有的Unix内核都是可重入的(reentrant),这表示若干进程可以同时在内核态下执行。不过,取决于CPU的数量,单核处理器的系统上只有一个进程在真正执行。但是有许多进程可能在等待CPU或者I/O操作完成时在内核状态下被阻塞1

提供可重入的一种方式是编写函数,以便这些函数只能修改局部变量,而不能改变全局的数据结构,这样的函数叫可重入函数。但是可重入内核不仅仅局限于这样的可重入函数,相反,可重入内核可以包含非重入函数。并且利用锁机制保证一次只有一个进程执行一个非重入函数。

如果一个硬件中断发生,可重入内核能挂起当前正在执行的进程,即使这个进程处于内核态。这种能力是非常重要的2。一旦设备发出中断,它就一直等待CPU应答,如果内核能够快速应答,设备控制器在CPU处理中断时就能执行其他任务。

在最简单的情况下,CPU从第一条指令到最后一条指令顺序地执行内核控制路径3。然而,在当下述事件之一发生时,CPU交错执行内核控制路径:

  1. 运行在用户态下的进程调用一个系统调用,而相应的内核控制路径发现这个请求无法立即执行,然后,内核控制路径调用调度程序选择一个新的进程运行。然后,进程发生切换,第一个内核控制路径还未完成,而CPU又重新开始执行其他内核控制路径。在这种情况下,两条控制路径代表两个不同的进程在执行。
  2. 当运行第一个内核控制路径时,CPU监测到一个异常4,第一个控制器被挂起,CPU开始执行合适的过程。
  3. 当CPU正在运行一个启用了中断的内核控制路径时,发生了一个硬件中断。第一个还未执行完,CPU开始执行另一个内核控制路径来处理这个情况,直到完成。完成后第一个控制路径恢复。
  4. 在支持抢占式调度的内核中,可能一个更高优先级的进程进入调度队列,则CPU同样中断第一个执行控制路径,优先响应更高优先级的进程。

Footnotes

  1. 例如当内核代表某一进程发出一个磁盘请求后,就让磁盘控制器处理这个请求并恢复其他进程。当设备满足了该请求时,一个硬件中断会通知内核,从而以前的进程可以恢复执行。

  2. 这样可以提高发出中断设备控制器的吞吐量。

  3. 内核控制路径(kernel control path)表示内核处理系统调用、异常或中断所执行的指令序列。

  4. 例如访问不存在的页,或者虚拟内存地址越界等等。