1. 物理结构
计算机的存储硬件有很多,这里讲磁盘。
磁盘的物理结构大致分为:
- 磁盘(数据存储)
- 磁头
- 音圈马达
- 主轴
所有的数据都存储在磁盘上,磁盘有很多片,每一个面都有对应的磁头来对数据进行更改
磁头是怎么找到对应的数据的呢?
磁盘存储的数据以扇区为基本单位(每个扇区512byte)
磁盘被划分为
想找到某一个扇区,就要找到,哪一个柱面,哪一个盘面,哪一个扇区
C:柱面,通过磁头的摆动
H:盘面,也可以是磁头,找到对应的磁头
S:扇区,通过盘面的旋转
所有找到磁盘上的某一个扇区,就需要知道CHS
数据存储在磁盘的一个个扇区中,在一圈圈磁道上,我们可以把这个空间抽象成一个线性结构,就像磁带
2. 逻辑结构
逻辑结构是线性结构,就像数组
我们对于磁盘的管理,转变成对于数组的管理
操作系统对于硬件,做了一个软件封装
LBA是操作系统的一个算法,把数组下标,转化为对应的CHS
通过数组下标,就找到了对应的扇区上的数据
3. 文件系统的管理
先对大的区间进行分组,分成小的块组,在对块组进行区域划分
Block Group:文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相 同的结构组成
超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量, 未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息,Super Block的信息被破坏,可以说整个文件系统结构就被破坏了
块组描述符(Group Descriptor Table,GDT):,描述块组属性信息
块位图(Block Bitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没 有被占用
inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用。
inode节点表(inode Table) : 存放文件属性如 文件inode编号,文件大小,所有者,最近修改时间等(128byte)
数据区(Data blocks):存放文件内容,多个4kb大小的集合
通过这样的结构,把文件的属性和内容分开存储,但是一个文件,知道了文件的inode,怎么找到对应的文件内容呢?
inode包含:
- inode编号(OS层面上,一个文件的唯一标识符)
- blocks[15]
其中blocks存的就是指向data block对应的指针数组
数组下表前12个指针,都指向对应的单个data block
下标为12,13,14,他们存放数据块编号所指向的数据块内容,存放的不再是文件内容,同样是属于该文件的数据块编号。
4. 目录
目录也是文件,目录文件的data block存的是 文件名与inode的映射关系
文件名 :inode
此时我们就清楚了为什么inode中包含文件的所有属性,但是就是没有文件名了,因为文件的文件名和它对应的inode存在上级目录的data blocks中
5. 文件操作
创建文件:
在inode Table 申请未被使用的inode
文件属性存入inode中
文件名和inode的映射关系保存在目录的data block
写入文件:
在目录的映射关系中找到对应的inode
通过inode找到存放文件数据的data block写入
block Bitmap更新
inode属性更新
读文件:
在目录的映射关系中找到对应的inode
通过inode找到存放文件数据的data block读取数据加载到内存上
删除文件:
在目录的映射关系中找到对应的inode
通过inode找到存放文件数据的data block
对应的block Bitmap置0 inode Bitmap 置0
如何找到目录,目录也是一个文件,也有对应的inode,这个目录的inode在上级目录的内容里,所以就要一路从/(根目录开始),操作系统对此问题的解决方案是:Dentry
关于这个具体看下面这个:
大佬写的
完