磁盘认识
磁盘被访问的基本单元是扇区-512字节。
磁盘可以看成多个同心圆,每个同心圆叫做磁道,多个扇区组成同心圆。
我们可以把磁盘看做由无数个扇区构成的存储介质。
要把数据存到磁盘,先定位扇区,用哪一个磁头,哪一个磁道。
磁盘抽象
磁盘可以抽象成线性结构,基于扇区的数组,任意一个扇区都有抽象地址LBA,相当于数组下标。
磁盘寻址是CHS(磁道,磁头,扇区),通过扇区的抽象地址LBA到扇区的具体物理位置。
磁盘也有寄存器
文件系统
磁盘划分
bootblock保存与开机相关的文件,剩余的空间可以划分为多个block group结构。
Superblock:文件系统对应信息
DataBlock:存文件内容区域,以块形式呈现,常见的是4kb大小-文件系统的块大小
inodeTable:有多个inode,单个文件的所有属性,主要是128字节,一个文件一个inode,inode天然有唯一的编号,只在自己的分区中使用。
在Linux用inode标识编号
struct inode
{
inode number
文件类型
权限
引用计数
拥有者
所属组
ACM时间
int block[NUM]
}
文件对应在DataBlock数据块编号保存在block数组中
数据blocks是前12个位置是直接索引,对应的下标的数据块是文件本身内容,后面的是间接索引,保存的下标对应的数据块文件内容的对应的直接索引,最后一个是三级索引,保存的下标对应的数据块是二级索引。
blockBitmap表示Datablocks哪些数据块中被使用,比特位位置和块号映射,比特位内容,表示该块有没有被使用。
inodeBitmap:比特位和inode的编号映射起来,比特位内容inode是否有效,inode的有效与否表示文件是否删除。
GroupDescriptorBitmap:描述整个组基本的分类使用情况。
SuperBlock:整个分区的文件系统情况,分区包含多个组。如分区被分为多少个组,每个组的大小。SuperBLock不会在每个组都存在。
Inode
一个文件对应一个inode,inode对应有自己编号,分区内有效。
Inode的作用
新建文件:inodeBitmap申请inode,0置1,在inodeTable填写文件属性,在blockBitmap中寻找空白数据块,输入数据后,修改blockBitmap。
系统是如何知道Inode编号?
文件名是如何和Inode映射起来?
目录也是文件,也有自己的Inode。目录也有数据块存放文件名和inode的映射关系。
同一个目录下文件名不能重复,同名文件导致映射冲突问题。
目录下,没有w权限,无法创建文件,无法把inode和文件名写到目录文件的数据块。
目录下没有r权限,无法查看文件,没有读权限就不能读取到目录文件数据块
目录下,没有x,无法进入这个目录,无法读取目录inode,无法改变环境变量,改变位置关系。
如何知道目录inode?递归回根目录,再往下找。
寻找文件,先递归找到根目录,再找到对应目录,对应文件。
Linux的dentry缓存,保存最常用的路径。