学习笔记5 第十一章的自学归纳
EXT2文件系统
- EXT2第二代扩展文件系统(英语:second extended filesystem,缩写为 ext2),是LINUX内核所用的文件系统。它开始由Rémy Card设计,用以代替ext,于1993年1月加入linux核心支持之中。
EX2文件系统数据结构
创建虚拟硬盘
mke2fs [-b blksize -N ninodes] device nblocks
超级块
- 重要字段如下:
u32 s_inodes_count
u32 s_blocks_count
u32 s_r_blocks_count
u32 s_free_blocks_count
u32 s_mtime
u32 s_wtime
u32 s_magic
u32 s_inodes_per_group
u32 s_mnt_count
u32 s_max_mnt_count
u32 s_state
块组描述符
- Block#2:块组描述符块,EXT2将磁盘块分为几个组,每个组有8192个块,用一个块组描述符结构体来描述。
块和索引节点位图
- Block#8:块位图,位图是用于表示某种项的位序列,也用于分配和回收项。
- Block#9:索引节点位图,一个索引节点代表一个文件的数据结构。
索引节点
- Block#10:索引(开始)节点块,每个文件都用一个128字节的唯一索引节点结构体表示
- 直接块、间接块、双重间接块、三重间接块
数据块
- 紧跟在索引节点块后面的是文件存储数据块。
邮差算法
- 组合优化问题(旅行商问题):找到一条最短路径,使得一个旅行商能够恰好访问所有给定的城市一次,并最终回到起始城市。
- 算法例子:最近邻算法(Nearest Neighbor Algorithm)、克里斯托弗算法(Christofides Algorithm)、模拟退火算法(Simulated Annealing)和遗传算法(Genetic Algorithm)
- c语言中的Test-Set-Clear
- 将索引节点号转换为磁盘上的索引节点
编程示例
- 显示超级快
- 显示位图
- 显示根索引节点
- 显示目录条目
3级文件系统函数
函数示例如下:
-
open(): 打开文件,创建一个文件描述符,并返回该描述符用于后续的文件操作。
-
close(): 关闭文件,释放文件描述符,并确保所有对文件的操作都已完成。
-
read(): 从文件中读取数据。它接受文件描述符、缓冲区和要读取的字节数作为参数,并返回实际读取的字节数。
-
write(): 向文件中写入数据。它接受文件描述符、要写入的数据和要写入的字节数作为参数,并返回实际写入的字节数。
-
lseek(): 在文件中进行定位。它用于在文件中移动读/写指针的位置,以便执行随机访问。可以设置指针相对于文件开头的偏移量,也可以相对于当前位置或文件末尾。
-
mkdir(): 创建一个新目录。它接受目录路径和权限参数,并尝试创建一个具有指定名称和权限的新目录。
-
rmdir(): 删除一个空目录。它接受目录路径作为参数,并尝试删除指定的空目录。
-
unlink(): 删除一个文件。它接受文件路径作为参数,并尝试删除指定的文件。
挂载算法
- mount filesys mount_point
可将某个文件系统挂载到mount_point目录上
卸载算法
- 卸载文件系统可卸载已挂载的文件系统。
交叉挂载点
- 向下遍历
- 向上遍历
文件保护
文件系统项目拓展
- 多个组
- 4KB大小的块
- 管道文件
- I/O缓冲
苏格拉底挑战