第十一章学习笔记
2021/10/17 6:11:39
本文主要是介绍第十一章学习笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
第十一章 EXT2文件系统
1.EXT2文件系统
- 多年来,Linux 一直使用EXT2(Card等 1995)作为默认文件系统。EXT3(EXT3,14)是 EXT2 的扩展。EXT3 中增加的主要内容是一个日志文件,它将文件系统的变更记录在日志中。日志可在文件系统崩溃时更快地从错误中恢复。没有错误的 EXT3 文件系统与 EXT2 文件系统相同。EXT3 的最新扩展是 EXT4(Cao 等 2007)。EXT4 的主要变化是磁盘块的分配。在 EXT4中,块编号为48位。EXT4不是分配不连续的磁盘块,而是分配连续的磁盘块区,称为区段。
2.EXT2文件系统数据结构
- (1) 通过mkfs创建虚拟磁盘
- 命令
mke2fs [-b blksize -N ninodes] device nblocks
在设备上创建一个带有nblocks个块(每个块大小为blksize字节)和ninodes个索引节点的EXT2文件系统。
-
(2)虚拟磁盘布局
- Block#0:引导块 B0是引导块,文件系统不会使用它。它用来容纳一个引导程序,从磁盘引导操作系统。
-
(3) 超级块
-
Block#1:超级块(在硬盘区分中字节偏移量为1024)B1是超级块,用于容纳整个文件系统的信息。
-
(4)块组描述符
- Block#2:块组描述符块(硬盘上的s_first_data_block+1)
- Block#8:块位图
- Block#9:索引节点位图
-
(5)索引节点
- Block#10:索引(开始)节点,每个文件用一个128字节(EXT4中是256字节)的唯一索引节点结构体表示
-
(6)数据块
- 紧跟在索引节点后面的是文件存储数据块。
-
(7)目录条目
-
目录包含dir_entry结构
-
EXT2在硬盘上的索引节点的数据结构如下:
3.邮差算法
- 例:一个城市有M个街区,编号从0到M-1。每个街区有N座房子,编号从0到N-1。每座房子有一个唯一的街区地址,用(街区,房子)表示,其中0≤街区<M,0≤房子<N。外人不熟悉该街区寻址方案,采用线性方法将房子地址编为0,1,…,N-1,N,N+1等。已知某个街区地址BA=(街区,房子),如何转换为线性地址LA,相反,已知线性地址,如何转换为街区地址?
- LA=N*block + house;
- BA=(LA/N, LA%N); (只有从0开始计数转换才有效)
4.遍历算法
- 读取超级块;
- 读取块组描述符块(1+s_first_data_block),以访问组0描述符;
- 读取InodeBeginBlock,获取/的索引节点,即INODE#2;
- 将路径名标记为组件字符串,假设组件数量为n;
- 从3中的根索引节点开始,在其数据块中搜索name[0];
- 使用索引节点号ino来定位相应的索引节点。Ino从1开始计数,使用邮差算法计算包含索引节点的磁盘块及其在该块中的偏移量;
- 由于5~6步将会重复n次,所以最好编写一个搜索函数。
5.EXT2文件系统的实现
- 是当前运行进程的PROC结构体。在实际系统中,每个文件操作都是由当前执行的进程决定的。每个进程都有一个cwd,指向进程当前工作目录(CWD)的内存索引节点。它还有一个文件描述符数组fd],指向打开的文件实例。
- 是文件系统的根指针。它指向内存中的根索引节点。当系统启动时,选择其中一个设备作为根设备,它必须是有效的EXT2文件系统。根设备的根索引节点(inode#2)作为文件系统的根(1)加载到内存中。该操作称为“挂载根文件系统”。
- 是一个openTable条目。当某个进程打开文件时,进程fd数组的某个条目会指向openTable,openTable指向打开文件的内存索引节点。
- 是内存索引节点。当需要某个文件时,会把它的索引节点加载到minode 槽中以供使用。因为索引节点是唯一的,所以在任何时候每个索引节点在内存中都只能有一个副本。在minode中,(dev,ino)会确定索引节点的来源,以便将修改后的索引节点写回磁盘。refCount字段会记录使用minode的进程数。
dirty字段表示索引节点是否已被修改。挂载标志表示索引节点是否已被挂载,如果已被挂载,mntabPtr将指向挂载文件系统的挂载表条目。lock字段用于确保内存索引节点一次只能由一个进程访问,例如在修改索引节点时,或者在读/写操作过程中。 - 是已挂载的文件系统表。对于每个挂载的文件系统,挂载表中的条目用于记录挂载的文件系统信息,例如挂载的文件系统设备号。在挂载点的内存索引节点中,挂载标志打开,mntabPtr指向挂载表条目。在挂载表条目中,mntPointPtr指向挂载点的内存索引节点。
6.基本文件系统
- type.h文件
- global.c文件
- mount-root文件
7.1级文件系统函数
- mkdir算法
- creat算法
- mkdir-creat的实现
- rmdir算法
- link算法
- unlike算法
- symlink算法
- readlink算法
8.2级文件系统函数
- open算法
- lseek
- close算法
- 读取普通文件
- 写普通文件
- opendir-readdir
9.3级文件系统函数
- 挂载算法
- 卸载算法
- 交叉挂载点
- 文件保护
10.实践
-
查看文件操作系统
-
df命令
这篇关于第十一章学习笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-102025 蛇年,J 人直播带货内容审核团队必备的办公软件有哪 6 款?
- 2025-01-10高效运营背后的支柱:文档管理优化指南
- 2025-01-10年末压力山大?试试优化你的文档管理
- 2025-01-10跨部门协作中的进度追踪重要性解析
- 2025-01-10总结 JavaScript 中的变体函数调用方式
- 2025-01-10HR团队如何通过数据驱动提升管理效率?6个策略
- 2025-01-10WBS实战指南:如何一步步构建高效项目管理框架?
- 2025-01-10实现精准执行:团队协作新方法
- 2025-01-10如何使用工具提升活动策划团队的工作效率?几个必备工具推荐
- 2025-01-10WiX 标签使用介绍:打造专业安装程序的利器