0x16 文件系统接口

一、文件

文件概念

计算机中信息存储的基本组织形式;
相关信息结合;
具有文件名。

文件名

按名存取:文件名 -> 存储位置
文件名由一串ASCII码或(和)汉字构成;

名字长度

  • 8.3规则:文件名8个字符,类型3个字符,之间由“.”分割
  • 长文件名:可以最多输入255多个字符作为文件名

文件名可能大小写敏感;Linux,Unix系统的文件名大小写敏感,Windows系统的不敏感。

文件结构

指文件内信息的组织方式;
目的:便于程序理解文件内容。

操作系统应用程序决定了文件的结构。如pdf文件的结构由pd阅读器决定。可执行文件的结构由操作系统决定等。

常用文件结构

  1. 无结构:文字流、字节流等;
  2. 简单记录结构:线性、固定长度、可变长度等;
  3. 复杂结构:格式化文档、多媒体文件等。

文件类型—扩展名

文件类型一般由扩展名决定;
文件扩展名也称文件后缀名,是标识文件类型的一种机制,扩展名跟在主文件名后面,由一个分隔符“.”分隔。
在这里插入图片描述

文件属性

文件名:唯一,便于记忆;
文件位置:设备上文件位置的指针;
文件类型:文件的格式;
文件大小:文件当前大小;
保护:读、写、执行等访问控制信息;
时间、日期和用户标识:保护、安全和使用跟踪的数据;
……
文件属性保存在目录中

文件操作

创建文件
写文件
读文件
在文件内重定位
删除文件
截断文件
打开文件
关闭文件

为什么要有打开文件操作?

  • 需要数据结构
    打开文件表:跟踪打开文件;
    文件指针:指向最后一次读写的位置,每个进程1个;
    打开文件计数器:打开文件次数(调用open次数);
    文件存储位置:文件存放在存储设备上的位置信息;
    访问权限:每个进程的访问权限;

  • 优点
    方便文件共享;
    提高文件存取效率。

二、逻辑文件及其访问方法

文件访问

文件系统以文件为单位进行信息的组织和存储,其主要的功能是文件访问。也就是对文件进行检索、读、写等操作。
文件访问主要和3个方面有关,分别是

  1. 逻辑文件
    文件内容组织方式;
    面向用户;
  2. 目录文件
    文件组织方式;
    文件属性;
  3. 物理文件
    文件存储方式;面向系统。

逻辑文件

文件呈现在用户面前的组织结构;
又称为文件逻辑结构;
逻辑文件决定了文件访问方法;

在这里插入图片描述

逻辑文件的访问方式

  1. 顺序访问
  • 最简单的访问方式;
  • 文件信息按照存放顺序,一个记录一个记录地依次访问
  • 顺序文件
  • 典型存储设备:磁带
  1. 直接(随机)访问
  • 可以直接定位到文件的某条记录进行访问
  • 直接文件
  • 典型设备:磁盘

顺序文件

访问方式:顺序访问;
依次访问数据,不能直接跳转到文件的指定位置;
在这里插入图片描述
优点:节省存储空间;
缺点:访问效率差。
在这里插入图片描述

直接(随机)文件

访问方式:直接(随机)访问;
直接通过计算得到需要读写记录的位置,直接跳转进行文件读写。
在这里插入图片描述
优点:访问效率好;
缺点:浪费存储空间。
在这里插入图片描述
是否可以兼顾顺序文件和直接文件的优点呢?也就是采用顺序文件的存储方式和直接文件的检索方式。

索引文件

基本方法:为顺序文件建立索引表。
索引表中的每一个表项存放一个指针,指向顺序文件中的一个记录,顺序文件中有多少条记录,索引表就有多少个表项。索引表的每个表项等长,便于检索。
在这里插入图片描述
在这里插入图片描述

三种逻辑文件性能对比

文件访问方式,即逻辑文件是影响文件访问效率的因素之一!!!
在这里插入图片描述
索引文件广泛用于组织需要频繁检索的文件,如数据库文件等。

另外一种索引文件

根据某个检索项作索引;
在这里插入图片描述

三、文件目录

文件控制块(FCB)

存放操控文件所需的各类文件属性信息,如文件名、长度、创建时间、存放位置、访问控制权限……

