zoukankan      html  css  js  c++  java
  • 《信息安全系统设计与实现》学习笔记5

    第11章 EXT2文件系统

    教材学习内容总结

    本章主要讲述了EXT2文件系统。首先描述了EXT2 文件系统的历史,并对比了 EXT3/EXT4 文件系统。用程序示例展示了EXT2的数据结构,并将文件系统的实现划分为3个级别,级别1扩展了基本文件系统,以实现文件系统树,级别2实现了文件内容的读/写操作,级别3实现了文件系统的挂载/装载和文件保护。

    1、EXT2文件系统

    (1)虚拟磁盘布局

    (2)磁盘块内容

    Block#0:引导块,用于容纳从磁盘引导操作系统的引导程序
    
    Block#1:超级块,用于容纳关于整个文件系统的信息
    
    Block#2:块组描述符块,EXT2将磁盘块分成几个组,每组用一个块组描述符结构体描述
    
    Block#8:块位图,用来表示某种项的位序列
    
    Block#9:索引节点位图,用来代表一个文件的数据结构
    Block#10:索引节点块,每个文件都用一个128字节的独特索引节点结构体表示
    目录条目:目录包含dir_entry结构
    

    2、基本文件系统

    (1)type.h文件

    包含EXT2文件系统的数据结构类型,还包含打开文件表、挂载表、PROC结构体和文件系统常数。
    

    (2)global.c文件

    包含文件系统的全局变量。
    

    (3)实用程序函数

    util.c file:包含文件系统常用的实用程序函数
        get_block/put_block函数:该函数将虚拟磁盘块读/写到内存的缓冲区中。
        iget(dev,ino):该函数返回一个指针,指向包含INODE(dev,ino)的内存minode。
        The put(INODE *mip):该函数释放一个mip指向的用完的minode。
        getino():该函数实现文件系统树遍历算法。
    

    (4)mount-root

    mount_root.c文件:包含mount_root()函数,在系统初始化期间调用该函数来挂载根文件系统。
    

    3、文件系统函数

    文件系统结构

    文件系统的实现分为三个级别。

        第1级别实现了基本文件系统树。
        第2级别实现了文件内容读/写函数。
        第3级别实现了文件系统的挂载、卸载和文件保护。
    

    (1)1级文件函数

    mkdir_creat.c      : make directory, create regular file
    ls_cd_pwd.c        : list directory, change directory, get CWD path
    rmdir.c            : remove directory
    link_unlink.c      : hard link and unlink files
    symlink_readlink.c : symbolic link files
    stat.c             : return file information
    misc1.c            : access,chmod, chown, utime, etc.
    
    
    1)mkdir算法
    mkdir pathname
    创建一个带路径名的新目录
    
    2)creat算法
    创建一个空的普通文件
    
    3)rmdir算法
    rmdir实现
    link命令:link old_file new_file
    
    4)unlink算法
    symlink命令:symlink old_file new_file
    
    

    (2)2级文件函数

    open_close_lseek.c :  open file for RBAD | WRITE|APPEND,close file and lseek
    read.c             :  read from file descriptor of an opened regular file
    write.c            :  write to file descriptor of an opened regular file
    opendir_readdir.c  :  open and read directory
    
    1)open算法
    2)lseek
    3)close算法
    

    (3)3级文件函数

    mount__umount.c    : mount/umount file systems
    file_protection    : access permission checking
    file-locking       : lock/unlock files
    
    1)挂载算法
    挂载操作命令:
    
    2)卸载算法
    
    

    4、实践

    创建虚拟磁盘
    在名为vdisk的虚拟磁盘文件上创建一个EXT2文件系统,有1440个大小为1KB的块。

        dd if=/dev/zero of=vdisk bs=1024 count=1440
        mke2fs vdisk 1440
    

    查看各分区挂载

    查看超级块

    5、问题

    为什么每个块组中的块数是8192个?
    答:因为用1个块作为位图保存本块组block的使用情况(bit为1表示对应的block被使用,bit为0表示对应的block空闲),1个block是1024字节,共有1024*8=8192个bit。所以,每个块组最多只能是81292个块。

  • 相关阅读:
    spring中@Lookup的作用
    spring中的观察者模式
    spring事务源码解析
    spring中@Configuration注解的作用
    HTML5和CSS3
    TCP/IP协议
    Android项目的settings.gradle和build.gradle
    AndroidManifest.xml 最全详解
    Android实现网络监听
    Android数据存取
  • 原文地址:https://www.cnblogs.com/daijunxi2019/p/15412235.html
Copyright © 2011-2022 走看看