第三章.4节 文件系统的实现

版权声明:就是开个版权玩一下 https://blog.csdn.net/qq_41997479/article/details/86321845

(PS:个人课下整理的操作系统笔记,OneNote直接拷贝过来的,图片看不了就将就一下,配合张伟老师的PPT看效果更好)

一、文件系统的结构和实现

  1. Characteristics of disks磁盘性质
    • Can be rewritten in place可原地重写(有上限)
    • Can access directly any given block of information能够直接访问任何block
  2. 内存和硬盘之间的IO转移是以块为单位的,每一块为一个或多个扇区。
  3. 分层文件系统//重要
    • I/O控制为最低层,由设备驱动程序和中断处理程序组成,实现内存与磁盘之间的信息转移
    • 基本文件系统只需要向合适的设备驱动程序发送一般命令就可对磁盘上的物理块进行读写
    • 文件组织模块知道文件及其逻辑块和物理块,可以将逻辑块地址转换成基本文件系统所用的物理块地址
    • 逻辑文件系统管理元数据。元数据包括文件系统的所有结构数据,而不包括实际数据(或文件内容)。根据给定符号文件名来管理目录结构。
  1. FCB(file control block):包含了文件的一系列信息(但是没有文件名字
    • 文件权限
    • 文件的日期
    • 文件所有者、组、访问控制列表(ACL)
    • 文件大小
    • 文件数据块或者数据块的指针
  1. 创建新文件
  • 逻辑文件系统——管理文件的元数据,即结构数据,管理目录结构,管理FCB
    1. 逻辑文件系统要先分配一个FCB,new一个目录条目
    2. 读合适的目录到内存
    3. 更新文件名和FCB
    4. 写回到磁盘中
  1. 打开文件
    1. 调用open()将文件名传递给文件系统
    2. 当文件没打开过
      1. 系统范围的打开文件表找到该目录
      2. 在单个进程的打开文件表创建目录和指针
    3. 当文件已经打开
      1. Open()调用返回单个进程文件表的指向该目录的指针
  2. 关闭文件
    1. 单个进程的的打开文件表的该目录清除
    2. 系统范围的open count -1;
    3. 当所有用户关闭了所有文件,系统范围的打开文件表的目录清除

二、目录的实现:线性表和哈希表

三、磁盘空间分配的方式

  1. Contiguous allocation连续分配,产生碎片
    • 可以实现顺序访问和直接访问。
    • 同连续内存分配相似,有孔和碎片问题。合并。
    • 确定文件的大小比较困难。

  1. Linked allocation链接分配
    • 链接分配解决了连续分配的所有问题。对于每一个文件的目录项,包括第一块的地址和最后一块的地址。
    • 需要空闲空间列表记录空闲块。
    • 问题:
      • 智能顺序访问。要访问第i块,必须从头开始。不支持有效的直接访问。
      • 对于每一块来说,指针也需要一定的空间。 簇 cluster
      • 可靠性问题。指针链断裂
    • 文件分配表(File allocation table,FAT),系统中只有一个

每个卷的FAT表存储在该卷的开始位置。每个块都在FAT表中有一项,并通过块号索引。

在目录表中,一个文件对应一项,存储着首块号码,根据块号的索引,FAT条目包含文件下一块的号码,并一直链接到文件的结束,最后一块有文件的结束符。未使用的块在FAT中标为0.

  • 如果不适用FAT,则链接分配不能直接访问
  1. Indexed allocation索引分配
    • 索引分配把所有的指针放在一起,叫索引块。通过索引快解决了直接访问的问题。
    • 每个文件都有一个索引块,索引块是一个磁盘块地址的数组。索引块的第i条指向文件的第i块。
    • 目录条目包含索引块的地址。

  • 支持随机,顺序访问,但需要额外空间放索引块

 

四、空闲空间管理

 

  • 位图(就是上面那个001111…)需要开辟额外的空间

五、恢复

猜你喜欢

转载自blog.csdn.net/qq_41997479/article/details/86321845