20201321周慧琳

教材第11章学习笔记

EXT2 文件系统

知识点归纳

EXT2:
体现文件系统设计和实现的原则
磁盘块的内容:

  • Block#0:引导块
  • Block#1:超级块【用于容纳整个文件系统的信息】
  • Block#2:块组描述符块【磁盘块】
  • Block#8:块位图
  • Block#9:索引节点点位图
  • Block#10:索引开始节点
    这张图感觉把磁盘分区分组结构块组结构之间的关系说的很清晰
  • 文件系统实现的三个级别:
  1. 第一级别:实现了基本文件树
    mkdir creat rmdir unlink symlink readlink
  2. 第二级别:文件内容读写函数
    open close lseek read write opendir readdir
  3. 第三级别:文件系统的挂载、卸载和文件保护
  • 基本文件系统
    type.h文件

    这类文件包含EXT2文件系统的数据结构类型,比如超块、组描述符、索引节点和目录条目结构。
    此外,它还包含打开文件表、挂载表、PROC结构体和文件系统常数。

    global.c文件

    这类文件包含文件系统的全局变量。全局变量的例子有:

    MINODE minode [NMINODE]; //in memory INODEs
    MTABLE mtable[NMTABLE]; //mount tables
    OFT oft[NOFT]; //Opened file instance
    PROC proc [NPROC] //PRoC structures
    PROC *running; //current executing PROC
    

    util.c文件

    该文件包含文件系统常用的实用程序函数。最重要的实用程序函数是读/写磁盘块函数iget()、iput()和 getino()。

    mount-root.c文件

    该文件包含mount_root()函数,在系统初始化期间调用该函数来挂载根文件系统。它读取根设备的超级块,以验证该设备是否为有效的EXT2文件系统。
    然后,它将根设备的根 INODE ( ino = 2)加载到minode中,并将根指针设置为根minode。它还将所有进程的当前工作目录设置为根minode。
    分配一个挂载表条目来记录挂载的根文件系统。根设备的一些关键信息,如 inode和块的数量、位图的起始块和inode,表,也记录在挂载表中,以便快速访问。

知识层次梳理

编程实例

显示超级块

  • 遇到的问题及解决方法


调试时报错,原来是这个头文件没有包含进来,于是用sudo apt-get install ext2fs-dev尝试解决
然而又报错说找不到库,最后找到一篇博客,终于解决了这个问题

并且要记得在同一目录下创建一个虚拟磁盘

最后成功运行代码

这个代码的主函数是要通过从命令行传递参数的,
所以运行时记得通过命令行把虚拟磁盘传递进去

posted on 2022-10-02 16:04  20201321周慧琳  阅读(5)  评论(0编辑  收藏  举报