《Unix/Linux系统编程》第十一章学习笔记
2021/10/18 7:12:28
本文主要是介绍《Unix/Linux系统编程》第十一章学习笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
第11章 EXT2文件系统
1.EXT2文件系统数据结构
在Linux下,命令mke2fs [-b blksize -N ninodes] device nblocks在设备上创建一个带有nblocks个块和ninodes个索引节点的EXT2文件系统。
默认块大小为1kb。未指定ninoides,将根据nblocks计算一个默认的ninodes数。
2.虚拟磁盘布局
上述EXT2文件系统的布局如图:
3.Block
B0:引导块,文件系统不会使用它。它用于容纳从磁盘引导操作系统的引导程序。
B1:超级块,用于容纳关于整个文件系统的信息。
部分重要字段:
B2:块组描述符块。EXT2将磁盘块分为几个组。每个组有8192个块(硬盘上的大小为32k)。每组用一个块组描述符结构体描述。
B8:块位图。位图用于分配和回收项。
B9:索引节点位图。一个索引节点就是用于代表一个文件的数据结构。
B10:索引(开始)节点块。
主要索引节点字段:
i_block[15]数组包含指向文件磁盘块的指针,这些磁盘块有:
直接块:i_block[0]至i_block[11],指向直接磁盘块;
间接块:i_block[12]指向一个包含256个块编号生物磁盘块,每个块编号指向一个磁盘块;
双重间接块:i_block[13]指向一个指向256个块的块,每个块指向256个磁盘块;
三重间接块:i_block[14],可以忽略。
4.邮差算法
一个城市有M个街区,编号从0到M-1.每个街区有N座房子,编号从0到N-1.每座房子有一个唯一的街区地址,用(街区,房子)表示。已知某个街区地址BA=(街区,房子),怎么把他转换为线性地址LA。
Linear_address LA=N*block + house;
Block_address BA=(LA/N,LA%N)。
相关应用:
(1) C语言中的Test-Set-Clear位;
(2) 将索引节点号转换为磁盘上的索引节点。
5.遍历EXT2文件系统树
遍历算法:
(1) 读取超级块,验证它确实是EXT2 FS;
(2) 读取块组描述符块,以访问组0描述符;
(3) 读取InodeBeginBlock,获取/的索引节点;
(4) 将路径名标记为组件字符串,假设组件数量为n;
(5) 从(3)中的根索引节点开始,在其数据块中搜索name[0];
(6) 使用索引节点号ino来定位相应的索引节点。
(5) (6)步将重复n次。
将路径名转换为索引节点:
INODE *path2inode(int fd, char *pathname)
返回一个指向文件索引节点的INODE指针;如果文件不可访问,则返回0。
这篇关于《Unix/Linux系统编程》第十一章学习笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
- 2024-11-08linux的 vi编辑器中搜索关键字有哪些常用的命令和技巧?-icode9专业技术文章分享
- 2024-11-08在 Linux 的 vi 或 vim 编辑器中什么命令可以直接跳到文件的结尾?-icode9专业技术文章分享
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南
- 2024-08-21【Linux】分区向左扩容的方法