Linux内核文件系统 inode.c中_bmap函数理解

本文详细解析Linux0.11内核中_bmap函数的实现,主要负责文件数据块到磁盘块的映射。通过i节点的逻辑块数组处理,根据直接块、一次间接块和二次间接块进行寻址。当文件大小超过一定限制时,会使用间接块进行扩展。文章介绍了文件数据块与盘块号的区别,并提供了关键代码段的解释。
摘要由CSDN通过智能技术生成

此段代码是Linux0.11版内核中Linux/fs/inode.c文件中_bmap函数代码

首先说一下此函数的主要功能:

_bmap()函数用于文件数据块映射到盘块的处理操作。所带的参数inode 是文件的i 节点指针,block
是文件中的数据块号
,create 是创建标志,表示在对应文件数据块不存在的情况下,是否需要在盘上建
立对应的盘块。该函数的返回值是文件数据块对应在设备上的逻辑块号(盘块号)。当create=0 时,该函
数就是bmap()函数。当create=1 时,它就是create_block()函数。
正规文件中的数据是放在磁盘块的数据区中的,而一个文件名则通过对应的i 节点与这些数据磁盘
块相联系,这些盘块的号码就存放在i 节点的逻辑块数组中。_bmap()函数主要是对i 节点的逻辑块(区
块)数组i_zone[]进行处理,并根据i_zone[]中所设置的逻辑块号(盘块号)来设置逻辑块位图的占用情
况。正如前面所述,i_zone[0]至i_zone[6]用于存放对应文件的直接逻辑块号;i_zone[7]用于存放一次间接逻辑块号;

而i_zone[8]用于存放二次间接逻辑块号。当文件较
小时(小于7K),就可以将文件所使用的盘块号直接存放在i 节点的7 个直接块项中;当文件稍大一些
时(不超过7K+512K),需要用到一次间接块项i_zone[7];当文件更大时,就需要用到二次间接块项
i_zone[8]了。因此,比较文件小时,linux 寻址盘块的速度就比较快一些。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值