一、磁盘结构的认识
大部分文件都不是被打开的(当前并不需要被访问),都在磁盘中进行保存。那么没有被(进程)打开的文件,要不要管理呢?对于这部分文件的核心工作是什么呢? -- 肯定是需要管理的,以便于快速定位(根据路径)。
文件的管路工作(文件系统 -- 文件的存储的问题):1.打开的文件进行管理2.没有被打开的文件也要在磁盘中进行管理
首先打开的文件会由我们的OS创建struct file进行管理,那未打开的文件呢。在讲这个之前,我们先来认识一下磁盘的结构。
可以看到磁盘可以分为多个盘面,一个盘面会有一个磁头。
而当我们读取文件时,其实在硬件上就是先选择盘面,再选择扇区和磁道,然后通过磁头进行数据的读取。扇区是磁盘的最小的存储单元,一般大小为512字节。
二、OS中对磁盘结构的管理
磁盘这个硬件肯定是会接入我们的电脑的,那么OS要不要对该硬件资源进行管理呢,很明显,是一定要的,这里之前我们已经提到过了。硬件资源管理好了,其内容我们需不需要管理了,同样也是需要得,而我们磁盘得所存储得内容就是我们一个个的文件资源。实际上,扇区会划分为多个块组(一个块组4KB),我们主要是针对一个个块组进行管理的,将所有的块组管理好,也就相当于把磁盘给管理好了。那么接下来让我们看看OS中块组的结构:
接下来介绍一下这几个区域分别代表什么意思
inode Table:一般情况一个文件会有一个inode编号,这个inode编号在整个分区具有唯一性,可以很好的来标识文件在linux内核中,识别文件,和文件名无关,只和inode有关。该inode表存放的是一个inode对应存放文件属性,如文件大小,所有者,最近修改时间等。
inode Bitmao:inode 位图,每个bit表示一个inode是否空闲可用。
Block Bitmap:数据块位图,标识哪些数据块未被使用或者正在被占用。
Data blocks:数据块,存放文件的内容。
Group Descriptor Table:块组描述符,描述该块组的信息,标识还有多少数据块,多少inode可以使用。
Super Block:超级块,存放文件系统本身的结构信息。
通过这里我们可以了解到我们的OS是通过inode进行文件的定位和操作的,那为什么我们没有看见呢?我们可以通过命令查看,ls -i。
每个文件的前面那一串数字就是其inode,也就是说在文件的目录中,OS已经将文件和inode映射好了。我们来回顾一下,我们想在一个目录底下创建和删除文件,需要什么权限呢?需要w权限,为什么呢?想必通过这个大家就可以理解了。
接下来再给大家展示一下文件的创建过程:
- 存储属性
内核先找到一个空闲的i节点(这里是263466)。内核把文件信息记录到其中。 - 存储数据
该文件需要存储在三个磁盘块,内核找到了三个空闲块:300,500,800。将内核缓冲区的第一块数据复制到300,下一块复制到500,以此类推。 - 记录分配情况
文件内容按顺序300,500,800存放。内核在inode上的磁盘分布区记录了上述块列表。 - 添加文件名到目录
新的文件名abc。linux如何在当前的目录中记录这个文件?内核将入口(263466,abc)添加到目录文件。文件名和inode之间的对应关系将文件名和文件的内容及属性连接起来。