• 20191330雷清逸 学习笔记5


    一、知识点归纳以及自己最有收获的内容

    知识点归纳:

    大纲:

    本章讨论EXT2文件系统。本章将引导读者实现一个完全与Linux兼容的完整EXT2文件系统。前提是,只要读者充分理解了一个文件系统,那么就可以轻松改编其他任何文件系统。
    本章首先描述了EXT2文件系统在Linux中的历史地位以及EXT3/EXT4文件系统的当前状况;
    用编程示例展示了各种EXT2数据结构以及如何遍历EXT2文件系统树;介绍了如何实现支持Linux内核中所有文件操作的EXT2文件系统;
    展示了如何通过虚拟磁盘的mount_root来构建基本文件系统;
    将文件系统的实现划分为3个级别,级别1扩展了基本文件系统,以实现文件系统树,级别2实现了文件内容的读/写操作,级别3实现了文件系统的挂载/装載和文件保护;
    描述了各个级别文件系统函数的算法,并通过编程示例演示了它 们的实现过程;
    将所有级别融合到一个编程项目中;最后,将所有编程示例和练习整合到一个完全有效的文件系统中。

    本章中重要知识点归纳:

    超级块:
    1.s_first_data_block: 0表示4KB块大小,1表示1KB块大小。它用于确定块组描述符的 起始块,即 s_first_data_block + 10
    2.s_log_block_size :确定文件块大小,为 lKB*(2**s_log_block_size),例如:0 表示 1KB块大小,1表示2KB块大小,2表示4KB块大小等。最常用的块大小是用于小文件系 统的1KB和用于大文件系统的4KB。
    3.s_mnt_count :已挂载文件系统的次数。当挂载计数达到max mnt count时,fsck会话 将被迫检查文件系统的一致性。
    4.s_magic:文件系统类型的幻数。EXT2/3/4文件系统的幻数是0xEF53

    索引节点:

    u16 i_mode;		// 16 bits =|ttttlugs|rwx|rwx|rwxl
    u16 i_uid;		// owmer uid 
    u32 i_size;		// file size in bytes 
    u32 i_atime;	//time fields in seconds
    u32 i_ctime;	// since 00:00:00,1-1-1970
    u32 i_mtime;
    u32 _dtime;
    u16 i_gid;		// group ID 
    u16 i_links_count;// hard-link count
    u32 i_blocks;	// number of 512-byte sectors 
    u32 i_flags;	//IGNORE
    u32 i_reservedl;// IGNORE
    u32 i_block[15];// See details below 
    u32 _pad[7];	// for inode size = 128 bytes
    }
    

    文件系统项目的扩展:
    (1)多个组:组描述符的大小为32字节”对于1KB大小的块,一个块可能包含 1024/32 = 32组描述符。32个组的文件系统大小可以扩展为32*8 = 256MB.
    (2)4KB大小的块:对于4KB大小的块和一个组,文件系统大小应为48 = 32MB。对于一个组描述符块,文件系统可能有128个组,可将文件系统大小扩展到12832 = 4GB。 对于2个组描述符块,文件系统大小为8GB等。大多数扩展都很简单,适合用于编程项目。
    (3)管道文件:管道可实现为普通文件,这些文件遵循管道的读/写协议。此方案的优点是:它统一了管道和文件索引节点,并允许可被不相关进程使用的命名管道。为支持快速读/写操作,管道内容应在内存中,比如在RAMdisk中。必要时,读者可将命名管道实现为FIFO文件.
    (4)I/O缓冲:在编程项目中,每个磁盘块都是直接读写的。这会产生过多的物理磁盘I/O操作。为提髙效率,实际文件系统通常使用一系列I/O缓冲区作为磁盘块的缓存内存。

  • 相关阅读:
    Linux驱动之异常处理体系结构简析
    Linux驱动之按键驱动编写(查询方式)
    Linux驱动之LED驱动编写
    Linux驱动之建立一个hello模块
    Linux驱动之内核加载模块过程分析
    制作根文件系统之制作根文件系统步骤详解
    制作根文件系统之Busybox init进程的启动过程分析
    制作根文件系统之内核如何启动init进程
    制作根文件系统之内核挂接文件系统步骤分析
    Linux移植之tag参数列表解析过程分析
  • 原文地址:https://www.cnblogs.com/leo-skr/p/15418174.html
Copyright © 2020-2023  润新知