一、任务详情

自学教材第11章,提交学习笔记(10分),评分标准如下

  1. 知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容 (4分)
  2. 问题与解决思路,遇到问题最先使用chatgpt等AI工具解决,并提供过程截图(3分)
  3. 实践过程截图,代码链接(2分)
  4. 其他(知识的结构化,知识的完整性等,提交markdown文档,使用openeuler系统等)(1分)

二、知识点归纳

1.第十一章

11.1 EXT2文件系统

多年来,Linux 一直使用EXT2(Card等1995)作为默认文件系统。EXT3(EXT3,2014)是EXT2的扩展。EXT3中增加的主要内容是一个日志文件,它将文件系统的变更 记录在日志中°日志可在文件系统崩溃时更快地从错误中恢复。没有错误的EXT3文件系 统与EXT2文件系统相同。EXT3的最新扩展是EXT4 ( Cao等2007)。EXT4的主要变化是磁盘块的分配。在EXT4中,块编号为48位。EXT4不是分配不连续的磁盘块,而是分配连续的磁盘块区,称为区段。除了这些细微的更改之外,文件系统结构和文件操作保持不变。本书的目的是讲授文件系统的原理°主要目标并非实现大的文件存储容量,而是重点论述文件系统设计和实现的原则,强调简单性以及与Linux的兼容性。为此,我们以ETX2作为文件系统。

11.2 EXT2文件系统数据结构

  • 通过mkfs创建虚拟磁盘
    创建EXT2文件系统,命令如下:
mke2fs [-b blksize -N ninodes] device nblocks

命令创建一个带有blocks个块和nidodes个索引节点的EXT2文件系统。
blksize为块大小,ninodes为inode数量,device为目标设备,nblocks为块数量。

  • Block#0:引导块 B0是引导块,用来容纳一个引导程序,从磁盘引导操作系统。
  • Block#1:超级块:包含文件系统的元数据信息,如块大小、inode数量等。
  • Block#2:块组描述符:描述块组的信息,如块位图、inode位图、inode表的位置。
  • Block#8:块位图:表示某种项的位序列。
  • Block#9:索引节点位图:一个索引节点就是来代表一个文件的数据结构。
  • Block#10:索引节点 每个文件都用一个128字节的唯一索引节点结构体表示。
  • 磁盘块
    • 直接块:i_block[0]至i_block[11],指向直接磁盘块
    • 间接块:i_block[12]指向一个包含256个块编号的磁盘块,每个块编号指向一个磁盘块
    • 双重间接块:i_block[13]指向一个指向256个块的块,每个块指向256个磁盘块
    • 三重间接块:i_blcok[14]是三重间接块

11.2.7 数据块

紧跟在索引节点块后面的是文件存储数据块。

11.2.8 目录条目

目录包含dir_entry结构

11.3 邮差算法

邮差问题是指将一个二元(多元)对应表转换为一个一元的线性表的转换算法。邮差算法在文件访问上有重大意义,一个良好的算法可以大大加快文件访问速度。同时使用邮差算法和位屏蔽可以实现快速访问多维的数据个体,而不用转向复杂的结构体。具体的实现方式可以通过邮差算法将索引节点转为磁盘上的索引节点来完场。

11.5 遍历EXT2文件系统树

已知一个文件的路径,如何依靠这个路径来找到这个文件,是遍历算法需要解决的问题。一个良好的遍历算法可以在短时间内就完成文件的定位读取,而这依靠的是上述的邮差算法。
(1)读取超级块信息
(2)读取根目录索引节点
(3)遍历根目录
(4)递归遍历子目录
(5)处理文件和目录信息

11.7 基本文件系统

  • type.h文件
    包含了EXT2文件系统的数据结构类型,需要ex2fs_dev库的支持;
  • global.c文件
    ​包含了EXT2文件系统的全局变量,如minode和mtable等。这些全局变量就是上述EXT2文件系统数据结构中各个参数和指针。

其他实用的函数程序

  • get_block/put_block函数
    ​ 按块读写虚拟磁盘文件;
  • iget(dev,ino)函数
    ​ 返回指向包含INODE(dev,ino)的内存唯一minode;
  • THE iput(INODE *mip)函数
    ​ 释放一个mip指向用完的minode;
  • get()函数
    ​ 实现文件系统的树遍历算法;
  • getino()/iget()/iput()函数
    ​ 由路径名向索引节点的转换的系列函数。

11.8 11.9 11.10 文件系统函数

文件系统的实现分为三个级别,每个级别处理文件系统的不同部分:

  • 1级文件系统函数处理文件和路径的基本操作,如创建、删除、打开、关闭等。
  • 2级文件系统函数涉及文件的读取和写入操作。
  • 3级文件系统函数负责文件系统的挂载、卸载和文件保护等高级操作。
  • 这些级别的划分有助于模块化文件系统的实现,使其更容易理解和维护。

11.11 文件系统项目的扩展

多个组-4KB大小块-管道文件-I/O缓冲

2.苏格拉底挑战

image
image

二、问题与解决思路

问题

(1)EXT2文件系统中的inode表是什么,它的作用是什么,以及如何存储文件和目录的元数据信息?

解决思路

image
image

三、实践过程截图

image

image

posted on 2023-10-15 19:55  20211201李柏林  阅读(34)  评论(0)    收藏  举报