第十一章读书笔记

第十一章读书笔记
EXT2文件系统

  • 11.1:EXT2文件系统

Linux一直使用XET2,EXT3作为2的扩展,增加了日志文件,他将文件系统变更记录在日志当中。EXT4是EXT3的拓展,主要变化就是磁盘块的变化,分配连续的磁盘块,连续的磁盘块区组成区段。

  • 11.2:EXT2文件系统数据结构
  1. 11.2.1:通过mkfs创建虚拟磁盘

  2. 11.2.2:虚拟磁盘布局

Block#0:引导块 B0(boot)是引导块,文件系统不会使用;它用来容纳一个引导程序,从磁盘引导一个操作系统。

  1. 11.2.3:超级块
    Block#1:超级块 B1(super)是超级块,用来容纳整个文件系统的信息。

s_magic:标识文件系统类型的幻数。)EXT2/3/4的幻数是:0XEF35

  1. 11.2.4:块组描述符
    Block#2:块组描述符 EXT2将磁盘分为几组。每组有8192个块(32K)。每组用一个块组描述符结构体来表示。

  2. 11.2.5:块和索引结点位图
    Block#8:块位图(Bmap)用来表示某种项的位序列。位图用于分配和回收项。Block#0未被文件系统使用,所以位图只有1439个。
    Block#9:索引节点位图(Imap)一个索引节点就是用来标识一个文件的数据结构。EXT2 FS中前十个索引节点被预留置为1,其他为0.

  3. 11.2.6:索引节点
    Block#10:索引开始结点,每一个文件都由128字节(EXT4是256字节)的唯一的索引节点结构体表示。

索引节点块从B10到B32

  1. 11.2.7:数据块
    第一个数据块,B33他就是根目录的i_block[0]。
  2. 11.2.8:目录条目
    目录包含dir_entry结构
  • 11.3邮差算法
  1. 11.3.1:C语言中Test-Set-Clear位
    在C语言中,使用邮差算法直接直接操作位图中的位。
  2. 11.3.2将索引节点号转换为磁盘上的索引节点
  • 11.4编程示例
    换源无果,这一部分代码并没有运行。
  1. 11.4.1:显示超级块
    通过系统调用,读入系统文件,并且用超级块结构体将文件的超级块信息进行存储。将读取到的文件buf通过强制转换,变成SUPER类型的数据。最后将数据打印出来。
  2. 11.4.2:显示位图
    获取文件的位图的ninodes和imapblk通过邮差法将位图打印出来(邮差法在此处的作用在于进制转换)
  3. 11.4.3:显示根索引结点
  4. 11.4.5:显示目录条目
  • 11.5遍历EXT2文件系统树
  1. 11.5.1:遍历算法
    (1)读取超级快。检查幻数,验证他是否为)0xEF53
    (2)读取块组描述符,已访问组0描述符。
    (3)读取InodeBeginBlock,获取根节点的索引节点
    (4)将路径名标记为组件字符串,假设组件数量为n
    (5)从(3)中的根索引结点开始,在其数据块中搜索name[0],通过使用下面这段代码跳转到下一个dir_entry

(6)使用索引节点号来定位相应的索引节点
(7)多次重复5到6,重复次数n。

  1. 11.5.2将路径名转换为索引节点
    使用函数path2inode(),是文件系统之中最重要的函数

指向文件索引节点的文件指针。

  • 11.6 EXT2文件系统的实现
  1. 11.6.1文件系统的结构

(1)是当前运行进程的PROC结构体。
(2)是文件系统的根指针
(3)是一个openTable条目
(4)是内存索引节点
(5)是已挂载的文件系统表

  1. 11.6.2文件系统的级别
    第一级别实现基本的文件系统树。包含以下文件

第一级别FS函数的用户命令程序有:
Mkdir、creat、Mknod、rmdir、link、unlink、symlink、rm、ls、cd、pwd

第2级别实现文件内容的读写函数

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

  • 11.7 基本文件系统
  1. 11.7.1 type.h文件



  2. 11.7.2 global.c文件

  3. 11.7.3 使用程序函数

(1)get_block/put_block函数


(2)iget(dev,ino)函数:返回一个指针,指向包含INODE(dev,ino)的内存minode

(3)The iput(INODE *mip)函数:该函数会释放一个mip指向的用完的minode。

(4)getino()函数:实现文件系统树遍历算法


(5)getino()/iget()/iput()的使用:

  1. 11.7.5 mount-root
    mount-root.c文件包含mount-root()函数,在系统初始化期间调用该函数来挂载根文件系统。




  • 11.8 1级文件系统函数
  1. 11.8.1 mkdir算法

  2. 11.8.2 creat算法

  3. 11.8.4 rmdir算法

  4. 11.8.6 link算法

  5. 11.8.7 unlink算法

  6. 11.8.8 symlonk算法

  • 11.9 2级文件系统函数
  1. 11.9.1 open算法

  2. 11.9.2 lseek

  3. 11.9.3 close算法

  4. 11.9.4 读取普通文件

  5. 11.9.5 写普通文件

  • 11.10 3级文件系统
  1. 11.10.1 挂载算法

  2. 11.10.2 卸载算法

  3. 11.10.3 交叉挂载点
    向上遍历、向下遍历;遍历一个路径名时,两个方向的挂载点可能会出现交叉。

  4. 11.10.4文件保护
    对文件权限的管理,每个文件的索引节点都有一个i_mode字段,有9位是权限。

posted @ 2022-10-03 20:59  岳华  阅读(17)  评论(0编辑  收藏  举报