文件=内容+属性
被打开的文件在内存中,没有被打开的文件在磁盘里文件系统的工作就是根据路径帮我们找到在磁盘上的文件
磁盘(硬件)
磁盘的存储结构
磁头在传动臂的运动下共同进退,向磁盘写入的时候是向柱面批量写入的
OS文件系统访问磁盘不以扇区为单位,而是以块为单位,一般是4KB(连续8个扇区),(可以调整)
磁盘的存储结构
扇区是磁盘存储数据的基本单位,512字节,块设备
定位一个扇区,可以先定位磁头,确定磁头要访问的柱面/磁道,再定位扇区
CHS地址定位 柱面(cylinder),磁头(head),扇区(sector) 数据定位
扇区是从磁盘读写信息的最小单位,通常大小为512字节
磁头数:每个盘片一般有上下两面,共两个
磁道数:磁道是从盘片外圈往内圈编号。靠近主轴的同心圆用于停靠磁头,不存储数据
柱面数:磁道构成柱面 柱面数=磁道数
扇区数:每个磁道的扇区数相等
圆盘数:盘片的数量
磁盘容量=磁头数*磁道数*每磁道扇区数)每扇区字节数
磁盘的逻辑结构
逻辑上我们可以把磁盘想象成磁带,磁盘的逻辑存储结构我们可以类似于数组
这样每一个扇区就有了一个线性地址(数组下标),这种地址也叫LBA(线性地址)
相同半径的磁道逻辑上构成柱面,逻辑上磁盘整体是由柱面卷起来的
柱面展开
CHS 和LBA
CHS -> LBA
LBA -> CHS
• 柱⾯号C = LBA // (磁头数*每磁道扇区数)【就是单个柱⾯的扇区总数】
磁盘使用者直接使用LBA地址
OS使用磁盘就可以使用一个数字访问磁盘扇区
文件系统
硬盘是"块"设备
连续8个扇区组成一个块,块是文件存取村的最小单位
一个块的大小是在格式化的时候确定的,不可以更改,最常见的是4KB
分区
分区是对硬盘的一种格式化
windows方向看,磁盘分为CDE盘,CDE就是分区
柱面是分区的最小单位
inode
文件=内容+属性
Linux中,内容和属性是分开存储的,任何正常文件都要有自己的属性集合
struct inode
{
type
size
pri
...
};
文件的属性大小是一样的,128字节
文件名属性并没有在inode数据结构里
ext2 文件系统
我们想在硬盘上存储文件,必须先把硬盘格式化为某种格式的文件系统才能存储文件。文件系统的目的就是组织和管理硬盘中的文件
ext2是最常见的文件系统,ext2文件系统将整个分区划分成若干个同样大小的块组,只要能管理一个分区就能管理所有分区,也就能管理所有磁盘文件
ext2文件系统会根据分区的大小换份我数个Block Group,每个Block Group都有相同的结构组成
数据区:存放文件内容,也就是一个一个的Block
•对于普通文件,文件的数据存储在数据块中
•对于目录,该目录下的所有文件名和目录名存储在所在目录的数据块中,除了文件名以外,看到的其他信息保存在该文件的inode中
inode编号以分区为单位,整体划分,不可以跨分区
Block号按照分区划分,不可跨分区
目录与文件名:
目录也是文件,但是磁盘上没有目录的概念,只有文件内容+属性
目录的属性的内容保存的是文件名+inode号的映射关系
访问文件必须打开当前目录,根据文件名获得对于的inode号,然后进行文件访问
软硬链接
找到磁盘上文件的不是文件名而是inode
软链接(类似快捷方式)是独立文件,因为他有独立的inode
硬链接(对文件进行备份)只是文件名和目标文件inode的映射关系,不是一个独立的文件,因为他没有独立的inode
eg: . 和 ..
硬链接只能给普通文件进行建立,Linux系统不支持给目录建立硬链接,但 . 和 .. 本质就是对目录的硬链接。所以是不允许用户给目录建立硬链接,但是OS自己可以
用户自己给目录建立硬链接容易形成路径环问题
. 和 .. 名字特殊,做特殊处理即可,方便命令行操作
但是可以对目录建立软链接