前提引入
**文件=内容 + 属性,这是从单个文件的角度。但是有很多文件,我们可以在宏观上把文件分为被打开的文件和没有被打开的文件;而被打开的文件在内存中方便管理,没有被打开的文件在磁盘里。
没有打开的文件肯定是很多的,那这么多的文件在磁盘中怎么被我们找到呢?从现阶段的认知,文件是一种目录结构,目录结构是树状的,需要路径(绝对、相对),文件存到磁盘上,最基本的诉求就是:就是被找到。而研究上面这些需求,要完成以特定的结构组织管理文件和帮我们找到文件就是文件系统做的事情!!!**
1. 理解硬件
磁盘 - 服务器 - 机柜 - 机房
机械磁盘是计算机中唯一的机械设备,外设慢容量大,价格便宜。
磁盘物理结构
磁盘存储结构
磁道是同心圆。
扇区:是磁盘存储数据的基本单位,512 字节,块设备。
三片六面,六个磁头,磁头在传动臂的带动下,共进退!!!
磁盘写入的时候,是向柱面进行批量写入的!!!
如何定位一个扇区呢?可以先定位磁头(header)确定磁头要访问哪一个柱面 (磁道)(cylinder),定位一个扇区 (sector)。文件 = 内容 + 属性,都是数据,无非就是占据那几个扇区的问题!能定位一个扇区了,能不能定位多个扇区呢?能
扇区是从磁盘读出和写入信息的最小单位,通常大小为 512 字节。磁头(head)数:每个盘片一般有上下两面,分别对应 1 个磁头,共 2 个磁头。磁道(track)数:磁道是从盘片外圈往内圈编号 0 磁道,1 磁道...,靠近主轴的同心圆用于停靠磁头,不存储数据。柱面(cylinder)数:磁道构成柱面,数量上等同于磁道个数。扇区(sector)数:每个磁道都被切分成很多扇形区域,每道的扇区数量相同。圆盘(platter)数:就是盘片的数量。磁盘容量=磁头数 × 磁道 (柱面) 数 × 每道扇区数 × 每扇区字节数。
细节:传动臂上的磁头是共进退的 (柱面(cylinder),磁头(head),扇区(sector),显然可以定位数据了,这就是数据定位 (寻址) 方式之一,CHS 寻址方式。
📌 CHS 寻址对早期的磁盘非常有效,知道用哪个磁头,读取哪个柱面上的第几扇区就可以读到数据了。但是 CHS 模式支持的硬盘容量有限,因为系统用 8bit 来存储磁头地址,用 10bit 来存储柱面地址,用 6bit 来存储扇区地址,而一个扇区共有 512Byte,这样使用 CHS 寻址一块硬盘最大容量为 256 * 1024 * 63 * 512B = 8064 MB(1MB = 1048576B)(若按 1MB=1000000B 来算就是 8.4GB)
磁盘的逻辑结构
理解过程
磁带上面可以存储数据,我们可以把磁带'拉直',形成线性结构。卷起来,就是同心圆,拉出来,就是一个线性结构!!!**
那么磁盘本质上虽然是硬质的,但是逻辑上我们可以把磁盘想象成为卷在一起的磁带,那么磁盘的逻辑存储结构我们也可以类似于:
这样每一个扇区,就有了一个线性地址 (其实就是数组下标),这种地址叫做 LBA。
真实过程
一个细节:传动臂上的磁头是共进退的
柱面是一个逻辑上的概念,其实就是每一面上,相同半径的磁道逻辑上构成柱面。所以,磁盘物理上分了很多面,但是在我们看来,逻辑上,磁盘整体是由'柱面'卷起来的。
磁盘的真实情况是:磁道:某一盘面的某一个磁道展开:
即:一维数组
柱面:整个磁盘所有盘面的同一个磁道,即柱面展开:
柱面上的每个磁道,扇区个数是一样的,可以理解成二维数组。整个盘:
整个磁盘不就是多张二维的扇区数组表 (三维数组?) 所有,寻址一个扇区:先找到哪一个柱面 (Cylinder), 在确定柱面内哪一个磁道 (其实就是磁头位置,Head),在确定扇区(Sector),所以就有了 CHS。之前学过 C/C++ 的数组,在我们看来,其实全部都是一维数组:
所以,每一个扇区都有一个下标,我们叫做 LBA(Logical Block Address) 地址,其实就是线性地址。所以怎么计算得到这个 LBA 地址呢?LBA,1000,CHS 必须要! LBA 地址转成 CHS 地址,CHS 如何转换成为 LBA 地址。OS 只需要使用 LBA 就可以了!!LBA 地址转成 CHS 地址,CHS 如何转换成为 LBA 地址。谁做啊??磁盘自己来做!固件 (硬件电路,伺服系统)
CHS && LBA 地址
CHS 转成 LBA:磁头数每磁道扇区数 = 单个柱面的扇区总数 LBA = 柱面号 C单个柱面的扇区总数 + 磁头号 H每磁道扇区数 + 扇区号 S - 1 即:LBA = 柱面号 C(磁头数每磁道扇区数 + 扇区号 S - 1 扇区号通常是从 1 开始的,而在 LBA 中,地址是从 0 开始的 柱面和磁道都是从 0 开始编号的 总柱面,磁道个数,扇区总数等信息,在磁盘内部会自动维护,上层开机的时候,会获取到这些参数。


