学习笔记5

第十一章 EXT2文件系统
    11.1 EXT2文件系统
      Linux一直使用EXT2作为默认文件系统
      EXT3是EXT2的扩展,增加主要内容是日志文件
      EXT3的最新扩展是EXT4,主要变化是磁盘块的划分
    11.2 EXT2文件系统数据结构
        11.2.1 通过mkfs创建虚拟磁盘
        11.2.2 虚拟磁盘布局
            Block#0:引导块
            B0是引导块,文件系统不会调用它
        11.2.3 超级块
            Block#1:超级块
            B1是超级块,用于容纳整个文件系统的信息
            其中大多数含义都非常明显,只有少数字段需要详细解释。
                s_first_data_block:0表示4KB大小,1表示1KB大小
                s_log_block_size:确定文件块大小
                s_mnt_count:已挂载文件系统的次数
                s_magic:标识文件系统类型的幻数
        11.2.4 块组描述符

       Block#2:块组描述符块

            EXT2将磁盘块分成几个组
            每个组有8192个块,每组用一个块组描述符结构体描述
        11.2.5 块和索引节点位图
            Block#8:块位图
            位图是用来表示某种项的位序列
            位图用于分配和回收项
            Block#9:索引节点位图
            一个索引节点就是用来代表一个文件的数据结构
            EXT2文件系统是使用有限数量的索引节点创建的
        11.2.6 索引节点

             Block#10:索引开始节点

                i_mode为u16或2字节无符号整数
                i_size字段表示文件大小
                i_mode字段前4位指定文件类型,接下来3位ugs表示文件的特殊用法
                i_block[15]包含指向文件磁盘块的指针
                    直接块:i_block[0]至i_block[11],指向直接磁盘
                    间接块:i_block[12]指向一个包含256个块编号的磁盘块
                    双重间接块:i_block[13]指向一个指向256个块的块
                    三重间接块:i_block[14]
        11.2.7 数据块
            紧跟在索引节点块后面的是文件存储数据块
        11.2.8 目录条目
            dir_entry是一种可扩展结构
            名称字段包含1到255个字符,不含终止NULL
    11.3 邮差算法
        11.3.1 C语言中的Test-Set-Clear位
        在C语言中,最小的可寻址单元是一个字符或字节
        11.3.2 将索引节点号转换为磁盘上的索引节点
        在EXT2文件系统中,每个文件都有一个唯一的索引节点结构
    11.4 编程示例
        11.4.1 显示超级块
        11.4.2 显示位图
        11.4.3 显示根索引节点
        11.4.4 显示目录条目
    11.5 遍历EXT2文件系统树
        11.5.1 遍历算法
            (1)读取超级块
            (2)读取块组描述符块,以访问组0描述符
            (3)读取InodeBeginBlock,获取/的索引节点
            (4)将路径名标记为组件字符串
            (5)从(3)中的根索引节点开始,在其数据块中搜索name[0]
            (6)使用索引节点号ino来定位相应的索引节点
            (7)重复(5)、(6)编写搜索函数
        11.5.2 将路径名转换位索引节点
            INODE *path2inode(int fd,char *pathname)
        11.5.3 显示索引节点磁盘块
    11.6 EXT2文件系统的实现
        11.6.1 文件系统的结构
        11.6.2 文件系统的级别
            大致分为三个级别
            第一级别实现了基本文件系统树
            第二级别实现了文件内容读/写函数
            第三级别实现了文件系统的挂载、卸载和文件保护
    11.7 基本文件系统
        11.7.1 type.h文件
            这类文件包含EXT2文件系统的数据结构类型
            此外还包含打开文件表、挂载表、PROC结构体和文件系统常数
        11.7.2 global.c文件
            这类文件包含文件系统的全局变量
        11.7.3 实用程序函数
        11.7.4 mount-root
        11.7.5 基本文件系统的实现
    11.8 1级文件系统函数
        11.8.1 mkdir算法
            创建一个带路径名的新目录
        11.8.2 creat算法
            创建一个空的普通文件
        11.8.3 mkdir-creat算法
        11.8.4 rmdir算法
        11.8.5 rmdir的实现
        11.8.6 link算法
        11.8.7 unlink算法
            创建一个从new_file到old_file的符号链接
        11.8.8 symlink算法
            读取符号文件的目标文件名并返回目标文件名的长度
        11.8.9 readlink算法
        11.8.10 其他1级函数
    11.9 2级文件系统函数
        11.9.1 open算法
        11.9.2 lseek
        11.9.3 close算法
    close(int fd)操作可关闭文件描述符
        11.9.4 读取普通文件
        11.9.5 写普通文件
    11.10 3级文件系统
        11.10.1 挂载算法
    mount filesys mount_point
        11.10.2 卸载算法
        11.10.3 交叉挂载点
        11.10.4 文件保护
    在Unix/Linux中,可通过文件索引节点中的权限位实现文件保护
        11.10.5 实际uid和有效uid
    在Unix/Linux中,每个进程都有一个实际uid和一个有效uid

 

        11.10.6 文件锁定

posted @ 2021-10-17 22:58  冯睿20191328  阅读(30)  评论(0编辑  收藏  举报