王道操作系统笔记第四章-文件管理(非常完整!包学包会!融入笔者自己的思考!)
4.1.1、初识文件管理
4.1.2、文件的逻辑结构
但可变长记录才是生活中最常见的。

记录到底是定长的还是可变长的,记录是否按照关键字有序排列,记录在物理上到底是顺序存储还是链式存储都会影响顺序文件能不能实现某一些功能。

每个索引项记录了分组的名字以及存放的位置。索引表其实是一个定长记录的串结构的顺序文件。每一个分组都是一个顺序文件。
4.1.3、文件目录
树形结构不便于实现文件的共享
320/16=20
4.1.4、文件的物理结构(上)
能够随机访问是连续分配方式的最大的优点
顺序读/写速度快是第二个优点。
i=0的话就不用查FAT了,因为起始块就是i=0的块。
读FAT的时间远小于I/O时间,所以忽略不计。

4.1.4、文件的物理结构(下)
4个字节的空间包含32个二进制位。
我有一个问题,如果索引表存放的索引项超过256个即1KB怎么办???


一个磁盘块就只能存256个索引项,那么在哪里存下一个索引表的指针呢???

而如果一个文件很小只有1KB,采用多层索引的方式反而要读好几次磁盘,这不合适。
4.1.5、逻辑结构VS物理结构
索引文件采用连续、链接、索引存储都可以,以上以索引分配为例。
4.1.6、文件存储空间管理
疑问:系统如何知道某个空闲盘块前后有空闲盘块???
超级块中记录着下一组空闲盘块数是多少,还需要记录这些空闲盘块号分别是多少。
每个分组的第一个磁盘块还需要记录下一组空闲盘块的信息。
倒数第二个分组的第一个盘块要设置成-1,代表下一个分组已经是最后一个分组了。
最后一组的盘块数比其他组的要少一块。
就上图来看,每个块能存101个数据,第一个数据是数量,剩下的数据要么是空闲的要么是链接。
检查下一组的空闲盘块数是否满足当前需要。1<100,所以把下一组的最后一个盘块分出去并求改超级块的状态。
把300号块的信息放到超级块中是避免空闲块的链接信息断掉。
如果要分配更多磁盘块,就要一组一组分别分配,要注意每分配完一组都要把下一组空闲盘块的数据复制到超级块里。
把新回收的这一块的链接放到超级块中,并且修改超级块中的下一组空闲盘块数修改成100
这是第一种情况:分组没满时。
4.1.7、文件的基本操作
疑问:如果写回的文件数据量超过了文件原有磁盘块的大小,还要怎么写回呢?
4.1.8、文件共享
如果User1和User2都不再使用索引结点1,那该结点会被删掉。软链接会失效。
4.1.9、文件保护
如果有人入侵系统得知了口令了的话,这种方式就不安全了。
使用错误的密码解密,得到的结果和原始数据是不一样的,也就没有任何意义了。
不同系统对权限的划分不一样。
4.2.1、文件系统的层次结构
4.2.2、文件系统的全局结构(布局)
一步一步认识文件系统在外存是如何建立的。
一个磁盘刚生产出来的时候里面是没有划分扇区的。
4.2.3、虚拟文件系统
不同存储介质可能会应用不同的文件系统,定义的接口可能就不相同,无法统一管理。
疑问:但是这样和没有虚拟文件系统又有什么区别呢?
在虚拟文件系统中,每当我们open打开一个文件后,虚拟文件系统就会给这个文件在主存中新建一个vnode(v)结点,这里面包含了一些文件的信息,那么无论我读的文件来自哪种文件系统,都会在打开后将数据信息复制到vnode结点中,这样的话,虚拟文件系统就可以用一个统一的数据结构vnode来标识任何一个文件的信息。
剩余章节:王道操作系统笔记(非常完整!包学包会!融入笔者自己的思考!)