第四章-文件管理

XCurry Lv3

无结构文件:文件内部的数据就是一系列二进制流或字符流组成。又称“流式文件”。如“.txt”
有结构文件:有一组相似的记录组成,又称“记录式文件”。每条记录若干个数据项组成。根据各条记录的长度是否相等,又可分为定长记录和可变长记录。

有结构文件

顺序文件

文件中的记录一个接一个地顺序排列(逻辑上),记录可以是定长地或可变长的。
串结构:记录之间的顺序与关键字无关(时间决定)
顺序结构:记录之间的顺序按关键字顺序排列
当采用链式存储时,无论是定长/可变长记录,都无法实现随机存取,每次只能从第一个记录开始依次往后查找。
可变长记录的顺序存储是无法实现随机存取。每次只能从第一个记录开始依次往后查找。
采用定长记录地顺序结构可以快速找到某关键字对应的记录。
采用定长记录的串结构,无法快速找到某关键字对应的记录。

索引文件

建立一张索引表(定长记录的顺序文件)以加快文件检索速度,主要用于对信息处理的及时性要求比较高的场合。

索引顺序文件

索引文件对存储空间的利用率低。一组记录对应一个索引表项。定长记录串结构。

多级索引顺序文件

为顺序文件建立多级索引表。

文件目录

目录本身就是一种有结构的文件,有一条条记录组成。一条记录就是一个文件控制块(FCB)
对目录进行的操作有:搜索、创建文件、删除文件、显示目录、修改目录
单级目录实现乐“按名存取”,但是不允许文件重名。
两级文件目录分为主文件目录和用户文件目录,实现不同用户访问限制,但失去灵活性。
多级目录结构:树形目录结构,从根目录出发的路径称为绝对路径。从当前目录出发的“相对路径”,不便于实现文件的共享
无环图目录结构:可以用不同的文件名指向同一文件,需要为每个共享节点设置一个共享计数器。
索引节点只针对文件名,不需要其他冗余信息。

文件的物理结构

磁盘块的大小与内存块、页面的大小相同。文件的逻辑地址空间也被分为一个一个的文件“块”
连续分配方式要求每个文件在磁盘上占有一组连续的块。支持顺序访问和直接访问(随机访问)。连续分配的文件在顺序读/写时速度最快。不方便拓展;存储空间利用率低,会产生难以利用的磁盘碎片。
链接分配:隐式链接和显式链接。

  • 隐式:只支持顺序访问,不支持随机访问;方便文件拓展,不会有碎片问题,外存利用率高
  • 显式:逻辑块号转换成物理块号的过程不需要读磁盘操作;支持随机访问;文件访问效率高;文件分配表需要占用一定的存储空间
    索引分配:允许文件离散地分配在各个磁盘块中,系统会为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块。索引表存放的磁盘块称为索引块。文件数据存放的磁盘块称为数据块。
  • 支持随机访问,文件拓展也很容易实现
  • 如果索引表太大,一个索引块装不下,那么可以将多个索引块链接起来存放
  • 建立多层索引表,各层索引表大小不能超过一个磁盘块,采用K层索引结构,且顶级索引表未调入内存,则访问一个数据块只需要K+1次读磁盘操作
  • 混合索引:多种索引分配方式结合

文件存储空间管理

  • 空闲表法
  • 空闲链表法
    • 空闲盘块链
    • 空闲盘区链
  • 位示图法
  • 成组链接法

文件的基本操作

create系统调用

  • 在外存中找到文件所需的空间
  • 在目录中创建该文件对应的目录项

Delete系统调用

  • 找到文件名对应的目录项
  • 回收文件占用的磁盘块
  • 删除文件对应的目录项

Open系统调用

打开文件操作的主要工作是把指定文件的目录项复制到内存指定的区域;open()调用的参数含有需要打开的文件的文件名

  • 找到文件名对应的目录项
  • 将目录项复制到内存中的“打开文件表”中。用户使用打开文件表的编号来指明要操作的文件

Close系统调用

  • 将进程的打开文件表相应表项删除
  • 回收分配给该文件的内存空间等资源
  • 系统打开文件表的打开计数器count减1,若count=0,则删除对应表项

Read系统调用

  • 按文件描述符在打开文件表中找到该文件的目录项
  • 安村去控制说明检查访问的合法性
  • 根据目录项中该文件的逻辑和物理组织形式,将逻辑记录号转换成物理块号
  • 向设备驱动程序发出I/O请求,完成数据交换工作

Write系统调用

文件共享

  • 基于索引节点的共享方式(硬链接)
  • 基于符号链的共享方式(软链接)(Windows的快捷方式)

文件保护

  • 口令保护:为文件设置一个“口令”,用户想要访问文件时需要提供口令,由系统验证口令是否正确
    • 优点:保存口令的空间开销不多,验证口令的时间开销也很小
    • 缺点:正确的“口令”存放在系统内部,不够安全
  • 加密保护:使用某个“密码”对文件进行加密,在访问文件时需要提供正确的“密码”才能对文件进行正确的解密
    • 优点:保密性强,不需要在系统中存储“密码”
    • 缺点:编码/译码,或者说加密/解密要花费一定时间
  • 访问控制:在每个文件的FCB中增加一个访问控制列表,该表中记录了各个用户可以对该文件执行哪些操作
    • 优点:实现灵活,可以实现复杂的文件保护功能

虚拟文件系统(VFS)

Linux实现虚拟文件系统VFS的对象类型:超级块对象、索引节点、目录项、文件

  • 向上层用户进程提供统一标准的系统调用接口,屏蔽底层具体文件系统的实现差异
  • VFS要求下层的文件系统必须实现某些规定的函数功能
  • vnode只存在于主存中,inode既会调入主存,也会在外存中存储
    文件系统挂载:
  • 在VFS中注册新挂载的文件系统
  • 新挂在的文件系统,要向VFS提供一个函数地址列表
  • 将新文件系统加到挂载点,也就是将新文件系统挂载再某个父目录
  • 标题: 第四章-文件管理
  • 作者: XCurry
  • 创建于 : 2024-09-07 21:30:00
  • 更新于 : 2024-09-14 21:38:23
  • 链接: https://github.com/XYXMichael/2024/09/07/操作系统/第四章-文件管理/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论