我们知道,对于一个应用程序即一个操作系统进程来说,它既有内核空间(与其他进程共享),也有用户空间(进程私有私有)。不管是内核空间还是用户空间,它们都处于虚拟地址空间。想了解更多,请参考我之前的博文:深入浅出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. C#多线程编程(1)--线程,线程池和Task
  2. 一周图趣(2019.01.07-2019.01.13)
  3. 语言主程序和子程序的写法_汇编语言程序设计第三篇——汇编程序结构
  4. 【转载】C# double和decimal数据类型以截断的方式保留指定的小数位数
  5. 全面详细的jQuery常见开发技巧手册
  6. 使用 Content-Encoding: br 替换 Content-Encoding: gzip
  7. mysql80连接不上本地服务器_Windows Server 2016 远程桌面本地连接不上
  8. android通用adapter,Android通用ListViewAdapter的编写。
  9. Happy Mid-Autumn Festival !
  10. what is callback?
  11. jmeter 录制回放工具badboy 下载安装步骤
  12. 电力拖动自动控制系统_电气工程及其自动化为什么这么火!原因有这些,建议收藏...
  13. wkhtmltopdf(thead)分页问题
  14. matlab—绘制给定数据的概率密度曲线+实现图像局部放大效果
  15. 时间子系统10_hpet时钟初始化
  16. 如何解决HTTP Error 503. The service is unavailable问题
  17. Springboot 国际化语言(浏览器切换)
  18. Vue的项目搭配以及实现页面跳转【电竞杜小帅】
  19. Arduino开发ESP8266时开发板管理器无法下载问题解决办法
  20. 我学MSA 之:稳定性分析(控制图法)

热门文章

  1. yarn清理缓存命令
  2. 16个工程必备的JavaScript代码片段
  3. 线性DP 四边形不等式优化 hdu3506
  4. 微信小程序的居家养老服务系统app
  5. 大学计算机三级网络技术,考前数天如何突破性通过计算机等级考试之三级网络技术篇...
  6. matlab比Excel好在哪,matlab计算结果和excel完全不一样 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...
  7. Letasoft Sound Booster V1.1汉化破解版(系统音量增强软件)
  8. 使用html编写一个(pc端)静态页面
  9. 100G波分复用(WDM)宽带传输设备
  10. php游戏服务器教程,C++游戏服务器编程从入门到掌握视频教程(全)