Alex_McAvoy

想要成为渔夫的猎手

文件实现与文件的基本操作

【文件实现】

概述

在文件系统高层设计时,主要问题是如何将逻辑记录构成一个逻辑文件,而在文件系统低层设计时,主要问题是如何将一个文件存储在外存上,可见,所有的文件都存在以下两种形式的结构:

  • 文件的逻辑结构:从用户出发所看到的文件形式,独立于文件的物理特性
  • 文件的物理结构:系统将文件存储在外存上所形成的一种存储组织结构,用户不可见

文件实现,是指文件数据从逻辑地址到物理地址的映射,并对物理设备上的文件空间进行组织、管理,其要解决两个问题:

  • 文件分配方式:对磁盘上的非空闲块进行管理,针对文件的逻辑地址
  • 文件存储空间管理:对磁盘上的空闲块进行管理,针对文件的物理地址

文件分配方式

磁盘块,是指磁盘中存储单元被划分为一个个的物理块,每块的大小与内存块、页面大小相同,其是内存与磁盘间数据交换的基本单位

对于文件的逻辑地址来说,其结构如下:

对于文件的物理地址来说,其结构如下:

文件分配方式,就是在用户使用逻辑地址操作文件时,OS 负责实现文件从逻辑地址到物理地址的映射

文件存储空间管理

在物理存储设备中,物理磁盘被划分为一个个文件卷

在初始化后,文件卷会被划分为存放 FCB、存储空间管理信息的目录区和存储文件数据的文件区

文件存储空间管理,就是将物理存储设备划分为诸多大小相同的物理块,以块为单位进行管理,因此其又被称为文件盘块分配

【文件的基本操作】

概述

用户可通过文件系统提供的系统调用实施对文件的操作,最基本的操作有:

  • 创建文件:分配必要的外存空间,并在文件目录中创立一个目录项,记录新文件的文件名、外存地址等属性
  • 删除文件:在外存找到要删除的目录项,使其成为空项,然后回收该文件所占用的存储空间
  • 打开文件:根据文件存放目录,将文件打开,并指示文件操作类型是读操作还是写操作
  • 关闭文件:将打开的文件关闭,并将其在打开文件表项中删除,同时回收该文件的所有资源

创建文件

创建文件使用 create 系统调用,需要提供所需外存空间大小、文件存放路径、文件名这三个参数

具体流程如下:

  1. 在外存中找到文件所需空间
  2. 根据存放路径找到目录文件
  3. 在目录文件中创建对应目录项

删除文件

删除文件使用 delete 系统调用,需要提供文件存放路径、文件名这两个参数

具体流程如下:

  1. 根据存放路径找到相应目录文件
  2. 在目录文件中找到相应目录项
  3. 根据目录项信息,回收文件占用磁盘块
  4. 从目录表中删除对应目录项

打开文件

打开文件使用 open 系统调用,需要提供文件存放路径、文件名、对文件操作类型这三个参数

具体流程如下:

  1. 根据存放路径找到相应目录文件
  2. 在目录文件中找到相应目录项
  3. 检查该用户是否有对文件操作的相应权限
  4. 将目录项复制到内存打开的文件表中
  5. 将对应表的目的编号返回用户
  6. 用户通过编号来指明要操作的文件

对于打开文件表来说,其有两种:

  1. 系统的打开文件表:记录系统的打开文件,存在打开计数器,记录该文件此时已被几个进程打开
  2. 进程的打开文件表:记录进程的打开文件
    • 系统表索引项:记录在系统表中的编号
    • 读写指针项:记录该进程对文件读写操作进行到的位置
    • 访问权限项:表目该进程对文件所具有的权限

关闭文件

关闭文件使用 close 系统调用,需要提供文件存放路径、文件名这两个参数

具体流程如下:

  1. 将进程打开文件表相应表项删除
  2. 回收分配给该文件的资源
  3. 系统的打开文件表的打开计数器 $-1$
  4. 当打开计数器值为 $0$ 时,删除该表项
感谢您对我的支持,让我继续努力分享有用的技术与知识点!