我们知道,对于一个应用程序即一个操作系统进程来说,它既有内核空间(与其他进程共享),也有用户空间(进程私有私有)。不管是内核空间还是用户空间,它们都处于虚拟地址空间。想了解更多,请参考我之前的博文:深入浅出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应用程序与内核程序交互的几种方式。相关推荐

  1. 【genius_platform软件平台开发】第七十九讲:Linux系统中可执行程序后台运行的几种方式

    [genius_platform软件平台开发]第七十九讲:Linux系统中可执行程序后台运行的几种方式 1. 问题描述 2. & 符号 3. nohup指令 4. ctrl + z.jobs. ...

  2. 前后端交互的两种方式

    方式一:表单提交 表单(form):表单用于收集用户输入信息,并将数据提交给服务器.是一种常见的与服务端数据交互的一种方式 //1. action:指定表单的提交地址 //2. method:指定表单 ...

  3. WEB通信交互的几种方式

    WEB通信交互的几种方式 - 实时通信发展过程简介 简单介绍一下现在的WEB通信有以下几种方式:最基本的http请求方式,Ajax轮询,Ajax长轮询,HTML5推送事件,HTML5的WebSocke ...

  4. 微信小程序页面间通信的5种方式

    微信小程序页面间通的5种方式 PageModel(页面模型)对小程序而言是很重要的一个概念,从app.json中也可以看到,小程序就是由一个个页面组成的. 如上图,这是一个常见结构的小程序:首页是一个 ...

  5. react 调用 html5,React-Native Webview 和H5交互的两种方式

    React-Native WebView 和H5交互有两种方式: 方式1:RN Webview 向H5注入JS 此方式可作为Webview向H5端传递数据. RN Webview 有以下属性,可以注入 ...

  6. linux数据同步技术比较,linux下实现web数据同步的四种方式(性能比较)教程.docx

    linux下实现web数据同步的四种方式(性能比较)教程 实现web数据同步的四种方式=======================================1.nfs实现web数据共享2.rs ...

  7. (转)基于MVC4+EasyUI的Web开发框架经验总结(12)--利用Jquery处理数据交互的几种方式...

    http://www.cnblogs.com/wuhuacong/p/4085682.html 在基于MVC4+EasyUI的Web开发框架里面,大量采用了Jquery的方法,对数据进行请求或者提交, ...

  8. 详解微信小程序页面间传递信息的三种方式

    详解微信小程序页面间传递信息的三种方式 在开发微信小程序的时候,经常会遇到在页面间传递信息的情况,有三种方法可以实现. 1. 使用数据缓存 将要存储的数据使用以下方法放入缓存 wx.setStorag ...

  9. 微信小程序实现跳转的几种方式总结(推荐)

    今天把实现微信页面的跳转的几种方法总结分享下 1.使用导航组件,标签,页面链接来实现(可以发现点击时有背景) <!-- sample.wxml --><view class=&quo ...

最新文章

  1. Fescar 发布 0.3.0 版本, 支持 Eureka 注册中心
  2. Cocos2d-x:使用九宫格(九切片)自定义缩放资源
  3. Oracle 数据库、Microsoft SQL Server、MySQL 数据库三种常见数据库的区别深度剖析
  4. HowToDoInJava Java 教程·翻译完成
  5. 2018华为网络技术大赛失败纪念
  6. VS2010 Express中文版ISO下载地址
  7. 【PLC】01-使用PLC控制步进电机带威纶通触摸屏
  8. POJ 2387.Til the Cows Come Home
  9. 方差公式初三_初中数学公式定理大全之方差
  10. Nginx实现会话保持
  11. 2018-1-27工作周总结
  12. 【旅行】飘过江南(一)。
  13. 记一次对易班前端解密的经过
  14. 淘宝足迹新玩法,如何通过足迹增加商品曝光量,打标后足迹不出解决方法,淘宝详情页的下拉出现足迹怎么实现的
  15. Windows 下的一款弱网模拟工具NEWT
  16. 服务器不能用pe安装win7系统安装,PE安装win7系统失败的完美解决方案
  17. 基于jsp的网上书店
  18. julia的Unicode 字符输入
  19. LuoGu_2947 [USACO09MAR] 向右看齐 Look Up
  20. SAP-PP MD04详解一

热门文章

  1. 格式工厂 wav 比特率_Easy MP3 Converter Pro for mac(音频格式转换软件)
  2. c语言大作业书店图书管理系统,c语言课程设计 书店管理系统.pdf
  3. PSP--基于反馈的过程
  4. 河北师范大学汇华学院计算机类宿舍在哪,【学校介绍】河北师范大学汇华学院...
  5. openfire + fastpath + webchat + spark 搭建在线客服系统
  6. 光模块自动测试系统软件,一种用于测试光模块的多通道自动测试方法及系统
  7. 工程量计算稿_如何从工程图或线稿中删除背景
  8. python3 编程入门 100例 1~3
  9. android device目录,Android源码下device目录的分析
  10. 功能齐全的屏幕截图C++实现详解