可重入内核

可重入内核

所有的Unix内核都是可重入的,这意味着若干个进程可以同时在内核态下执行

提供可重入的一种方式是编写函数,以编写这些函数只能修改局部变量,而不能修改全局数据结构,这样的函数叫可重入函数。

但是可重入内核不仅仅局限于这样的可重入函数。相反,可重入内核可以包含非重入函数,并且利用锁机制保证一次只有一个进程执行一个非重入函数。

 

如果一个硬件中断发生,可重入内核挂起当前正在执行的进程,即使这个进程处于内核态。这种能力是非常重要的,

因为这能提高发出中断的设备控制器的吞吐量。一旦设备已发出一个中断,它就一直等待直到CPU响应。如果内核快速响应,设备控制器在CPU处理中断时就能执行其他任务

 

内核控制路径表示内核处理系统调用、异常、或中断所执行的指令序列

 

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

  1,运行在用户态下的进程调用一个系统调用,而相应的内核控制路径证实这个请求无法立即得到满足;然后,内核控制路径调用调度程序选择一个新的进程投入运行。结果,进程切换发生。第一个内核控制路径还没有完成,而CPU又重新开始执行其他内核控制路径。在这种情况下,两条控制路径代表了两个不同的进程在执行

  2,当运行一个内核控制路径时,CPU检测到一个异常。第一个控制路径被挂起,而CPU开始执行合适的例程。当这个过程结束时,第一个控制路径可以恢复执行。在这种情况下,两个控制路径代表同一个进程在执行

  3,当CPU正在运行一个启用了中断的内核控制路径时,一个硬件中断发生,第一个内核控制路径还没哟执行完,CPU开始执行另一个内核控制路径来处理这个中断。当这个中断处理程序终止时,第一个内核控制路径恢复。在这种情况下,两个内核控制路径运行在同一个进程的可执行上下文,所花费的系统CPU时间都算给这个进程。然而,中断处理程序无需代表这个进程执行

  4,在支持抢占式调度的内核中,CPU正在执行,而一个更高级的进程加入就绪队列,则 中断发生。在这种情况下,第一个内核控制路径还没有执行完,CPU代表高优先级进程又开始执行另一个内核控制路径。只有把内核编译成支持抢占式调度之后,才可能出现这种情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值