Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1354090
  • 博文数量: 166
  • 博客积分: 46
  • 博客等级: 民兵
  • 技术积分: 4061
  • 用 户 组: 普通用户
  • 注册时间: 2013-01-11 13:45
个人简介

现任职北京某互联网公司运维经理,高级架构师,涉足互联网运维行业已经超过10年。曾服务于京东商城,互动百科等互联网公司,早期运维界新星。 长期专研,C语言开发,操作系统内核,大型互联网架构。http://www.bdkyr.com

文章分类

分类: 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中。
                                       
                                       

          S_ISREG是否是一个常规文件,如果是常规文件,则将ext2_file_operations 变量的地址赋予
inode 对象的 i_fop 成员,那么inode->i_fop.read 函数指针所指向的函数,也就是ext2_file_operations
变量的成员 read 所指向的函数。
         

    ext2_file_operations 变量定义在fs/ext2/file.c文件中,如下图
               

    通过上面的层层分析,可以得出:generic_file_read 函数才是 ext2 层的真实入口。generic_file_read 函数定义在mm/filemap.c文件中。如下:
                








阅读(2854) | 评论(2) | 转发(2) |
给主人留下些什么吧!~~

woaimaidong2013-11-20 17:24:33

客气,呵呵!

系统设计的思想和规则,在系统的代码中发挥的淋漓尽致。
常用的经典的,链表和数,epoll模型。
现在的很多服务软件无不是在呈现系统的设计思想。

CUTianrui0072013-11-20 15:45:48

分析得很细致,赞一个。
如果能从中总线到一些系统设计的思想和规则,那就更好了。