文件系统


基本概念

为什么不定义为指针,是因为这是要写入文件的数据,如果你在程序运行的时候构建了这个链表,计算出了当前next的地址(实际上是主存的地址)然后写入辅存,可能下次把这些数据调入主存的时候就不在这个地址了。

文件管理的要求

用户视角:使用逻辑文件,即内容是什么

操作系统视角:组织和管理物理文件,即怎么存

按逻辑结构分:有结构文件(由记录组成,分为定长记录、可变长记录)、无结构文件(由二进制流或字符流组成,无明显的逻辑结构)

按文件中物理结构分:顺序文件、链接文件、索引文件

目录

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

内容

  1. 基本信息:文件名

  2. 文件类型:

    • 有/无结构(记录文件,流式文件);

    • 内容(二进制,文本)

    • 用途(源代码,目标代码,可执行文件,数据)

    • 属性attribute(如系统,隐含等)

    • 文件组织(如顺序,索引等)

  3. 地址信息:存放位置、文件长度

  4. 访问控制信息:文件所有者、访问权限

  5. 使用信息:创建时间、最后一次读/写访问的时间和用户

分类

单级目录

两级目录

多级目录

实现方法

文件控制块

基本信息

  • 文件名:字符串,通常在不同系统中允许不同的最大长度,可修改
  • 物理位置;
  • 文件逻辑结构:有/无结构(记录文件,流式文件)
  • 文件物理结构:(如顺序,索引等)

访问控制信息

  • 文件所有者(属主):通常是创建文件的用户,或者改变已有文件的属主;
  • 访问权限(控制各用户可使用的访问方式):如读、写、执行、删除等;

使用信息

创建时间,上一次修改时间,当前使用信息等。

文件物理结构

顺序/连续结构

容易出现磁盘碎片,适用于变化不大的文件

串联/链接文件

随机存取效率太低,如果访问文件的最后的内容,实际上是要访问整个文件。

可靠性问题,如指针出错;

链接指针占用一定的空间

索引结构

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

索引表可放在文件目录中、文件的开头等

索引文件在存储区中占两个区:索引区和数据区。索引区存放索引表,数据区存放数据文件本身。

访问索引文件需要两步操作:

  1. 读取文件索引区,由逻辑块号查得物理块号
  2. 访问物理块号而获得所需信息

优点:

  • 保持了链接结构的优点,又避免了其缺点
  • 即能顺序存取,又能随机存取
  • 满足了文件动态增长、插入删除的要求
  • 能充分利用外存空间

缺点:

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

索引表的组织

  • 链接模式:一个盘块一个索引表,多个索引表链接起来
  • 多级索引(间接索引):将一个大文件的所有索引表(二级索引)的地址放在另一个索引表(一级索引)中
  • 综合模式:直接索引方式与间接索引方式结合

目录的实现

目录项的内容

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

不管是何种方法,给定一个文件名,即可返回相应的文件信息

长文件名问题

方法1:在目录项中,将文件名的长度固定为255个字符。缺点:浪费空间,很少文件用很长的名字;

方法2:每个目录项的长度可变,分为三部分:目录项长度、文件的属性信息(此两项长度固定)、文件名(长度可变)。缺点:文件被删除后,该目录项所占用的空间不太好回收利用;

方法3:目录项本身的长度固定,把长度可变的文件名统一放在目录文件的末尾。

目录的搜索方法

顺序查寻法

Hash方法/散列法

便于共享的目录组织

硬链接:多个文件名指向同一inode,一个文件拥有多个有效路径名

软连接/符号链接:一个文件实际上是一个文本文件,包含了另一个文件的位置信息(路径名)

保护文件的方法

建立副本

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

规定文件的权限

文件系统的性能问题

块高速缓存


Author: CuberSugar
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source CuberSugar !
  TOC