目录
3.2.5 GDT(Group Descriptor Table)
3.3 inode 和 Data Block的映射(简单说明)
1.理解硬盘
1.1 磁盘、服务器、机柜、机房
机械磁盘是计算机中唯一的一个机械设备,磁盘对于计算机来说是一种外设,机械磁盘的特点是容量大,价格便宜但是传输数据慢(相对于内存和cpu之间的传输)。
如下图,就是一块企业级的磁盘。
如下就是把上述磁盘的内部结构,数据就存储在像光盘一样的盘面上。
下图就是一个由一块一块的磁盘构成的服务器,每一块磁盘都是可拔插的。
将一个一个服务器放在一个柜子里面,这个柜子就叫做机柜,用于放置服务器的柜子。
将一个一个机柜集中起来统一放在一个房间里面,这个房间就叫做机房。
1.2 磁盘物理结构
1.3 磁盘的存储结构
在盘面上,围着主轴转的一个一个同心圆叫做磁道,每个磁道都可以分为若干个一小节一小节的区域,这个区域叫做扇区,扇区是有宽度的,扇区是磁盘存储数据的基本单位,一般为512字节,是一个块设备。
而一块磁盘上不仅仅只有一个盘面,如上图,这块磁盘有三个盘,则有6个盘面,每一个盘面相同的磁道,组成的柱状叫做柱面。
下图为多个盘面磁盘的示意图。
文件 = 内容 + 属性。内容和属性都是数据,无非就是占据多少个扇区和占据哪几个扇区的问题。 使用 fdisk -l 命令可以查看本地的磁盘情况。
扇区(sector)数:磁盘读写数据的最小单位,通常大小为512字节,每个磁道都被分成很多扇区,每个磁道的扇区数量相同。
磁头(head)数:每个盘面一般有上下两面,分别对应1个磁头。
磁道(track)数:磁道是从盘面外圈往内圈编号0磁道,1磁道...,靠近主轴的同心圆用于停靠磁头,不存储数据。
柱面(cylinder)数:磁道构成柱面,数量上等同与磁道个数。
圆盘(platter)数:就是盘片的数量。
磁盘容量 = 磁头数 * 磁道数 * 每个磁道的扇区数 * 每个扇区的字节数
知识点1:
如何定位一个扇区?
先确定在要访问哪一个柱面(cylinder),在确定磁头(header)来确定访问柱面上哪一个磁道,最后定位访问该磁道的哪一个扇区(sector)。这种定位方案叫做CHS地址定位。
1.4 磁盘的逻辑结构
1.4.1 理解逻辑结构
对于一个盘面来说,一个盘面就相当于一个”磁带“,当把“磁带”拉直,则就将一个盘面变成了一个线性结构。
磁盘本质上虽然是硬质的,但是逻辑上我们可以把磁盘想象成卷在一起的磁带,磁盘的逻辑存储结构可以类似于:
这样每一个扇区,就有了一个线性地址(数组下标),这种地址叫做LBA。
注:一个盘面的扇区编号从 ‘1’ 开始。
1.4.2 真实过程
柱面是一个逻辑上的概念,一个柱面就是由所有相同半径的磁道构成。磁盘物理上有很多盘面,但是在我们看来,逻辑上磁盘整体是由一个一个柱面卷起来的。
所以,磁盘的真是情况如下:
磁道 -- 某一盘面的某一个磁道展开:
柱面 -- 整个磁盘所有盘面的同一个磁道,即柱面展开:
柱面上的每个磁道的扇区个数是相同的,构成一个二维数组。
整个磁盘 -- 整个磁盘就是由若干个柱面构成,展开如下:
所以,整个磁盘就是多张二维的扇区数组表,可以看成一个三维数组。
所以寻址一个扇区,一是先找到哪一个柱面(cylinder),在确定柱面内的哪一个磁道(其实就是确定哪一个磁头(head)),最后确定磁头上的哪一个扇区(sector),这就叫做CHS寻址。
在计算机中,多维数组都可以被看作为一维数组:
所以每一个扇区都有一个下标,叫做LBA(Logical Block Address)地址,就是线性地址。
OS只需要使用LBA地址就可以了。LBA地址和CHS地址的相互转换由磁盘自己来做。
1.5 CHS地址和LBA地址的相互转换
CHS转成LBA:
LBA地址 = 柱面号C * 单个柱面的扇区总数 + 磁头号H * 单个磁道的扇区总数 + 扇区号S - 1
注:柱面和磁道都是从0开始编号的,扇区号通常从1开始,而LBA是数组下标,也是从0开始,所以上面的计算公式中,扇区号要减1。
柱面,磁道,扇区总数等信息,在磁盘内部会自动维