文件管理
1、文件的逻辑结构
知识总览
- 无结构文件:文件内部数据就是一些列二进制流或字符流组成。又称“流式文件”。如Windows中的 .txt 文件。
- 有结构文件:由一组相似的记录组成,又称“记录式文件”,每条记录有若干个数据项组成。如数据库表文件。一般来说,每条记录有一个数据项可作为关键字。根据各条记录的长度(占用储存空间)是否相等,又可分为定长记录和可变长记录。
根据有结构文件中的各条记录在逻辑上如何组织,可以分为三类:顺序文件、索引文件、索引顺序文件。
顺序文件
顺序文件:文件中的记录一个接一个地顺序排列(逻辑上),记录可以是定长的或可变长的。各个记录在物理上可以顺序存储或链式存储。
根据记录是否按照关键字的顺序排列:
假设:已经知道了文件的起始地址( 也就是第一个记录存放的位置)
思考1:能否快速找到第i个记录对应的地址?(即能否实现随机存取)
思考2:能否快速找到某个关键字对应的记录存放的位置?
对于可变长记录文件,要找到第i个记录,必须先顺序第查找前i-1个记录,但是很多应用场景中又必须使用可变长记录。如何解决这个问题?
索引文件
思考索引文件的缺点:每个记录对应一个索引表项,因此索引表可能会很大。比如:文件的每个记录平均只占8B,而每个索引表项占32个字节,那么索引表都要比文件内容本身大4倍,这样对存储空间的利用率就太低了。
索引顺序文件
2、文件目录
知识总览
文件控制块
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2Iu6gOUw-1671325514391)(null)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TahjQqel-1671325514413)(null)]
单级目录结构
两级目录结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lugkUUoe-1671325514458)(null)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RXw1FoG7-1671325514424)(null)]
树形目录结构可以很方便地对文件进行分类,层次结构清晰,也能够更有效地进行文件的管理和保护。但是,树形结构不便于实现文件的共享。为此,提出了“无环图目录结构”。
无环图目录结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BzzU21FG-1671325514447)(null)]
索引结点
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iKvUisAs-1671325514437)(null)]
3、文件的物理管理
知识总览
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ILJSk3uM-1671327120512)(C:\Users\王东豪\AppData\Roaming\Typora\typora-user-images\image-20221212141848930.png)]
文件块、磁盘块
连续分配
缺点:
优点:支持顺序访问和直接访问(即随机访问);连续分配的文件在顺序访问时速度最快
缺点:不方便文件拓展;存储空间利用率低,会产生磁盘碎片
链接分配
链接分配采取离散分配的方式,可以为文件分配离散的磁盘块。分为隐式链接和显式链接两种。
隐式链接
隐式链接–除文件的最后 一个盘块之外,每个盘块中都存有指向下一个盘块的指针。文件目录包括文件第一块的指针和最后一块的指针。
优点:很方便文件拓展,不会有碎片问题,外存利用率高。
缺点:只支持顺序访问,不支持随机访问,查找效率低,指向下一个盘块的指针也需要耗费少量的存储空间。
显示链接
显式链接- --把用于链接文件各物理块的指针显式地存放在一张表中,即文件分配表(FAT, FileAllocation Table)。一个磁盘只会建立一张文件分配表。开机时文件分配表放入内存,并常驻内存。
优点:很方便文件拓展,不会有碎片问题,外存利用率高,并且支持随机访问。相比于隐式链接来说,地址转换时不需要访问磁盘,因此文件的访问效率更高。
缺点:文件分配表的需要占用一定的存储空间。
考试题目中遇到未指明隐式/显式的“链接分配”,默认指的是隐式链接的链接分配
索引分配
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RhMPtUEc-1671327122406)(null)]
若每个磁盘块1KB,一个索引表项4B,则一个磁盘块只能存放256个引项。如果一个文件的大小超过了256块,那么一个磁盘块是装不下文件的整张索引表的,如何解决这个问题?
- 链接方案
- 多层索引
- 混合索引
链接方案
多层索引
采用K层索引结构,且顶级索引表未调入内存,则访问一个数据块只需要K+1次读磁盘操作。
假设1个文件只有1kb大小,如果在多层索引的系统中,就需要3次访问磁盘,如何解决这个问题?
混合索引
索引分配总结:
①链接方案:如果索引表太大,一个索引块装不下,那么可以将多个索引块链接起来存放。缺点:若文件很大,索引表很长,就需要将很多个索引块链接起来。想要找到i号索引块,必须先依次读入0~i-1号索引块,这就导致磁盘I/O次数过多,查找效率低下。
②多层索引:建立多层索引(原理类似于多级页表)。使第一层索引块指向第二层的索引块。还可根据文件大小的要求再建立第三层、第四层索引块。采用K层索引结构,且顶级索引表未调入内存,则访问一个数据块只需要K+ 1次读磁盘操作。缺点:即使是小文件,访问一个数据块依然需要K+1次读磁盘。
③混合索引:多种索引分配方式的结合。例如,一个文件的顶级索引表中,既包含直接地址索引(直接指向数据块),又包含一-级间接索引(指向单层索引表)、还包含两级间接索引(指向两层索引表)。优点:对于小文件来说,访问一个数据块所需的读磁盘次数更少。
超级超级超级重要考点:①要会根据多层索引、混合索引的结构计算出文件的最大长度(Key: 各级索引表最大不能超过一一个块) ;②要能自己分析访问某个数据块所需要的读磁盘次数(Key: FCB中 会存有指向顶级索引块的指针,因此可以根据FCB读入顶级索引块。每次读入下一级的索引块都需要一次读磁盘操作。另外,要注意题目条件——顶级索引块是否已调入内存)
综合总结
4、文件储存空间管理
知识总览
储存空间的划分与初始化
空闲表法
空闲链表法
位示图法
成组链接法
5、文件的基本操作
知识总览
创造文件
删除文件
打开文件
关闭文件
读文件
写文件
6、文件共享
知识总览
口令保护
加密保护
访问控制
8、文件系统层次结构
9、磁盘结构
磁盘、磁道、扇区
如何在磁盘中读/写数据?
盘面、柱面
磁盘的物理地址
磁盘的分类
知识汇总
10、磁盘调度算法
知识总览
磁盘调度算法会影响一次读/写磁盘所需要的时间
一次磁盘读/写操作需要的时间
延迟时间和传输时间都与磁盘转速相关,且为线性相关。而转速是硬件的固有属性,因此操作系统也无法优化延迟时间和传输时间。但是操作系统的磁盘调度算法会直接影响寻道时间
先来先服务算法(FCFS)
最短寻找时间算法(SSTF)
扫描算法(SCAN)
LOOK调度算法
循环扫描算法(C-SCAN)
C-LOOK调度算法
11、减少磁盘延迟时间的方法
前景回顾
交替编号
![image-20221215162004221](https://raw.githubusercontent.com/Wangsenyu-hello/PIC/master/202212180928744.png)
若采用交替编号的策略,即让逻辑上相邻的扇区在物理上有一定的间隔,可以使读取连续的逻辑扇区所需要的延迟时间更小。
磁盘地址结构的设计
思考:为什么磁盘的物理地址是(柱面号,盘面号,扇区号),而不是(盘面号,柱面号,扇区号)?
答:读取地址连续的磁盘块时,采用(柱面号,盘面号,扇区号)的地址结构可以减少磁头移动消耗的时间
错位命名法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZHBlrvTC-1671328194535)(null)]
由于采用错位命名法,因此读取完磁盘块(000, 00, 111)之后,还有一段时 间处理,当(000, 01, 000)第一次划过1号盘面的磁头下方时,就可以直接读取数据。从而减少了延迟时间。
知识总结
12、磁盘的管理
知识总览
磁盘初始化
磁盘出厂前只完成了磁道的划分
![image-20221216085137104](https://raw.githubusercontent.com/Wangsenyu-hello/PIC/master/202212180929871.png)
磁盘初始化:
Step 1:进行低级格式化(物理格式化),将磁盘的各个磁道划分为扇区。一个扇区通常可分为头、数据区域( 如512B大小)、尾三个部分组成。管理扇区所需要的各种数据结构一般存放在头、尾两个部分,包括扇区校验码( 如奇偶校验、CRC循环冗余校验码等,校验码用于校验扇区中的数据是否发生错误)。
![image-20221216085253219](https://raw.githubusercontent.com/Wangsenyu-hello/PIC/master/202212180929956.png)
Step2:将磁盘分区,每个分区由若干柱面组成(即分为我们熟悉的C盘、D盘、E盘)。
![image-20221216085538023](https://raw.githubusercontent.com/Wangsenyu-hello/PIC/master/202212180930724.png)
Step3:进行逻辑格式化,创建文件系统。包括创建文件系统的根目录、初始化存储空间管理所用的数据结构(如位示图、空闲分区表)。
引导快
计算机开机时需要进行一系列初始化的工作,这些初始化工作是通过执行初始化程序( 自举程序)完成的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PHMfwVWK-1671328276999)(null)]
初始化程序程序(自举程序)放在ROM中存在什么问题?
万一需要更新自举程序,将会很不方便,因为ROM中的数据无法更改。如何解决呢?
自举程序:复杂度高,不可能保证永远不会更新;
自举装入程序:很小,不复杂,几乎不用更新。
当自举程序需要更新时,只需要在磁盘固定的引导快中装入新的自举程序即可。