Chinaunix

标题: TaLK linux kernel第一季 [打印本页]

作者: aprilava    时间: 2012-11-09 14:06
标题: TaLK linux kernel第一季
本帖最后由 aprilava 于 2012-11-09 16:44 编辑

在这儿简单分析下通用块层的知识。先画了个图,也算一个linux大概的一个结构图吧,很简单的一个呵呵。画好了之后截了个图《IO流程结构图》,先对通用块层在哪个位置进行描述。为啥先分析通用块层,个人感觉这是一个比较有趣的地方,可以做自己想做的任何事情。

我想read、write系统调用大家应该比较熟悉了吧。不熟悉的可以通过man命令查询(man命令不熟悉的,可以阅读UNIX环境高级编程有关文件操作的章节)。
当大家在用户态调用一个read这么简单得系统调用时,它的生命就开始了。看似简单得一个系统调用,但是需要经历漫长的旅途才能到达终点。
1、首先要经过的是VFS(因为有战友表示对驱动很感兴趣,所以这次先整理驱动这块儿了,VFS待以后再整理)。
2、当经过VFS后,此时如果内存中已经有read想要的内容,那此时就很happy了,直接从内存中拷贝数据给read准备的缓冲区。
3、如果内存中没有想要的内容,那我们还是踏踏实实一步步来吧。进入了具体文件系统层。具体文件系统有很多了,目前常用的为(ext3、ext4)。这也是很大一个章节,待以后整理。但是在这儿要简单得说明下,具体文件系统会帮助read准确得查找到数据在磁盘上的位置。
4、经过文件系统,就到了我们要总结的通用块层啦
5、经过通用块层后就会到我们经常听到的“驱动”了。但是大家只知其一不知其二,这里的驱动并不一定是大家传统理解的嵌入式硬件的驱动、或者磁盘的驱动。注意:还可以是“过滤驱动”。至于什么是过滤驱动呢,大家想想过滤这个词就可以啦呵呵。这一层时纯软件设计,做你任何想做的事情。比如(RAID、LVM、multipath等知名linux开源项目)。
6、如果有过滤驱动,那经过过滤驱动就会到达磁盘真正的驱动程序。这里的驱动程序就和硬件息息相关了。此时就可以畅快淋漓的拷贝数据啦。拷贝到我们read提供的缓冲区里。

这样read的生命周期就结束了哦。

通用块层数据结构的描述,会继续追加。有啥不对的地方,希望各位战友拍砖

结构图.png (44.04 KB, 下载次数: 24)

结构图.png





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2