应网友催稿,主包最近也是很多事很疲惫,所以笔记以最简洁形式来了,可能不适合初学者抠细节,但是复习框架是够的
一、文件系统基础概念
我直接思维导图(放大来看)
【文件基础概念术语】
- 定义了解一下:【文件】就是一组有意义的数据/信息的【集合】
- 一般【文件】是存储在【磁盘】的(因为是要长期保存的数据)
- 文件的【属性(也叫"访问类型")】(只记重要的常用的):
- 文件名:"四级学习资料.pdf" 的这个 "四级学习资料" 就是给用户辨别的文件名
- 注:同一目录下不可有同名文件(比如不能有2个"test.txt")
- 类型:.mp3、.txt、.java、.pdf......这些文件类型
- 位置:特指用户看的懂的文件路径,比如"D:/data"
- 而非物理的磁盘实际地址
- 大小:就是这个文件的实际大小
- 保护:就是【安全】那限制"组"、"拥有者"、"其他用户"的"写、改、读..."等权限,经常做开发的应该会接触
;
;
其中思维导图里的【文件结构】只是简单提一下其【逻辑结构】,下面第二大点会重点讲
】
二、文件结构
1、文件的【逻辑结构】
直接思维导图,记得放大看
(1)无结构文件
- 又称【流式文件】,就是一串【字符流】,长度单位是【字节】,没有结构所以也没甚好探讨的
(2)有结构文件
- 又称【记录式文件】
- 由多个【记录】构成
- 记录里由【数据项】构成
- 每个记录里可以【定一个数据项】作为【关键字】
- 而【记录】的类型又分为**【不定长 (可变长) 记录】** 和**【定长记录】**
【定长记录】:每个记录的【数据线个数一样】、【对应的数据项大小一样】
- 重点:**【定长记录】**可以【随机存储(随机查找)】!!!
- 就像访问数组第3个元素直接访问 a[2]!!只要知道了第1个记录的起始地址 + 2个记录的大小就找到 a[2]了
【不定长 (可变长) 记录】:每个记录的【数据线个数不一样】或者【对应数据项的大小不一样】
重点:【不定长 (可变长) 记录】 不可以【随机存储(随机查找)】!!!
- 你都不知道每个记录的大小规律,怎么计算第i个元素在哪
;
;
【"有结构(记录式文件)文件"】的【文件类型】
##### 1、《顺序文件》: * 顾名思义,就是文件一个一个按顺序排列 * 其实就是数据结构第一章说得【逻辑结构之:线性结构】,那么回忆一下可知,线性结构有:线性表、串、数组、队列、栈 * 而其中【逻辑结构:线性表】还对应了【物理结构:顺序存储 、链式存储】,所以按理来说,顺序文件同样也包含了"顺序存储"+"链式存储" * 但是考试不考【顺序文件:链式存储】,所以考试中**【顺序文件】=【逻辑、物理都是顺序存储】**!!!!! * **然后记住【顺序文件】对应的【可变长记录】、【定长记录】的 "能否随机存取"的区别!!!!** * **很明显【不定长(可变长)记录】是不适合【随机存取】的,因为各个记录大小不一样,没法根据a\[0\]的地址算出第i个记录在哪** * **【定长记录】** 里还有**【串结构】、【顺序结构】**的 **"能否按关键字排序"的区别**!!!!
##### 2、《索引文件》: * 我直接思维导图解释,要记住的重点就是: * 添加【索引表】,每个【索引记录】是【变长记录】的长度、地址位置 * 【索引表】必须是顺序、记录是定长的;【变长记录】是乱序的、记录是不定长的 * 可以实现【快速查找 "不定长记录"】,但却额外增加了【索引表空间】
##### 3、《索引顺序文件》 * 我直接思维导图解释,要记住的重点就是: * 解决【索引表】空间大问题:把 "多个变长记录" 归为【一组】,索引表每个记录指向的是【一组里的 "第1个记录" 的信息】 * 【索引表】必须是顺序、记录是定长的,但不需按关键字排序; * 【变长记录组与组】之间是【乱序的】;【一组里的记录】是【按顺序的】 * 不仅减小了【索引表空间】、还提高了【查找效率】
- 这还多一个【多级索引表】,效率更高,原理就是"不断套娃",【高级索引表】记录【低级索引表】的表项位置、【最低级索引表】才记录【各组变长记录】
2、文件目录
【目录文件】概念(简称"目录")
当我们双击"照片"后,操作系统会在这个目录表中找到【关键字 "照片"】对应的【目录项(也就是记录)】,然后从外存中将"照片"目录的信息读入内存,于是,"照片"目录中的内容就可以显示出来了。
【文件控制块:FCB】
- 那么一个【目录文件】里记录了很多条【目录项】,这每一条【目录项】也叫【文件目录】也叫【文件控制块:FCB】
- (进程有【PCB】、文件有【FCB】)
- 再次强调FCB的多个名字:【目录项】、【文件目录】、【文件控制块】
- 他记录的就是一个文件的各种属性,其中最重要的是【文件名】、【文件物理存放地址】
- FCB会涉及的一些操作(不用记,大家用电脑都有这些常识)
;
;
【目录结构分类】
记一下这个思维导图这几个关键字就够了
- 非要研究是啥的话就看这几个图:
【单级目录结构】
【双级目录结构】
【多级目录结构(树形目录)】:就是我们现在的文件夹形式
- 拓展:其中,做多开发的朋友都知道Window和Linux有不同的【根目录】表达符号
- 而【当前目录】都一样是【.】
- 那么【绝对路径 】会导致访问很多次磁盘,效率较低
而**【相对路径】** 则是在已经在内存中打开的【当前目录文件】下接着往下找,会比绝对路径少访问很多次磁盘,效率较高(做开发的都有经验)
【无环图目录结构】
'
【索引节点】(对FCB的改进)
思维导图
- 因为在目录表查找文件时其实只用到了【文件名】,所以FCB太多冗余属性信息了
- 因此【索引节点】的改进结构如下:
- 【索引表】:只记录【文件名】+【该文件索引节点的位置指针】
- 【索引节点】:除了【文件名】之外的文件其他属性信息
- 另外,放在外存的索引节点叫【磁盘索引节点】;放在内存后的索引节点叫【内存索引节点】,放在内存后因为文件会被改动,所以会额外添加一些内容(比如:几个进程在访问这个节点?这个节点被改写了吗?.....等,了解即可)
'
【注意!!!】
【目录文件】和【文件目录】的区别:
- 这几个知识点可能很多人会混淆,下图直观解释了
- 【文件目录】和【目录文件】
- 【目录项】和【记录】
抱歉这里应该一个文件目录应该对应的是【文件】而不是【文件夹】的,我截图时忽略这点,急了。。。
3、文件的【物理结构】
前提提示(不是知识点,只是方便加深计组的知识点):
这一块概念有点像《计算机组成原理------第3章磁盘和固态硬盘》、《计算机组成原理------第3章Cache和主存映射》的内容,像复习的可以去看看(可看可不看,非必要):
《磁盘和固态硬盘》https://blog.csdn.net/m0_73991249/article/details/149423765
;
《Cache和主存映射》https://blog.csdn.net/m0_73991249/article/details/149573251?spm=1001.2014.3001.5501
1、【文件块】和【磁盘块】理解
四句话:
- 1、内存和外存(磁盘)以【块】传输
- (【块】就是把多个存储单元分为一组,块之间存储单元都一样)
- 2、用户操作的是【逻辑块号 + 块内地址】
- (这里不理解需要补习计组内容,块内地址其实就是一块里的存储单元的相对地址)
- 3、实际磁盘里用的是【物理块号 + 块内地址】
- 4、用户的【逻辑块号 + 块内地址】对应 映射 磁盘的【物理块号 + 块内地址】
2、三种分配方式(映射方式)
【思维导图】
【①连续分配】
- 就是要求【每个文件】在磁盘占有【一组连续块】
- 重点 :
- 文件【目录项】记录:该文件【第一个磁盘块号 】+【所占用块数】
- 映射关系:【物理块号 = 起始块号 + 逻辑块号 】
- (比如图中给出【逻辑块号0】,那么对应的【物理块号**= 起始块4 + 逻辑块0 =** 4】)
- 优点:
- 【可以随机访问(因为连续块方便计算块位置)】
- 【方便磁盘访问(磁盘、磁头原理)】
- 缺点:
- 【为了保持文件整体有序,增、删块要整体迁移,不方便】
- 【不灵活,只要连续空间,那就会产生很多外部碎片】
【②链式分配】
- 就是文件在【物理上】是【离散分散存放的】
【隐式链接】
- 重点 :
- 文件【目录项】:记录文件的**【起始块号】+【结束块号】**
- (因为每个盘块都有指向下一个盘块的指针,所以中间信息不用记)
- 缺点:(就是链表的特点)
- 不能随机存取,只能顺序访问!!!
- 其中一个盘块有问题,整个文件完蛋
- 指针也占空间
- 优点:插入删除方便 (链表特点,改链尾节点的指针指向即可)
【显式链接】
- 重点:
- 就是在隐式链接基础上加了个【FAT(File Allocation Table)文件分配表】
- 文件【目录】项:只有**【起始块号】** !!!!
- 然后每个盘块的下一块的指针由【FAT表】来记录!!!!
- 注意:【FAT表】之有一张,一开机就读入【内存】,所以显式链接查找文件时无需访问磁盘!!!!
- 优点:
- 可以随机存取!!!(FAT表帮忙直接找到)
- 比【隐式】快得多(因为不访问磁盘)
【③索引分配】
未完待续。。。。。
4、【逻辑结构】和【物理结构】区分
未完待续。。。。。
三、文件的操作
未完待续。。。。。

例题
未完待续。。。。。