现任职北京某互联网公司运维经理,高级架构师,涉足互联网运维行业已经超过10年。曾服务于京东商城,互动百科等互联网公司,早期运维界新星。 长期专研,C语言开发,操作系统内核,大型互联网架构。http://www.bdkyr.com
全部博文(166)
分类: LINUX
2013-11-19 12:17:12
本该定于周六的时候,分享这篇博文。怎奈双十一定了好多书,周五晚上到的,周六的时候在家全天充电。所以只好今天分享。各位还记得上篇博文有一问题:file->f_op_read指向的函数是哪个?
带着这个问题我们继续:
文件系统(每个注册的文件系统)在内核中用一个类型为file_system_type的结构表示,当开机加载文件系统模块时,内核使用module_init(init_ext2_fs),初始化模块,具体位置在fs/ext2/super.c文件中,如下:
在函数init_ext2_fs()中,通过调用register_filesystem()注册ext2_fs_type,即将ext2_fs_type加入到文件系统的链表中。
看一下ext2_fs_type:
其中的字段get_sb 就是读超级快的函数。
ext2_read_inode函数在文件fs/ext2/inode.c中。
ext2_file_operations 变量定义在fs/ext2/file.c文件中,如下图
通过上面的层层分析,可以得出:generic_file_read 函数才是 ext2 层的真实入口。generic_file_read 函数定义在mm/filemap.c文件中。如下:
woaimaidong2013-11-20 17:24:33
客气,呵呵!
系统设计的思想和规则,在系统的代码中发挥的淋漓尽致。
常用的经典的,链表和数,epoll模型。
现在的很多服务软件无不是在呈现系统的设计思想。