文件
文件的属性
- 文件名
- 文件类型
- 文件大小
- 文件位置
- 保护信息,即对文件的读写控制
- 时间
文件的操作
- 创建和删除
- 读和写
- 打开和关闭
复杂的功能往往是由这些基础功能组成的,比如复制:
- 首先创建文件
- 打开源文件和目的文件
- 读取源文件
- 写入目的文件
- 关闭源文件和目的文件
文件的分类
- 无结构文件,例如:txt
- 有结构文件,例如excel,数据库(有结构文件也分为定长和变长的)
文件在磁盘上的存储
磁盘由很多个block组成,每个block的大小相同,用于存放数据。
文件目录
文件控制块
首先让我们来了解一下,什么是文件目录,文件目录的本质其实就是一种特殊的文件。
文件目录中通常包含有其他文件的各种信息,而每一条单独的文件信息叫做文件控制块(PCB),一个文件夹是由很多PCB组成的,如下图所示。
文件目录结构
文件目录结构关注如何利用目录将文件组织管理起来。通常有以下几种方式。
单级目录结构
单级目录,也就是只有一个目录,所有用户的全部文件都放在这一个目录中,如下图所示:
多个用户的文件放在一起,不允许文件重名,命名变得困难,文件管理起来变得非常困难。
两级目录结构
为不同用户建立的单独的目录,每个用户的目录下只有自己的文件。
这种方式,虽然用户有了自己的目录,但是却没有办法将自己的文件进行分类。
多级目录结构
比上述两种方式更加灵活,且可以进行分类;
但不利于文件的分享
无环图目录结构
为了解决遇到的问题,包括
- 单级目录的命名难问题
- 文件分类问题
- 文件共享问题
我们想到了无环图目录结构,这种结构可以用不的文件名指向同一个文件或目录,有利于实现文件的共享。如下图所示:
文件的逻辑结构
逻辑结构,是我们在编程或者操作系统在处理信息时所关注的,我们只需要操作逻辑地址,而不用去关注复杂的物理地址。
那么在逻辑上,文件一般有什么结构呢?
顺序文件
文件内容在逻辑上顺序排放。我们可以用顺序存储和链式存储两种方式来实现,而顺序存储又可分为定长和变长两种方式,其中定长的顺序存储可以实现随机存储。
索引文件
利用索引表,解决了可变长记录查找慢的问题
索引顺序文件
索引顺序文件将上述两种方法相结合,按照关键字,将文件信息分类,每一类进行顺序存储。
文件的物理结构
文件的物理结构,即文件在磁盘中实际的存储形式。
连续分配
连续分配的方式要求文件在磁盘中占有一组连续的块。
优点:
- 支持随机存取
- 由于物理上存放相邻,所以磁盘读取的速度快(磁头移动)
缺点:
- 只能按照连续的块存储,会有磁盘浪费,会产生磁盘碎片
- 可扩展性差,无法为一个文件添加信息,因为无法添加磁盘块
连接访问
上一个块中存储了下一个块的地址,类似于链表。
虽然变得更灵活,但是缺点很明显,不能实现随机存取。
索引分配(i-node)
索引分配允许文件离散地分配在各个磁盘块中,系统会为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块(索引表的功能类似于内存管理中的页表一一建立逻辑页面到物理页之间的映射关系)。索引表存放的磁盘块称为索引块。文件数据存放的磁盘块称为数据块。
直接索引
如果索引表太大,一个索引块装不下,那么可以将多个索引块链接起来存放。
缺点:若文件很大,索引表很长,就需要将很多个索引块链接起来。想要找到ⅰ号索引块,必须先依次读入0~i-1号索引块,这就导致磁盘JO次数过多,查找效率低下。
多层索引
建立多层索引(原理类似于多级页表)。使第一层索引块指向第二层的索引块。还可根据文件大小的要求再建立第三层、第四层索引块。采用κ层索引结构,且顶级索引表未调入内存,则访问个数据块只需要κ+1次读磁盘操作。
缺点:即使是小文件,访问一个数据块依然需要K+1次读磁盘。
混合索引(重点)
混合索引将多种索引方式相结合,解决了查找速度慢和访问速度慢的问题。
混合索引:多种索引分配方式的结合。
例如,一个文件的顶级索引表中,既包含直接地址索引(直接指向数据块),又包含一级间接索引(指向单层索引表)、还包含两级间接索引(指向两层索引表)
优点:对于小文件来说,访问一个数据块所需的读磁盘次数更少
磁盘存储空间管理
磁盘存储空间管理主要是用于记录磁盘有哪些空闲区域
空闲表法
空闲链表法
位示图法
文件的共享与保护
文件的共享
索引节点的共享方式(文件物理地址)
- 各个用户的目录项指向同一个索引结点
- 索引结点中需要有链接计数 count
- 某用户想删除文件时,只是删除该用户的目录项,且count–
- 只有 count==0时才能真正删除文件数据和索引结点,否则会导致指针悬空
符号链的连接方式(快捷方式)(文件目录地址)
- 在一个Link型的文件中记录共享文件的存放路径( Windows快捷方式)
- 操作系统根据路径一层层查找目录,最终找到共享文件
- 即使软链接指向的共享文件已被删除,Link型文件依然存在,只是通过Link型文件中的路径去查找共享文件会失败(找不到对应目录项)
- 由于用软链接的方式访问共享文件时要查询多级目录,会有多次磁盘IO
文件的保护
- 口令保护
- 加密保护
- 访问控制