2010-3-11 linux 读写过程(1)

本文通过跟踪sys_read函数的调用过程,逐步解析Linux内核中的文件读取机制。涉及vsf_read、rw_verify_area等关键函数,并探讨了不同文件系统下读操作的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我先从sys_read入手,然后进入了函数vsf_read,在rw_verify_area()和 security_file_permission()处纠缠了很久(最后还是几乎无功而返),之后就遇到了 file->f_op->read()和do_sync_read()。

由于file->f_op->read()与具体的文件系统有关,于是我就先进入了do_sync_read(),在这里面 遇到了kiocb结构和filp->f_op->aio_read()函数,这又有具体的文件系统有关,在do_sync_read()中又 与wait_on_retry_sync_kiocb()、wait_on_sync()及EIOCBRETY、EIOCBQUEUE纠缠了一段时间。

借助《深入理解linux内核》我找到了与ext2文件系统中与度有关的函数generic_file_read(),这个函数再调用__generic_file_read()函数。

__generic_file_read()在文件设置了O_DIRECT时调用generic_file_direct_IO,否则调用 do_generic_file_read()函数,但函数do_generic_file_read()有个参数是函数 file_read_actor()。

接下来,阅读generic_file_direct_IO的代码,这里会用到 mapping->a_ops->direct_IO()函数,又是个不定的值,ext2文件系统应该是ext2_direct_IO,于是 我又看到了ext2_direct_IO代码。


ext2_direct_IO()函数调用blockdev_direct_IO,其中有个参数是ext2_get_block,这个函数参数用来确定文件系统的逻辑块号。

blockdev_dirdec_IO直接调用__blockdev_direct_IO(),而暂时就看到这里。


我今天看代码时,发现《深入理解linux内核》对文件系统和文件的读写都做了详细的介绍,主要是因为自己太浮躁了,没看多少就开始看代码了,以至于进度太慢了,还是先静下心来把书中的内容看完比较好。

此外,在看代码的过程中,一开始我没理清思路。不应该深入看每个被调用的函数,这样会主次不分,我觉得应该跟着被传输的数据走,才能更好的理清数据传输的流程。至于其他的代码理解它们的作用就应该可以了吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值