问题导入
在计算机中不是所有的文件都是被打开的,只有我们要用的文件的被打开,大部分文件(当前不需要访问的文件),都在磁盘中保存着。问题是没有被打开的文件是否需要管理?
这就好比我有十套衣服,但是我出去玩不可能吧十套衣服全穿在身上。我只会穿一套,剩下九套放在柜子里。但是我不能乱放,因为乱放我下次再想找衣服就可能找不到,或者效率很低下,找半天才能找到。我必须要把我的衣服叠好管理起来,方便我下次找到。
同样的,当前没被访问的存放在磁盘中的文件我也需要管理起来,目的是为了快速定位文件,提高查找文件的效率。就好比想在菜鸟驿站成千上万的快递中找到我们自己的快递,我们就需要拿着我们自己的取件码去对应的货架上找。菜鸟驿站的管理人员会把对应的快递按照取件码放在对应的货架上,也就是只有管理人员进行管理之后我们才可以通过取件码拿到快递。同样的,我们的文件也在对应的位置,我们可以按照路径快速定位到我们的文件。而把文件摆放在相应位置,生成文件的路径等等这些操作都是文件系统去做的。
文件系统解决的是文件的存储问题。而文件又是属性+内容构成的。所以文件系统解决的实际上是文件的属性和内容的存储的问题。
而文件存储的问题的本质是为了方便OS/用户对文件进行增删查改操作。因为要想对文件进行增删查改必然要先找到文件,而为了更快的找到文件我们就需要把文件管理起来。为了更好的管理,文件系统应运而生。为什么说是为了方便OS对文件进行增删查改呢?因为用户只是输了一个命令,OS就要去找这个文件,找到之后用户才能进行操作。
文件物理存在磁盘上,我们这里要对其进行一个逻辑存储结构的抽象。为什么要进行逻辑存储结构的抽象呢?这是为了给OS管理文件提供一个统一的视角,方便让OS管理磁盘。
磁盘的物理存储结构
磁盘的基本存储结构是扇区,一个扇区是512字节、4kb等大小。如果想要修改磁盘上的一个bit位也要把磁盘的一个扇区的大小(比如512字节)加载进内存,修改完之后也要按512字节大小再刷新回扇区里。
CHS寻址
要想使用某个扇区,我们就需要先找到这个扇区。这个过程就是先确定用哪个Head(磁头),然后去寻找对应的Cylinder(磁道),最后找磁头上需要修改的Sector(扇区)。
这个我们称之为CHS寻址定位法。
磁盘的逻辑存储结构
我们可以把磁盘想象为一个线性空间。每一个段都可以看为是一个磁道,每一个分段都可以为是一个盘面,每一个子段都可以看为是一个磁道,每一个小格子都可以看为是一个扇区。
因为是线性的,所以我们可以用数组来存储。因此对磁盘的管理就可以变为对数组的管理。
我们可以通过下标来对每个盘面进行划分。比如说1~10000是划分为第一个盘面,10001~20000划分为第二个盘面。
比如说我想知道下标为1234属于哪个扇区,计算方法如下:
1234/10000=0 说明在第一个盘面
1234/1000=0 说明在第一个磁道
1234%10000=1234 说明在第1234个扇区
因此下标1234在第一个盘面的第一个磁盘的第一个扇区。
LBA寻址
操作系统可以按照扇区为单位进行读取,也可以按照块为单位进行读取。一次可以读取八个扇区作为一个块,刚好是4kb大小。
LBA寻址因为是线性的,所以效率要更快一些,而且比CHS寻址找磁头,磁道,扇区的方式更简洁一些。