# 文件

# 概念

文件是一种抽象机制,它提供了一种把信息保存在磁盘等存储设备上,并且便于以后访问的方法。抽象性体现在用户不必关心具体的实现细节。

可以视为一个单独的连续的逻辑地址空间,其大小即为文件的大小,与进程的地址空间无关。

# 文件控制块(FCB)

为管理文件而设置的数据结构,保存管理文件所需的所有有关信息(文件属性或元数据)

# 常用属性

  • 标识符:一个系统内的各文件标识符唯一,对用户来说毫无可读性,因此标识符只是操作系统用于区分各个文件的一种内部名称。
  • 类型:指明文件的类型
  • 位置:文件存放的路径(让用户使用)、在外存中的地址 (操作系统使用,对用户不可见)
  • 大小:指明文件大小创建时间、上次修改时间文件所有者信息
  • 保护信息:对文件进行保护的访问控制信息

# 文件类型

  • 按性质和用途: 系统文件、库文件、用户文件
  • 按数据形式:源文件、目标文件、可执行文件
  • 按对文件实施的保护级别分:只读文件、读写文件、执行文件、不保护文件
  • 按逻辑结构分:有结构文件、无结构文件
  • 按文件中物理结构分:顺序文件、链接文件、索引文件

# 逻辑结构

这是从用户角度看文件,由用户的访问方式确定的。这里给出了三种逻辑结构,我们主要研究记录式文件

image-20250524160711032

# 流式结构

也称为 “无结构”。构成文件的基本单位是字符,文件是有逻辑意义、无结构的一串字符的集合

# 记录式文件

文件由若干记录组成,可以按记录进行读写、查找等操作。

每条记录有其内部结构,由若干个数据项组成

# 物理结构

文件在存储介质上的存放方式,表示了一个文件在文件存储介质上的位置、链接和编目的方法。

主要解决两个问题:

  • 假设一个文件被划分成 N 块,这 N 块在磁盘上是怎么存放的?
  • 其地址(块号或簇号)在 FCB 中是怎样记录的?

# 连续(顺序)结构

将文件数据存储在磁盘上 连续的物理块 中的方式

image-20250524222207621

  • 优点:

    • 结构简单,实现容易,不需要额外的空间开销
    • 支持顺序存取随机存取
    • 连续存取时速度较快
  • 缺点:

    • 文件长度一经固定便不易改变;
    • 不利于文件的动态增加和修改;

适用于变化不大的顺序访问的文件

# 串联结构

通过指针将文件的 非连续物理块 链接起来的存储方式

每个物理块的最末一个字(或第一个字)作为链接字,它指出后继块的物理地址。链首指针存放在该文件目录中。文件的结尾块的指针为 “∧”“0” ),表示文件至本块结束

image-20250524222457773

  • 优点

    • 空间利用率高;能较好的利用辅存空间
    • 文件动态扩充和修改容易
    • 顺序存取效率高
  • 缺点:

    • 随机存取效率太低,如果访问文件的最后的内容,实际上是要访问整个文件
    • 可靠性问题,如指针出错
    • 链接指针占用一定的空间

# 索引结构

一个文件的信息存放在若干个不连续物理块中

  • 系统为每个文件建立一个专用数据结构:索引表,并将这些物理块的块号存放在该索引中
  • 索引表就是磁盘块地址数组,其中第 i 项指向文件的第 i 块。

image-20250524223937068

  • 优点

    • 保持了链接结构的优点,又回避了其缺点

    • 即能顺序存取,又能随机存取。满足了文件动态增长、插入删除的要求

    • 能充分利用外存空间

  • 缺点

    • 索引表本身带来了系统开销。如:内外存空间,存取时间

# 索引表的组织

  • 链接模式 (直接索引方式)

    一个盘块一个索引表,多个索引表链接起来

  • 多级索引 (间接索引方式)

    将一个大文件的所有索引表(二级索引)的地址放在另一个索引表(一级索引)中

image-20250524225046384

# 目录

# 概念

目录是由文件说明索引组成的用于文件检索的特殊文件。文件目录的内容主要是文件访问和控制的信息(不包括文件内容)

image-20250524162441091

# 目录内容

# 目录项

不同的系统采用不同的实现方法,一般分为两类:

  • 直接法:目录项=文件名+ FCB (属性信息、在外存上的存放位置)。如 MS-DOS/Windows
  • 间接法:目录项=文件名+ FCB c 的地址(索引号)。如 Unixinode

image-20250525130054995

# 长文件名

