CHS和LBA的地址与的磁盘关联
1 磁盘
这里需要首先理解磁盘的物理构造,才能理解具体的CHS和LBA。磁盘是一种外设所具有的的优点就是容量大,价格便宜,但是毕竟是外设访问速度,肯定是比较慢的。这里直接上物理结构,来详细讲解:
对应的结构主要有:机械臂,磁头,扇区,主轴,磁道,盘面,柱面。
磁头(head)数:每个盘片一般有上下两面,分别对应1个磁头,共2个磁头(细节:传动臂上的磁头是共进退的)
磁道(track)数:磁道是从盘片外圈往内圈编号0磁道,1磁道...,靠近主轴的同心圆用于停靠磁头,不存储数据
柱面(cylinder)数:磁道构成柱面,数量上等同于磁道个数
扇区(sector)数:每个磁道都被切分成很多扇形区域,每道的扇区数量相同
圆盘(platter)数:就是盘片的数量
所以这里就可以算出磁盘容量:
磁头数×磁道(柱面)数×每道扇区数×每扇区字节数
那这和CHS寻址又有什么关系呢?
首先要理解如何确定一个扇面:
1.需要确定磁头吧(这里可是有多个磁头的),才能确定访问那个柱面
2.需要确定磁道吧(这里有这么多圈的磁道),就可以确定在那个环上了
3.最后再确定在那个扇区上就找到对应的扇面
之前的讲过文件,是有内容加属性确定的,文件的属性和内容就可以存放在扇区内(一个扇区就是512字节)。
这里的CHS寻址也就是确定柱面(cylinder),磁头(head),扇区(sector),就可以确定一块扇区,所以就是CHS寻址。
这里有一些问题就是:CHS模式下支持的硬盘容量有限,因为系统用8bit来存储磁头地址,用10bit来存储柱面地址,用6bit来存储扇区地址,而⼀个扇区共有512Byte,这样使用CHS寻址⼀块硬盘最大容量 为256*1024*63*512B=8064MB(1MB=1048576B)(若按1MB=1000000B来算就是 8.4GB)
2 磁盘的逻辑结构
磁盘本质上虽然是硬质的,但是逻辑上我们可以把磁盘想象成为卷在⼀起的磁带,那么磁盘的逻 辑存储结构我们也可以类似于:
像这样每⼀个扇区,就有了⼀个线性地址(其实就是数组下标),这种地址叫做LBA地址。
3 重构理解LBA和CHS(真实物理过程)
记得前面有一个点吗?传动臂上的磁头是共进退的
柱⾯是⼀个逻辑上的概念,其实就是每⼀面上,相同半径的磁道逻辑上构成柱面。磁盘物理上分了很多面,但是在我们看来,逻辑上,磁盘整体是由“柱⾯”卷起来的。
所以柱面可以理解为:
柱面上的每个磁道,扇区个数是⼀样的,看起来就像是一个二维数组。
再扩展到整个盘上:
就是很多张二维数组表,也就是三维数组。所有,寻址⼀个扇区:先找到哪⼀个柱面(Cylinder),在确定柱面内哪⼀个磁道(其实就是磁头位置, Head),在确定扇区(Sector),所以就有了CHS。
在之前学习数组时,不论是二维数组还是三维数组,都可以看做一个一维数组:
所以,每⼀个扇区都有⼀个下标,我们叫做LBA(Logical Block Address)地址,其实就是线性地址。
从逻辑的LBA到CHS转化就显得尤为重要,这样OS就使用LBA地址,所以从磁盘到OS就需要CHS转LBA,从LBA到CHS就是从OS到磁盘(这个工作就是磁盘自己来做,用来服务操作系统的,属于固件,硬件电路)。
3.1 CHS&&LBA地址的转化
CHS转成LBA:
LBA=柱⾯号C*单个柱⾯的扇区总数+磁头号H*每磁道扇区数+扇区号S-1
这里减一的原因是:扇区号通常是从1开始的,而在LBA中,地址是从0开始的
LBA转成CHS:
柱⾯号C=LBA//(磁头数*每磁道扇区数)
磁头号H=(LBA%(磁头数*每磁道扇区数))//每磁道扇区数
扇区号S=(LBA%每磁道扇区数)+1
(//表示向上取整)磁盘使用者看来,根本就不关心CHS地址,而是直接使用LBA地址,磁盘内部自己转换。