文件管理系统
前言:之前我们讨论的是被打开文件的管理,那么未被打开的文件是如何管理的呢?
1.认识磁盘设备
1.1磁盘的物理结构
磁盘是由盘片(盘面,扇区,磁道,柱面),磁头,马达构成。具体工作如下:
1.2磁盘的存储结构
磁盘的基本存储单元是扇区,一个扇区是512byte。尽管不同磁道的扇区大小不同,但是都是存储着512byte的数据。
如何定位扇区呢?首先可以通过柱面(同心圆同半径的磁道)确定磁道,通过磁头确定盘面,最后通过盘片的旋转确定扇区。这就是CHS寻址法。
1.3磁盘的逻辑结构
我们可以想象把磁盘扯开成一条,将其抽象成现性结构。
将其抽象成一个sector arr[N]的数组,这样就能将对磁盘的管理抽象成对一个数组的管理。知道扇区的下标,就能找到扇区的物理地址。这就是LBA寻址方法。
在操作系统方面我们使用的LBA方法对磁盘进行管理,机械结构方面采用的是CHS方法对磁盘进行实际的读写。这样达到了方便管理,且不与硬件强耦合的目的。
2.认识OS的读取
虽然disk是以512byte的基本单位对数据存储,但是OS一次性是对文件系统的多个扇区进行读取的,常见的就有4kb为基本单位进行读取。
OS哪怕只读1bite的数据,也必须一次性将4kb的数据load到内存中读取或者修改,有必要再写回磁盘中。
操作系统对内存的管理也是以4kb大小的空间进行划分管理的,我们称为页。
3.文件管理系统
我们对磁盘的管理采用分治的思想,先将整个磁盘分区,也就是分为C盘D盘等,再将分区的再分组,再将组分为小块,通过对块的管理就能对整个磁盘的管理
例如我们创建文件的时候,首先就是在inode bitmap中找一个空的inode,并置为1, 在inode table中填写文件属性,再将data blocks中写数据,并映射块编号到inode 的blocks数组中,并将block bitmap中的特定数据块置为1.
我们删除文件,就只需要将文件的inode bitmap和blocks bitmap中对应的块置为0.
3.1目录文件
目录也是文件,目录的data blocks中存储着目录中文件名和inode的映射关系。因此我们可以理解
目录的r权限可读,意味着我们可以查看目录文件信息。也就是data blocks
目录的w权限可写,意味着我们可以在目录中创建文件,也就是在data blocks写文件名和inode映射关系
目录的x权限可执行,意味着我们可以在打开进入一个目录
4.软硬链接
4.1软链接
在linux中使用指令ln -s 目标文件 文件名,即可创建目标文件的软链接。
软链接的文件具有独立的inode,其指向的data blocks中存储的是目标文件的文件地址。
4.2硬链接
在linux中使用ln 目标文件 文件名,即可创建目标文件的硬链接。
硬链接与目标文件具有相同的inode ,意味着其指向相同的data blocks。例如我们的. 和..都是硬链接。
当我们删除原目标文件时,hardlink并不受影响,但text会因为找不到文件而无法访问。
4.3链接数
这样我们就能理解了,如果当一个inode的引用计数变为0时,才会真正的删除。