Linux内核文件系统-ext2文件系统-管理磁盘空间

建议点击这里查看个人主页上的最新原文

一般的Linux书籍都是先讲解进程和内存相关的知识,但我想先讲解文件系统。

第一,因为我就是做文件系统的,更擅长这一块,其他模块的内容我还要再去好好看看书,毕竟不能误人子弟嘛;第二,是

因为文件系统模块更接近于用户态,是相对比较好理解的内容(当然想深入还是要下大功夫的),由文件系统入手比较适合初学者。

英文全称Extended file system,翻译为扩展文件系统。Linux内核最开始用的是minix文件系统,直到1992年4月,Rémy Card开发了ext文件系统,采用Unix文件系统(UFS)的元数据结构,在linux内核0.96c版中引入。设计上参考了BSD的快速文件系统(Fast File System,简称FFS)。1993年1月0.99版本中ext2合入内核, 2001年11月2.4.15版本中ext3合入内核,2006年10月10日2.6.19版本中ext4合入内核。

相关文档网站:

创建索引节点 ext2_new_inode(),删除索引节点 ext2_free_inode()

当块大小为1024字节时,命令echo -n something | dd of=file bs=1 seek=4098创建一个有“洞”的文件,索引节点的i_size值为4099,但i_blocks的值为2,因为只占用1个块,1个块1024字节,以512为单位的i_blocks的值为2。i_block[]数组前4个元素值为0,第五个元素存放块号。

分配数据块调用ext2_get_block() -> ext2_alloc_blocks() -> ext2_new_blocks(),释放数据块调用ext2_free_blocks()

再讲一下数据块寻址,inodei_block[]数组默认有15个元素,每个元素4字节,前12个直接指向存放数据的逻辑块(对应的文件块号是0~11)。第13个元素指向的是间接块,这个间接块上存了一个bsize/4个元素的数组(其中bsize表示块大小),对应的文件块号为12~(11+bsize/4)。第14个元素指向二级间接块,第15个元素指向三级间接块。

ext2不经过页缓存直接写调用ext2_file_write_iter() -> ext2_dio_write_iter(), 经过缓存写调用ext2_file_write_iter() -> generic_file_write_iter()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值