在文件系统中,文件控制块类似于索引文件中的索引表,必须通过文件控制块来访问文件。
在这里插入图片描述

目录项和目录

目录

是包含着所有文件信息的节点集合,是根据文件名检索文件的桥梁。

目录项

目录由目录项有序构成。一个目录中的目录项组成了目录文件,每个目录项存放了一个文件的各类属性,每个目录项都是等长的。

在有的系统中,目录项=文件控制块。
文件与文件控制块一一对应,文件目录就是文件控制块的有序集合,一个文件控制块就是一个目录项。通常,文件目录也被看作是文件,称为目录文件

很多操作系统把目录组织成一个文件,这就是目录文件。如下图所示,就是多个目录项组成的目录文件,每个目录项都是等长的。
在这里插入图片描述

目录和文件

每个目录项中存放了文件在存储设备的存放地址,目录和文件都驻留在存储设备(如磁盘)
在这里插入图片描述

目录相关操作

在这里插入图片描述
创建文件操作仅仅是为这个文件创建了一个目录项。

文件检索

目录是用户和文件之间的一个桥梁。用户根据文件名访问文件,而文件是存储在存储设备上。文件名是一个字符串,存储位置是一个数字,所以要将文件名的字符串转换为具体的数字才能去访问这个文件。
目录负责把文件名转换为文件在存储设备上的位置。这个根据文件名我文件存储位置信息的过程,就是文件检索。

具体步骤

① 根据文件所在的目录打开目录文件;
② 从磁盘读入该目录文件的1个(物理)块,该块包含若干个目录项;
③ 根据文件名遍历内存中的该块,如找到则结束;
④ 判断该目录文件是否还有物理块没有读入,如果是转2;否则。结束。表示该目录中没有此文件名的文件。

根据文件名找一个文件的目录项,就是文件检索的主要工作。找到目录项后,就可以根据该目录项得到文件的存储位置并进行读写。

如下图所示,有一个有n个目录项的文件,平均遍历目录项数:(1+n)/2
最佳情况是在目录项0就是所检索文件的目录项;最差情况是目录项n-1。这还不包括文件查不到的情况。
在这里插入图片描述

目录性能

(物理)块
物理块是内存和存储设备数据交换基本单位,一个物理块一般为4KB、8KB和16KB等,每次读写文件都是以块为单位,至少1块。

例如:
当前物理块大小是4KB,则一个读入文件的1个字节的操作也要从存储设备读入4KB。

例子:
目录项大小 = ds bytes
最多文件数 = n         物理块大小 = b
那么:
目录文件大小 = ds*n bytes
目录文件需要的物理块数目 = ds*n/b
检索一个文件需要平均读入的块数 = (ds*n/b+1)/2

由于物理块大小固定,所以,要想降低读入的物理块数量,有两个途径:

  1. 降低目录项大小ds
  2. 降低文件数n

一个降低目录项大小的方法就是Unix采用的i Node。
一个完整的目录项就是文件控制块,里面包含了大量的文件属性。
如果不读入无关的信息,降低目录项的大小,就可以提升文件访问的效率。

通过分析发现

  • 文件检索过程中需要用到的内容主要是文件名。
  • Unix为每个文件控制块建立一个索引项,内容为文件名和指向文件控制块的指针。类似于索引文件,称为i node索引结点。
    在这里插入图片描述

例子:
物理块大小:4KB         目录中文件数:1万个

FCB(目录项)大小:2KB
则:
目录文件大小:10000*2KB = 20000KB
目录文件需要的物理块数量:20000KB/4KB = 5000块
检索文件平均需要访问的物理块数:(5000+1)/2 = 2500.5块

i node:64B
那么:
目录文件大小:10000*64 = 625KB
目录文件需要的物理块数量:625KB/4KB+1 = 157块
检索文件平均需要访问的物理块数:(157+1)/2 = 79块(仅仅是2500.5的1/32)

文件保护

