文件系统 | Personal Blog

文件系统

文件

文件是一种抽象机制;对于操作系统而言,文件只是一系列字符串,并不予以识别

文件访问

  • 顺序访问:当以磁带存储数据时,进程按顺序读取数据,不能跳过,也不能不按顺序读取

  • 随机访问: 能够从指定地址开始访问文件

文件属性

文件的属性记录了文件的相关信息,限制了用户的访问权限

文件操作

  • create:表示文件即将创立,初始化文件

  • delete: 删除

  • open:在使用文件之前,必须先打开文件;将文件属性和磁盘地址表装入内存

  • close:访问结束,关闭文件释放内存

  • write:向文件添加数据

  • append:在文件末尾添加数据

  • seek: 调用系统指针指向需要访问的地址

  • get attributes:读取文件属性

  • set attributes:设置文件属性

  • rename:重命名

文件系统的实现

文件的实现

  • 连续分配: 将文件以连续数据块的形式存储在磁盘上;这种方式在运行一段时间后会造成磁盘空间的浪费

  • 链表分配: 为每个文件构造磁盘块链表,将文件分割为多块,以指针的形式联系;这种方式要求在访问第n块时,遍历前n-1块

  • 利用内存表的分配: 文件分配表中存储了文件不同的块的地址,通过遍历分配表,可以找到某文件的全部块;这种方式需要将整张文件分配表存放在内存中

  • 基于i节点的分配: 当一个文件打开时,内存中的相关表就添加该文件的相关地址到i节点

目录的实现

文件系统所维护的文件属性,必须以数据的形式存储到某个地方

  1. 直接存储在目录项中,目录表包含文件名和文件属性;

  2. 存储至i节点中,目录表包括文件名和i节点号;

  3. 可变的目录项大小,依次填入文件项长度,属性和文件名

  4. 目录项有固定长度,文件名存储在目录后的堆中

  5. 为了避免顺序查找的冗长,可以使用散列表对目录进行处理

共享文件

当不同用户之间需要共享文件时,由于写时复制的保护(存疑),一个用户的修改不会导致另一共享该文件的用户目录下的文件变化

  1. 需要被共享的文件的磁盘地址存放在i节点中,需要共享的用户将目录指向i节点

  2. 将一个存放共享文件路径的新文件放在需要共享的用户目录下,当访问该文件时,操作系统跳转至真实文件的地址处

虚拟文件系统

为了实现多种文件管理系统在同一个操作系统下应用,提出POSIX接口,将不同文件管理系统的共同处封装,并提供多个接口

初始化时,不同的文件管理系统都在虚拟文件系统中进行注册,由虚拟文件系统分配地址空间;这样,就可以在不同的地址块中使用不同的不同的文件管理系统

文件系统的管理和优化

磁盘空间管理

文件被分割为固定大小的块,若块较大,则会浪费存储空间;若块较小,则会增大寻址时间

为了确定空闲块的位置,我们可以通过空闲表或位图表示

为了分配有限的磁盘空间,系统会为用户分配各自的配额空间

磁盘转储分为物理转储和逻辑转储:物理转储将文件从磁盘按块一一录入磁带中;逻辑转储递归地将某指定日期后的被更改的文件及目录转储

  • 坏块:由于制作工艺或格式化,硬盘中会存在少许坏道,但进行转储时显然不能将坏道转储,于是有必要将坏道放入同一个文件并禁止访问

文件系统的一致性

当系统意外崩溃时,需要对文件系统的一致性进行检查

检验程序遍历每个块,将块号加到空闲表中,若一个文件出现了两次或同时处于空闲和占有两种状态或空闲块中没有空闲文件,表示文件系统状态不一致

文件系统性能

  • 高速缓存:检查需要读的文件是否在高速缓存内,若是,则直接读取,否则将磁盘中对应位置的文件读入高速缓存,再完成用户要求;高速缓存已满则需要调出某块高速缓存进行替换,与页面置换算法有共同点

    通写高速缓存:只要一个高速缓存块被修改,则将该块写入磁盘

  • 块提前读:系统假设用户会顺序读文件,于是将现在所读的下一块提前读入高速缓存,但若用户随机读取,则这种方法会占有一定带宽

  • 减少磁盘臂运动

将可能连续访问的文件存放在同一个柱面,以减少磁盘臂需要移动的距离

  • 碎片整理

随着时间的推移,磁盘中文件的数量逐渐增多,会产生大量文件与文件之间的细碎空闲区域,这样,新创建的文件就必须分散存放在磁盘中,访问时间大大增长

为了改善这种情况,需要将文件逐渐复制存储到固定的区域,这样就会整理出较完整的大空闲区域,文件也就能够连续存储

本文共1803字符