操作系统4:文件管理

正文索引 [隐藏]

1. 文件系统与文件

文件系统:OS 中与文件管理有关的那部分软件以机被它们管理的文件和文件属性的集合

文件控制

在磁盘上,FCB:File Control,包括 file 的信息

image-20191214173831089

在内存上:

  • Mount-table
  • Direnctor-structure cache
  • System-wide open-file table
  • Per-process open-file table

文件:具有文件名的一组相关信息的集合

文件操作

  • 创建:分配磁盘空间 + 在文件目录中创建一个条目
  • 删除:搜索目录 + 释放文件空间 + 删除条目
  • 截断:搜索目录 + 擦除文件内容,但保留其属性
  • 读:搜索目录 + 读取文件内容
  • 写:搜索目录 + 将内容写入文件
  • 重定位:搜索目录 + 更新文件位置

对不同的操作系统都提供统一的操作,需要使用 VFS (Virtual File System)技术,向用户提供相应 API

文件共享

文件结构

  • 无结构文件(流式文件):就是一串 bit 流

  • 有结构文件(记录式文件)

    • 简单结构:每个记录存一行
    • 复杂结构:标准化文档(比如 html)

ps:UNIX 用的是无结构文件

2. 记录式文件访问

顺序访问

文件中的信息按照顺序排列,访问的时候文件指针自动移动:

  • read next:读取下一部分的数据
  • write next:写入下一部分数据
  • reset:文件指针自动移向文件开始处
  • skip forward/backward:只移动指针,不进行读写操作

直接访问

又称索引访问

文件中的信息按照顺序排列,访问时直接根据索引算出物理地址进行访问,

  • read n:读取第 n 部分的数据
  • write n:写入第 n 部分的数据

索引顺序访问

顺序访问常和直接访问结合起来,减少了索引表所占用的空间

image-20191214163311374

3. 存储空间分配

就是给文件分配物理空间

连续分配

image-20191214164505230

链式分配

image-20191214164834211

索引分配

每个文件都有一个 index 块,记录了文件所用块的位置

image-20191214164843024

但是要注意,如果文件特别大,达到一个 index 块都记不下了(512 word),就得采用分级机制:

image-20191214165035030

4. 空闲空间管理

空闲表法

适用于连续分配,系统建立一张空闲表,每个表项对应一个空闲区,登记的该区的起始块号和块数等

空闲链法

把空闲块组织成一个链接文件

image-20191214165523619

Bitmap 法

又称 Bit Vector 法,适用于所有分配方式,在磁盘中留下 n 位记录位,用于记录块是否空闲

image-20191214165632790

成组链接法

将一个文件卷的所有空闲盘块按固定大小(如每组100块)分成若干组,并将每组的盘块数和该组所有盘块号记入前一组的最后一个备用块内,第一组的盘块数(可小于100)和该组所有的盘块号记入超级块的空闲盘块号栈中

  • 分配:
    • 若第一组不只一块,则将超级块中的空闲盘块数减 1,并将空闲盘块号栈栈顶的盘块分配出去
    • 若第一组只有一块且栈顶的盘块号不是结束标记0,则先将该块的内容(记录有下一组的盘数和盘块号)读到超级块中,然后再将该块分配出去;否则若栈顶的盘块号为结束标记0,则表示该磁盘已无空闲盘块可供分配
  • 回收:
    • 若第一组不满100块,则只需将回收块的块号填入超级块的空闲盘块栈栈顶,并将其中的空闲盘块数加1
    • 若第一组已有100块,则必须将超级块中的空闲盘块数和空闲盘块号写入回收块中,然后将盘块数1和回收块的块号写入超级块中
  • 空闲盘块号栈是临界资源,必须互斥使用(通过锁来实现)

5. 目录管理

目录其实就是 FCB 的有序结合,结合方式如下:

单级目录

image-20191214171547714

缺点:不支持文件名称相同,不支持分组,查找文件耗时大,不支持文件链接

双级目录

  • 在两级目录结构中,当用户作业开始或用户登录时,将搜索系统的主文件目录(MFD),MFD由用户名或帐号索引,每个条目均指向该用户的UFD
  • 每个用户都有自己的用户文件目录(UFD) ,每个UFD仅列出单个用户的文件

image-20191214171604009

缺点:不支持分组,不支持文件链接

三级目录

image-20191214171622686

缺点:不支持文件链接

非循环图目录

image-20191214171857191

缺点:一个文件可能有多条绝对路径,链接不灵活

循环图目录

image-20191214171952198

缺点:一个文件可能有多条绝对路径,且无法递归访问(容易无限循环)

解决方案:软链接 + 硬链接

  • 硬链接:只能指向一个文件,删除该链接时,文件删除
  • 软连接:可指向目录,递归访问时不访问软链接,软连接删除时,文件也不删除,相当于一个快捷方式