前言
我们在基础 IO 专题都是围绕打开后的文件展开讨论,下面我们要认识一下文件打开之前是怎样的,会围绕以下几个问题展开: 1、为什么打开文件要带文件路径? 2、打开文件时操作系统做了什么? 3、没被打开的文件在哪里?如何存放的? 我们目前可以回答第三个问题,没被打开的文件一定在磁盘这样的存储设备上。(Ext 系列文件系统是专为磁盘等持久化块存储设备设计的文件系统)
一、理解磁盘
机械磁盘是计算机中唯一的机械设备 磁盘—外设 慢 容量大,价格便宜
正因为磁盘价格便宜,容量大,所以如今的大型互联网公司都青睐用磁盘来存数据。
我们知道计算机只认识二进制,这个二进制的程序员规定出来的,在不同的设备可能用电的有无或者高低电平表示 0、1,而磁盘中有无数细小磁铁,所以磁盘是用小磁铁的正负极来表示 0、1 的。
磁盘的物理结构
上面是磁盘的物理结构示意图,我们只用知道主轴马达会一直高速旋转,磁头会高速左右摆动就够了。
磁盘的存储结构
扇区:是磁盘存储数据的基本单位,也是操作系统访问数据的基本单位,512 字节,它是块设备。
我们一般认为一个磁盘中各个半径不同的磁道所含的扇区数目是一样的,原因是不同磁道扇区的疏密程度不同,一般需要高频访问的数据在内侧,不太高频访问的数据就在外侧。

我们看上图的磁盘结构: 1、盘面和磁头是一对一对应的。 2、并且一个磁盘的所有磁头是共进退的,如上所示,同一时间六个磁头都是访问的是对应盘面同一半径的磁道,我们把这六个磁头所在的六个相同半径的磁道合为一体称为柱面。
下面我们让磁盘动起来: 1、磁头左右摆动的本质是在定位哪个磁道 2、盘面旋转的的本质是在确定某个磁道后,定位该磁道(柱面)上的某一个扇区。
如何定位⼀个扇区呢? 1、可以先定位磁头(header)。 2、确定磁头要访问哪⼀个柱⾯ (磁道)(cylinder)。 3、定位⼀个扇区 (sector)。 4、这就叫做 CHS 地址定位,但是现代磁盘一般是用 LBA 地址定位,后面再讲。 5、一般磁头、磁道编号从 0 开始,扇区编号从 1 开始。
总结: 1、扇区是从磁盘读出和写⼊信息的最⼩单位,通常⼤⼩为 512 字节。 2、磁头(head)数:每个盘⽚⼀般有上下两⾯,分别对应 1 个磁头,共 2 个磁头。 3、磁道(track)数:磁道是从盘⽚外圈往内圈编号 0 磁道,1 磁道…,靠近主轴的同⼼圆⽤于停靠磁头,不存储数据。 4、柱⾯(cylinder)数:磁道构成柱⾯,数量上等同于磁道个数。 5、扇区(sector)数:每个磁道都被切分成很多扇形区域,每道的扇区数量相同。 6、圆盘(platter)数:就是盘⽚的数量。 7、磁盘容量=磁头数 × 磁道 (柱⾯) 数 × 每道扇区数 × 每扇区字节数。 8、细节:传动臂上的磁头是共进退的 (这点⽐较重要,后⾯会说明)。 9、柱⾯(cylinder),磁头(head),扇区(sector),显然可以定位数据了,这就是数据定位 (寻址) ⽅式之⼀,CHS 寻址⽅式。
磁盘的逻辑结构
理解过程
磁盘本质上虽然是硬质的,但是逻辑上我们可以把磁盘想象成为卷在⼀起的磁带,那么磁盘的逻辑存储结构我们也可以类似于:











