科普之Linux应用程序与内核程序交互的几种方式。



     我们知道,对于一个应用程序即一个操作系统进程来说,它既有内核空间(与其他进程共享),也有用户空间(进程私有私有)。不管是内核空间还是用户空间,它们都处于虚拟地址空间。想了解更多,请参考我之前的博文:深入浅出Linux内核内存管理基础 第一节(http://blog.csdn.net/acs713/article/details/42836335)。

     本文的目的不在于探讨内核空间与用户空间的定义,而是试图对内核空间与用户空间的交互进行一个系统性的总结,以达抛砖引玉,增进Linux内核学习交流之效果。因此,本文的Linux应用程序偏指用户空间程序,而内核程序指的当然是内核空间程序。

     本人认为,Linux应用程序与内核程序交互主要有以下几种通信方式:

     (1)用户程序通过调用KERNEL系统接口, 即通过系统调用的方式,触发与内核的通信。Linux系统下,设备即文件,也因此大部分设备驱动程序都实现了标准的系统接口,如open(),read,write, ioctl(), mmap()等等。

    (2)通过proc文件系统进行通信。很多内核程序细节,如中断等,都在proc/目录下有所体现。proc存在提供了一种便捷的用户空间和内核空间的交互方式;

    (3)mmap共享内存机制。Linux通过mmap的把内核中特定部分的内存空间映射到用户级程序的内存空间去,从而提供了用户程序对内存直接访问的能力。该方式尤其适合在那些内核和用户空间需要快速大量交互数据的情况下。

http://blog.csdn.net/wavemcu/article/details/8441072

    (4)内核程序使用信号通知应用程序。信号在内核里的用途主要集中在通知用户程序出现重大错误,强行杀死当前进程,这时内核通过发送SIGKILL信号通知进程终止。

    (5)从内核空间调用用户程序。


主要启发来源于:

http://blog.csdn.net/Jkf40622/article/details/40075241


    

      

       


       

       

        


    


你可能感兴趣的:(linux内核)