有三种实现方法:

  • 在目录项中,将文件名的长度固定为 255 个字符

    • 缺点:浪费空间,很少文件用很长的名字;
  • 如图 (a) ,每个目录项的长度可变,分为三部分:目录项长度、文件的属性信息(此两项长度固定)、文件名(长度可变)。

    • 缺点:文件被删除后,该目录项所占用的空间不太好回收利用;
  • 如图 (b) ,目录项本身的长度固定,把长度可变的文件名统一放在目录文件的末尾

image-20250525130516066

# 单级目录

image-20250524163049506

  • 结构简单

  • 文件多时,目录检索时间长

  • 不便于实现共享

# 两级目录

适用于多用户系统,各用户可有自己的专用目录

image-20250524163243236

# 多级目录(树形)

image-20250524163431935

  • 层次清楚
  • 可解决文件重名问题
  • 查找速度快
  • 目录级别太多时,会增加路径检索时间

# 磁盘空间管理

# 空闲表法

为一个磁盘创建一个表,来存储空闲磁盘块的位置

image-20250525131022292

# 位示图

用一串二进制位反映磁盘空间中的分配使用情况,每个物理块对应一位,已分配物理块为 1 ,否则为 0

image-20250525135511322

练习:1 个物理盘块大小为 512B,一个 10TB 硬盘,采用位示图法管理磁盘块空闲情况,则需要多少(额外)存储空间?

2.5GB

# 空闲链表法

# 空闲盘块链

将所有空闲存储空间,以盘块为基本元素成链。操作系统保存着链头、链尾指针

  • 分配:若某文件申请 K 个盘块,则从链头开始依次摘下 K 个盘块分配,并修改空闲链的链头指针
  • 回收:回收的盘块依次挂到链尾,并修改空闲链的链尾指针
  • 优点:分配和回收盘块的过程非常简单
  • 缺点:空闲盘块链可能很长

image-20250525140021742

# 空闲盘区链

将磁盘上的所有空闲盘区(每个盘区可包含若干个连续盘块)拉成一条链。在每个盘区上除了含有用于指示下一个空闲盘区的指针外,还应标有指明本盘区大小(盘块数)的信息

  • 分配:若某文件申请 K 个盘块,则可以采用首次适应、最佳适应等算法,从链头开始检索,按照算法规则找到一个大小符合要求的空闲盘区,分配给文件。若没有合适的连续空闲块,也可以将不同盘区的盘块同时分配给一个文件,注意分配后可能要修改相应的链指针、盘区大小等数据。
  • 回收:若回收区和某个空闲盘区相邻,则需要将回收区合并到空闲盘区中。若回收区没有和任何空闲区相邻,将回收区作为单独的一个空闲盘区挂到链尾。

image-20250525140325751

# 成组链接法

空闲表法、空闲链表法不适用于大型文件系统,因为空闲表或空闲链表可能过大。 UNIX 系统中采用了成组链接法对磁盘空闲块进行管理

把空白物理块分成组,在通过指针把组与组之间链接起来,这种管理空白块的方法称为成组链接法。

  • 优点
    • 空白块号登记不占用额外空间
    • 节省时间
    • 采用后进先出的栈结构思想

image-20250525141317891

# 文件系统

# 概念

操作系统中与文件管理有关的那部分软件和被管理的文件以及实施管理所需要的数据结构的总体。

为系统管理者和用户提供了对文件的透明存取(按名存取):

  • 不必了解文件存放的物理机制和查找方法,只需给定一个代表某段程序或数据的文件名称,文件系统就会自动地完成对给定文件名称相对应的文件的有关操作

# 层次结构

image-20250525141455986

# 文件保护

# 建立副本

把同一个文件保存到多个存储介质上(同类或不同类)

出故障时,可备用副本替换

  • 优点

    方法简单

  • 缺点

    设备费用和系统开销增大

适用于短小且极为重要的文件

# 定时转储

每隔一定时间把文件转储到其他存储介质上,当文件发生故障,就用转储的文件来复原,把有故障的文件恢复到转储时刻文件的状态

UNIX 采用定时转储办法保护文件,可以提高文件的可靠性

# 设置权限

.......

# 块高速缓存

块高速缓存(BLOCK CACHE)又称为文件缓存、磁盘高速缓存、缓冲区高速缓存。是指在内存中为磁盘块设置的一个缓冲区,保存了磁盘中某些块的副本。

当对文件系统进行操作的时候:

  • 检查所有的读请求,看所需块是否在块高速缓冲中
    • 如果在,则可直接进行读操作;
    • 否则,先将数据块读入块高速缓存,再拷贝到所需的地方。

# 其他

不知道文件分配、共享这些考不考。反正 ppt 上没有,倒是有 50 页的实例分析

ppt 是真 time 烂啊

image-20250525143033474

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

CircleCoder 微信支付

微信支付

CircleCoder 支付宝

支付宝

CircleCoder 贝宝

贝宝