Linux第11章学习笔记

发布时间 2023-10-15 19:18:23作者: maple、kite

第十一章学习笔记

## EXT2文件系统

多年来,Linux一直使用EXT2作为默认文件系统
EXT3是EXT2的拓展。EXT3中增加的主要内容是一个日志文件
EXT4的主要变化是磁盘块的分配

EXT2文件系统数据结构

通过mkfs创建虚拟磁盘

创建了一个带有nblocks个块(每个块大小blksize字节)和ninodes个索引节点的EXT2文件系统。

虚拟磁盘布局

索引节点

  • 直接块:i_block[0]至i_block[11]指向直接磁块盘

  • 间接块:i_block[12]指向一个包含256个块编号的磁盘块,每个块编号指向一个磁盘块

  • 双重间接块:i_block[13]指向一个指向256个块的块,每个块指向256个磁盘块

  • 三重间接块:i_block[14]对于小型EXT2文件可忽略,索引节点大小用于平均分割块大小,所以每个索引节点块都包含整数个索引节点。

  • 目录条目 EXT2目录条目;目录包含dir_entry_2结构

    dir_entry是一种可扩充结构。名称字段包含1到255个字符,不含终止NULL。所以dir_entry的rec_len也各不相同。

遍历EXT2文件系统树

遍历算法:

一、读取超级块;

二、读取块组描述符;

三、读取InodeBegin Block,以获取/的索引节点;

四、将路径名标记为组件字符串;

五、从3.中的跟索引节点开始搜索;

六、使用索引节点号ino来定位相应的索引节点七、重复第5第6步。

EXT2文件系统的实现

文件系统结构

第一级别实现基本文件系统树;

第二级别实现文件读/写函数;

第三级别实现系统的挂载,卸载和文件保护

基本文件系统

1级文件系统函数

  • mkdir 算法:创建一个带路径名的新目录

mkdir pathname

  • creat 算法:创建一个空的普通文件

Algorithm of creat

  • rmdir 算法:删除目录(前提是目录必须为空)

rmdir dirname

  • link 算法:创建应用于普通文件的硬链接

link old_file new_file

  • unlink 算法:取消文件链接,将文件的links-count减一并从其父目录中删除文件名。当links_count为0时,通过释放它的数据块和索引节点来真正删除文件。

UNlink filename

  • symlink 算法:创建新文件和旧文件的符号链接。符号链接不同于硬链接,它可以链接到任何对象,包括目录,甚至不同设备上的文件。

  • readlink 算法:读取符号文件的目标文件名并返回目标文件名的长度。

2级文件系统函数

实现了文件内容的读/写操作

3级文件系统

支持文件系统的挂载、卸载和文件保护

文件锁定

文件锁定机制允许进程对一个文件或文件的某些部分设置文件锁,以防止在更新文件时出现竞态条件。文件锁可共享(允许同步读取),也可独占(执行独占写)。文件锁既可以是强制性的,也可以是建议性的。例如, Linux既支持共享文件锁,也支持独占文件锁,但文件锁定只是建议性的。在 Linux I中,文件锁可通过ntl(系统调用设置,也可通过fock系统调用操作。为简单起见,我们假设一种非常简单的文件锁定。

当一个进程试图打开一个文件时,将会检查目标操作模式的兼容性。唯一容模式是读模式。如果已经为更新模式打开了一个文件,即写读写追加,则该文件无法再次打开。但是,这并不会阻止相关进程(例如父进程和子进程)修改父进程打开的同一文件,而且在Unix/ Linux中同样如此。在这种情况下,文件系统只能保证每个写操作是原操作,但不能保证进程的写入顺序,写入顺序取决于进程调度。

文件系统项目的扩展

(1)多个组
(2)4KB大小的块
(3)管道文件
(4)I/O缓冲

苏格拉底挑战

Unix/LinuxEXT2文件系统



基本文件系统



chatgpt答疑

为什么Linux一直选择使用EXT2作为默认文件系统呢

文件系统是什么

代码实现