计算机中信息存储的基本组织形式;
相关信息结合;
具有文件名。
按名存取:文件名 -> 存储位置
文件名由一串ASCII码或(和)汉字构成;
名字长度
文件名可能大小写敏感;Linux,Unix系统的文件名大小写敏感,Windows系统的不敏感。
指文件内信息的组织方式;
目的:便于程序理解文件内容。
操作系统和应用程序决定了文件的结构。如pdf文件的结构由pd阅读器决定。可执行文件的结构由操作系统决定等。
常用文件结构
文件类型一般由扩展名决定;
文件扩展名也称文件后缀名,是标识文件类型的一种机制,扩展名跟在主文件名后面,由一个分隔符“.”分隔。
文件名:唯一,便于记忆;
文件位置:设备上文件位置的指针;
文件类型:文件的格式;
文件大小:文件当前大小;
保护:读、写、执行等访问控制信息;
时间、日期和用户标识:保护、安全和使用跟踪的数据;
……
文件属性保存在目录中
创建文件
写文件
读文件
在文件内重定位
删除文件
截断文件
打开文件
关闭文件
为什么要有打开文件操作?
需要数据结构
打开文件表:跟踪打开文件;
文件指针:指向最后一次读写的位置,每个进程1个;
打开文件计数器:打开文件次数(调用open次数);
文件存储位置:文件存放在存储设备上的位置信息;
访问权限:每个进程的访问权限;
优点
方便文件共享;
提高文件存取效率。
文件系统以文件为单位进行信息的组织和存储,其主要的功能是文件访问。也就是对文件进行检索、读、写等操作。
文件访问主要和3个方面有关,分别是
文件呈现在用户面前的组织结构;
又称为文件逻辑结构;
逻辑文件决定了文件访问方法;
访问方式:顺序访问;
依次访问数据,不能直接跳转到文件的指定位置;
优点:节省存储空间;
缺点:访问效率差。
访问方式:直接(随机)访问;
直接通过计算得到需要读写记录的位置,直接跳转进行文件读写。
优点:访问效率好;
缺点:浪费存储空间。
是否可以兼顾顺序文件和直接文件的优点呢?也就是采用顺序文件的存储方式和直接文件的检索方式。
基本方法:为顺序文件建立索引表。
索引表中的每一个表项存放一个指针,指向顺序文件中的一个记录,顺序文件中有多少条记录,索引表就有多少个表项。索引表的每个表项等长,便于检索。
文件访问方式,即逻辑文件是影响文件访问效率的因素之一!!!
索引文件广泛用于组织需要频繁检索的文件,如数据库文件等。
存放操控文件所需的各类文件属性信息,如文件名、长度、创建时间、存放位置、访问控制权限……
在文件系统中,文件控制块类似于索引文件中的索引表,必须通过文件控制块来访问文件。
是包含着所有文件信息的节点集合,是根据文件名检索文件的桥梁。
目录由目录项有序构成。一个目录中的目录项组成了目录文件,每个目录项存放了一个文件的各类属性,每个目录项都是等长的。
在有的系统中,目录项=文件控制块。
文件与文件控制块一一对应,文件目录就是文件控制块的有序集合,一个文件控制块就是一个目录项。通常,文件目录也被看作是文件,称为目录文件。
很多操作系统把目录组织成一个文件,这就是目录文件。如下图所示,就是多个目录项组成的目录文件,每个目录项都是等长的。
每个目录项中存放了文件在存储设备的存放地址,目录和文件都驻留在存储设备(如磁盘)
目录是用户和文件之间的一个桥梁。用户根据文件名访问文件,而文件是存储在存储设备上。文件名是一个字符串,存储位置是一个数字,所以要将文件名的字符串转换为具体的数字才能去访问这个文件。
目录负责把文件名转换为文件在存储设备上的位置。这个根据文件名我文件存储位置信息的过程,就是文件检索。
① 根据文件所在的目录打开目录文件;
② 从磁盘读入该目录文件的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
由于物理块大小固定,所以,要想降低读入的物理块数量,有两个途径:
一个降低目录项大小的方法就是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)
文件的所有者/创建者应该有权控制:
效率
命名
分组
所有文件在同一目录中,只有一级目录:根目录;
根目录(/):一个文件系统最顶层的目录。
优点:结构简单;
缺点:
单层目录一般用于早期文件数量较少的操作系统中。
单层目录的改进是为每个用户建立自己的目录,使得每个用户的文件可以分开存放。
优点:
1)不同用户可有相同文件名的文件;
2)比单层目录提高检索效率(文件分布在多个用户目录中)
缺点:
1)无法分组;
2)同一用区分引入了路径户不能有相同文件名的文件。
路径名:
不同目录存在同名文件,为了利用不同路径区分同名文件引入了路径。
路径名 = 目录名+分隔符+文件名
从根目录开始到文件的路径,称为路径名。
特点:
(1)检索高效,子目录增多会使得每个目录下文件数量减少;
(2)可分组,用户可以自由建立子目录;
(3)允许重名,不同子目录可以有同名文件。
为了提高访问的效率,引入了当前目录,也称为工作目录,是指当前运行进程所在的目录。
绝对路径:从根目录开始的路径名;
相对路径:从当前目录开始的路径名,提高检索效率。
如下图,蓝色是从根目录查找first文件,黄色是从相对路径查找first文件。
目录项:占一个物理块。
目录文件 | 目录项 | 平均读入块数 |
---|---|---|
/ | spell | 0 |
spell | (1+7)/2=4 | |
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之间就有环。