Linux 可重入内核

Posted 时光撒谎

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 可重入内核相关的知识,希望对你有一定的参考价值。

      Linux内核是可重入的,这意味着几个进程可能同时在内核模式下执行。(当然单处理器系统,在某一时间只会有一个进程执行,但许多会阻塞在内核模式)这些进程会分时共享CPU、I/O设备等系统资源,给用户的感觉就像是在同时运行。

 

       提供可重入代码的方法:

       编写的函数都只会影响到局部变量,而不能改变全局的数据结构。这样的函数称为可重入函数。但由于有些需要访问I/O设备等共享资源,所以内核还要有不可重入函数。可重入内核不仅仅局限于这样的可重入函数,相反,可重入内核可以包含非重入函数Linux使用锁机制,来保证在某一时间内只有一个进程可执行该不可重入代码,也就是分时共享的办法,来实现可重入的内核。

   

       在中断处理例程中,不应该有不可重入代码,因为不可重入代码会导致处理流程等待,进而导致中断不能得到及时的处理,甚至很容易导致系统死锁而代码得不到进一步的执行。中断处理例程除了可以被更高优先级的中断暂时中止,它应该能被顺序地执行完。

  

     异常处理例程、中断处理例程,以及这些例程的嵌套,当它们中止其他内核控制进程时,是不会改变进程执行上下文的,也就是只有当进程处于用户态时,才会保存被中止进程的状态。

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

 

        实现可重入内核的一个关键技术就是同步技术。如果内核控制链路,因对一内核数据结构访问而被阻塞,则是不允许其他内核控制路径对同样的数据结构进行操作,否则,两个控制路径会破坏该存储的信息,导致内核控制链路路径执行不确定。

以上是关于Linux 可重入内核的主要内容,如果未能解决你的问题,请参考以下文章

内核轻探,锁,虚拟地址空间

Linux系统编程可重入和不可重入函数

线程安全与可重入函数

可重入锁详解(什么是可重入)

可重入函数的问题解答

Android C++系列:Linux信号