Linux内核驱动fsync机制实现图解
来源:互联网 发布:360vr全景通 4.5 源码 编辑:程序博客网 时间:2024/06/06 09:42
在Linux内核中的IO模型基本分为4类:
1、同步阻塞I/O
2、同步非阻塞I/O
3、异步阻塞I/O
4、异步非阻塞I/O
同步:应用显式地通过函数访问数据,在此函数返回时就会得到结果(成功或失败)。
异步:应用会显示地通过函数提出访问或关注申请。数据到达时,硬件和驱动会通知应用,此时代码一般不在读写访问函数中,而是得到通知了再去有目的的访问数据。
阻塞:在等待数据的过程中会休眠在此处,而非阻塞即函数不休眠立即返回,可执行接下来的代码。
对于这4种机制,在《深入Linux设备驱动程序内核机制》中有讲解,对于异步非阻塞I/O其实内核提供了两种实现一个是aio,另一个就是fasync。aio应该算是一个比较新的框架,较为复杂,本人没有深入的研究过,以后研究过后在写总结。对于fasync,《深入Linux设备驱动程序内核机制》中有详细的讲解以及实验,在看完了这知识以后,我像往常一样,画了一个框图来梳理所有的代码关联。这个图在两个月前画好的,由于我的宝宝及工作的关系就耽搁了发布。
要理解内核的fasync机制,可以结合这个图和《深入Linux设备驱动程序内核机制》中的讲解。我根据这个流程图,总结下我自己的认识:
首先,fasync机制是通过内核发送出的SIGIO信号来实现通知机制的,并不是通过休眠唤醒。
从这个角度来说,应用就必须做以下工作:
1、安装SIGIO信号(信号例程处理内核数据可访问的情况)
2、告诉内核所需要通知的进程ID
3、设置FASYNC标志,内核会通过驱动调用fasync方法为以后的信号通知做准备。
在应用程序完成了相关设定后,就可以做别的事了,如果有任何问题,内核会通过SIGIO信号通知,应用安装的信号例程就会被调用。
而在内核空间这端,相关的驱动程序需要实现以下工作:
1、定义一个全局的struct fasync_struct指针;
2、实现file_operations中的fasync方法,基本就是调用内核的辅助函数fasync_helper。
3、在驱动某个可以获知数据可访问信息的例程中调用kill_fasync函数。
通过以上内核与应用的配合,就可以方便的使用内核异步通知机制。这种机制用起来简单,观其机制,一开始觉得挺复杂的,一旦深入将所有相关的结构体和例程整理一下就会发现,其实这个机制的实现也很清楚明了。个人一直认为对于内核的学习,首先要理清构架及数据结构间的关系。而看别人的代码分析能让你适当的理解下构架,最后关键在于自己RTFSC。所以我现在一般不再博文中分析代码,而只说构架和图解,代码需要有兴趣的朋友自己分析。
0
上一篇:嵌入式Linux之我行——C+CGI+Ajax在S3C2440中的应用
下一篇:内核proc文件系统与seq接口(6)----分析sysctl函数接口与procfs之间的内部关系
相关热门文章
- mysql 安装分析
- 深入linux设备驱动程序内核机...
- linux GPIO驱动
- 异步IO实现 小例(程序+驱动程...
- CloudStack + XenServer安装部...
- linux 常见服务端口
- 【ROOTFS搭建】busybox的httpd...
- xmanager 2.0 for linux配置
- 什么是shell
- linux socket的bug??
- 系统提供的库函数存在内存泄漏...
- 初学UNIX环境高级编程的,关于...
- chinaunix博客什么时候可以设...
- 一个访问量较大网站的服务器。...
- 收音机驱动与v4l2架构的关系,...
给主人留下些什么吧!~~
评论热议
0 0
- Linux内核驱动fsync机制实现图解
- Linux内核驱动fsync机制实现图解
- Linux内核驱动的的platform机制
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】深入剖析Linux内核定时器实现机制
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】Linux内核抢占实现机制分析
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】Linux内核抢占实现机制分析
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】Linux内核抢占实现机制分析
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】Linux内核抢占实现机制分析
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】Linux内核抢占实现机制分析
- linux内核中断实现机制
- Linux内核抢占机制 - 实现
- Linux内核抢占实现机制
- linux内核中断实现机制
- Linux驱动基本理论之——poll机制图解
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】Linux系统调用的实现机制分析
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】Linux系统调用的实现机制分析
- 【Linux内核及驱动编程】Linux信号机制分析
- linux驱动基础开发——linux 内核配置机制
- 设计模式之观察者模式
- 嵌入式web服务器预研报告1
- libevent和libev资料
- 根文件系统的制作(二)
- 嵌入式Linux之我行——C+CGI+Ajax在S3C2440中的应用
- Linux内核驱动fsync机制实现图解
- 内核proc文件系统与seq接口(6)----分析sysctl函数接口与procfs之间的内部关系
- Linux内核ARM构架中原子变量的底层实现研究
- 深入分析Linux自旋锁
- Linux内核container_of详解(图解)
- 《深入Linux设备驱动程序机制》学习心得---字符设备驱动原理图解
- 关于GCC的__attribute__(constructor)
- 一道小学数学题[状元蹄]
- [转]再谈javascript面向对象编程
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
七年顾初如北
七年之痒什么意思
七年之痒意思
结婚七年
七日年化收益率
七日年化什么意思
人生七年
隐婚七年
七日年化
七年影视
金主暗恋我七年
三年之痛七年之痒什么意思
七年
百草记年腊七小雪
陆门七年顾初如北
十年归来沈七夜
七日年化收益率计算器
七年战争
人生七年8
七年歌词
人生7年
81年
四年
八年
七彩阳光
七彩蛋
七彩山鸡
七彩丹霞
七彩云
七彩玫瑰
七彩影视
七彩混沌诀
七彩汤
七彩祥云
七彩格子
七彩鸡
鱼七彩作品
七彩椒
七彩扇贝
七彩鱼
七彩龙虾