学习笔记5 第十一章的自学归纳

EXT2文件系统

  • EXT2第二代扩展文件系统(英语:second extended filesystem,缩写为 ext2),是LINUX内核所用的文件系统。它开始由Rémy Card设计,用以代替ext,于1993年1月加入linux核心支持之中。

EX2文件系统数据结构

创建虚拟硬盘

mke2fs [-b blksize -N ninodes] device nblocks

超级块

  • 重要字段如下:
    u32 s_inodes_count
    u32 s_blocks_count
    u32 s_r_blocks_count
    u32 s_free_blocks_count
    u32 s_mtime
    u32 s_wtime
    u32 s_magic
    u32 s_inodes_per_group
    u32 s_mnt_count
    u32 s_max_mnt_count
    u32 s_state

块组描述符

  • Block#2:块组描述符块,EXT2将磁盘块分为几个组,每个组有8192个块,用一个块组描述符结构体来描述。

块和索引节点位图

  • Block#8:块位图,位图是用于表示某种项的位序列,也用于分配和回收项。
  • Block#9:索引节点位图,一个索引节点代表一个文件的数据结构。

索引节点

  • Block#10:索引(开始)节点块,每个文件都用一个128字节的唯一索引节点结构体表示
  • 直接块、间接块、双重间接块、三重间接块

数据块

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

邮差算法

  • 组合优化问题(旅行商问题):找到一条最短路径,使得一个旅行商能够恰好访问所有给定的城市一次,并最终回到起始城市。
  • 算法例子:最近邻算法(Nearest Neighbor Algorithm)、克里斯托弗算法(Christofides Algorithm)、模拟退火算法(Simulated Annealing)和遗传算法(Genetic Algorithm)
  • c语言中的Test-Set-Clear
  • 将索引节点号转换为磁盘上的索引节点

编程示例

  • 显示超级快
  • 显示位图
  • 显示根索引节点
  • 显示目录条目

3级文件系统函数

函数示例如下:

  • open(): 打开文件,创建一个文件描述符,并返回该描述符用于后续的文件操作。

  • close(): 关闭文件,释放文件描述符,并确保所有对文件的操作都已完成。

  • read(): 从文件中读取数据。它接受文件描述符、缓冲区和要读取的字节数作为参数,并返回实际读取的字节数。

  • write(): 向文件中写入数据。它接受文件描述符、要写入的数据和要写入的字节数作为参数,并返回实际写入的字节数。

  • lseek(): 在文件中进行定位。它用于在文件中移动读/写指针的位置,以便执行随机访问。可以设置指针相对于文件开头的偏移量,也可以相对于当前位置或文件末尾。

  • mkdir(): 创建一个新目录。它接受目录路径和权限参数,并尝试创建一个具有指定名称和权限的新目录。

  • rmdir(): 删除一个空目录。它接受目录路径作为参数,并尝试删除指定的空目录。

  • unlink(): 删除一个文件。它接受文件路径作为参数,并尝试删除指定的文件。

挂载算法

  • mount filesys mount_point
    可将某个文件系统挂载到mount_point目录上

卸载算法

  • 卸载文件系统可卸载已挂载的文件系统。

交叉挂载点

  • 向下遍历
  • 向上遍历

文件保护

文件系统项目拓展

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

遇到的问题

苏格拉底挑战







posted on 2023-10-15 20:13  20211422王俊凯  阅读(3)  评论(0编辑  收藏  举报