文件的所有者/创建者应该有权控制:

  • 能做什么
    指文件存取类型,有读、写、执行、添加、删除和列表清单等基本操作;
    Unix等系统把用户分为三个层面:
    文件所有者、同组用户、公共用户。
    访问模式:分为读、写、执行,用R/W/X来表示。为了方便,用三个位来代表R/W/X,用 r=4,w=2,x=1 来表示权限。
    在这里插入图片描述
    对特定的文件或目录,定义适当的访问权限。
    如Linux的命令chmod 761 game,就是赋予game的所有者R/W/X权限,同组用户R/W权限,其他公共用户X权限。
    在这里插入图片描述
    在这里插入图片描述
  • 由谁来做

四、文件结构

目录结构的设计目标

效率

  • 快速定位文件位置
  • 提高文件访问效率

命名

  • 方便用户使用,允许重名
  • 同名的不同文件
  • 不同名的相同文件

分组

  • 文件分组(子目录)
  • 兼顾效率和方便性

单层目录

所有文件在同一目录中,只有一级目录:根目录;
根目录(/):一个文件系统最顶层的目录。
在这里插入图片描述
优点:结构简单;
缺点

  • 检索效率差(目录下文件过多)
  • 不能有同名文件,一个文件只能有一个名称
  • 不能分组

单层目录一般用于早期文件数量较少的操作系统中。

双层目录

单层目录的改进是为每个用户建立自己的目录,使得每个用户的文件可以分开存放。
优点
1)不同用户可有相同文件名的文件;
2)比单层目录提高检索效率(文件分布在多个用户目录中)
缺点
1)无法分组;
2)同一用区分引入了路径户不能有相同文件名的文件。
在这里插入图片描述
路径名
不同目录存在同名文件,为了利用不同路径区分同名文件引入了路径。
路径名 = 目录名+分隔符+文件名
从根目录开始到文件的路径,称为路径名。

树形目录

在这里插入图片描述
特点
(1)检索高效,子目录增多会使得每个目录下文件数量减少;
(2)可分组,用户可以自由建立子目录;
(3)允许重名,不同子目录可以有同名文件。

为了提高访问的效率,引入了当前目录,也称为工作目录,是指当前运行进程所在的目录。

绝对路径:从根目录开始的路径名;
相对路径:从当前目录开始的路径名,提高检索效率。

性能对比(查找文件first为例)

如下图,蓝色是从根目录查找first文件,黄色是从相对路径查找first文件。
在这里插入图片描述
目录项:占一个物理块。

目录文件 目录项 平均读入块数
/ spell 0
spell mail (1+7)/2=4
mail prt (1+4)/2=2.5
prt first (1+2)/2=1.5

绝对路径:/spell/mail/prt/first
根目录一般在内存;
一共需要读入4+2.5+1.5=8个物理块。

相对路径:./prt/first
当前目录在内存;
读入1.5个物理块。

图形目录

所谓文件共享是指不同目录中的文件指向同一个物理文件,也就是它们内容相同。

很明显,树形目录不能实现文件共享,图形目录可以。图形目录有两种,无环图目录和通用图目录(有环图)
无环图一个特点是有向边无环。
在这里插入图片描述

文件共享

两种共享文件方式:硬链接和符号链接(软链接)

硬链接

硬链接是指一个物理文件可以有几个文件名,但是只有一个FCB。每个文件名有自己的目录项,也就是i node,但共享一个FCB。

创建一个文件A的时候,系统为其创建了一个i node和FCB,以及分配存储空间来存储文件内容。当建立文件B和A共享同一个文件时,系统仅仅为B建立一个i node,并让它指向A的FCB。
为知道每个FCB中有多少i node在使用,需要在FCB中加入计数器,记录当前链接到FCB的i node数量。

删除文件的过程正好相反,删除文件的i node,并把计数器减1,最后删除A的时候,需要把i node,FCB,物理文件一起删除。
在这里插入图片描述

符号链接(软链接)

Windows,Linux使用符号链接,符号链接文件是一种特殊的文件,包含另外一个共享文件的路径名。
在这里插入图片描述

通用图目录

图中有环就会使遍历目录的操作陷入陷阱导致无穷循环,下图book和avi之间就有环。
在这里插入图片描述

如何保证无环

  • 仅允许指向文件的链接,不允许指向子目录的链接
  • 垃圾回收
  • 每当加入新链接时,使用环路检测算法判断是否正确
  • 优化遍历目录算法,避免对环的重复搜索

猜你喜欢

转载自blog.csdn.net/ITmincherry/article/details/106739931