做网站套模板,爱做网址,高质量内容的重要性,微信网站在线登录网页版磁盘在操作系统的维度看#xff0c;就是一个“超大的Byte数组”。
那么操作系统是如何对这块“超大的Byte数组”做管理的呢#xff1f;
我们知道在逻辑上#xff0c;上帝说是用“文件”的概念来进行管理的。于是#xff0c;便有了“文件系统”。那么#xff0c;文件系统…磁盘在操作系统的维度看就是一个“超大的Byte数组”。
那么操作系统是如何对这块“超大的Byte数组”做管理的呢
我们知道在逻辑上上帝说是用“文件”的概念来进行管理的。于是便有了“文件系统”。那么文件系统底层又是怎么设计的呢下面我来说两句。
首先我直接给一张架构图。 对磁盘进行管理抽象上是分为两步。
一、分区 将磁盘划分分区其实就是把一个物理的硬盘划分为逻辑上几个虚拟的硬盘称为分区。 每个分区上可以装有自己的文件系统。基本装电脑大家都不会陌生。这里可以理解为就是把那个“超大的byte数据分为一段一段分开管理”。
二、装文件系统 将其中的一段byte数组按结构化格式为一个文件系统的数据存储结构。 从上面图中可以看到他们把这段byte数组大体上分为4小段每段提供一些作用存储一些信息目的就是可以利用这些存储空间来对磁盘自身来做管理。重点看i节点表和数据块。
每个文件对应i节点表中的一条记录文件的内容被碎片化的存储到数据块中。碎片化举一个具体的例子比如说1KB的文件分为两个小的数据块一个512B分别存储到数据块区域的两个不连续的位置。
那么最重点的实现就是这个i节点表中的i节点的实现。因为这个实现决定了文件真正在磁盘中的样子。
在每个i节点里又被分为了15个小段其中
第1段存储了文件一些基本信息。第2段到第12段存了指针。这个指针指向上述说的数据块区域里面的一个数据块这些就是文件的内容第12段存了指针。这个指针指向上述说的数据块区域里面的一个数据块注意这个数据块中记录的还是指针而数据块中的这些指针还是指向数据块区域里面的数据块我们称为间接指针通过这样的方式我们可以记录的文件内容可以翻256倍原来只能指向一个数据块现在可以指向256个。第13段存了指针。但是是二重间接指针。原理同上不说。第14段三重间接指针
优雅的数据结构具备了几个优点
碎片化的存储文件数据i节点结构固定但是可以支持任意大小的文件可支持文件空洞。即文件中间几个数据块不存在数据最大支持4TB文件
综上我们整体知道了操作系统大致是如何管理磁盘的不得不说一个好的数据结构的伟大。 不仅如此这个思想我认为还可以借鉴到我们实际的开发中即对一个超大byte数组存储的管理如Go中的对象数据管理等等值得好好回味把玩。