【摘要】硬盘组织和存储结构这部分内容对于了解硬盘中数据的组织与存储,对于硬盘中数据的维护与修复,都很重要。本文对此问题进行讨论,希望对感兴趣的读者有所帮助,能更好地了解和应用这一知识。
【关键词】硬盘 存储结构 物理地址 逻辑地址 转换
1 前言
从1957年ibm公司研制成功出第一台真正意义上的硬盘存储器到现在已将近半个世纪,在这短短的几十年时间里,硬盘逐渐成为电脑不可缺少的外部存储设备,被广泛应用。硬盘的容量成千上万倍地增长,从当初的数十mb发展到现在的数百gb,甚至达tb量级。硬盘容量的大幅度增加,其寻址模式也随之不断变化。最早采用的是c/h/s(cylinder/head/sector)寻址模式,它依据磁头数(heads)、柱面数(cylinders)和扇区数(sectors)构成的绝对地址来寻址的,也称为物理磁盘地址。通常dos将“柱面/磁头/扇区”这样表示法称为“绝对扇区”表示法,但dos不能直接使用绝对扇区进行磁盘上的信息管理,而是用所谓“相对扇区”或“dos扇区”——即按扇区号,磁头号,柱面号(磁道号)增长的顺序连续地分配dos扇区号。
在早期的硬盘中,由于每个磁道的扇区数相等,外磁道的记录密度远低于内磁道,因此造成很多磁盘空间的浪费。为了解决这一问题,人们改用等密度结构,即外圈磁道的扇区比内圈磁道多。此种结构的硬盘不再具有实际的3d参数,寻址方式也改为以扇区为单位的线性寻址,这种寻址模式便是lba(logic block address, 逻辑块地址)。在这种模式下,硬盘的物理地址与逻辑地址的转换问题有一定必要性和复杂性,本文对此进行讨论,希望对感兴趣的读者有所帮助。
2 转换过程
所谓逻辑扇区是物理扇区的一组连续数字的编号,操作系统采用的一种扇区编号方式,其编号是从0开始到某个最大值方式排列,并连成一条线。使用逻辑扇区主要有以下两个优点:第一,逻辑扇区的概念使硬盘的读写操作脱离了柱面、磁头和扇区的硬件参数;第二,在硬盘中每一定数目的扇区组成了数据文件的最小单位—— 簇,在对一个具体的簇进行读写操作时,操作系统划分一个一维的逻辑扇区号要比使用三维物理扇区号简单的多,如果一个簇的扇区跨越在两个盘片,则使用“柱面、磁头和扇区”的表示方法就更加复杂了。那么硬盘的物理地址和逻辑地址是如何转换的呢?下面具体介绍其相互转换方法。
2.1 硬盘物理地址转换为逻辑地址
首先我们先来了解一下从c/h/s到lba线性地址的转换规则。为了与使用c/h/s寻址的老软件兼容,于是在硬盘控制器内部安装了一个地址翻译器,它负责将c/h/s参数翻译成lba地址。
同时,由于系统在写入数据时是按照从柱面到柱面的方式,当上一个柱面写满数据后才移动磁头到下一个柱面,而且是从柱面的第一个磁头的第一个扇区开始写入,从而使磁盘性能最优。那么在对物理扇区进行线性编址时,也是按照这种方式进行。即把第一柱面(0柱)第一磁头(0面)的第一扇区(1扇区)编为逻辑“0”扇区,把第一柱面(0柱)第一磁头(0面)的第二扇区(2扇区)编为逻辑“1”扇区,直至第一柱面(0柱)第一磁头(0面)的第63扇区(63扇区)编为逻辑“62”扇区,然后将磁头转到第一柱面(0柱)第二磁头(1面)的第一扇区(1扇区),接着上面其对应的逻辑编号为第“63”扇区,0柱面所有扇区编号完毕后才转到1柱面的0磁头1扇区,依次向下进行,直到将所有的扇区都编上号。我们需要注意的是,物理扇区c/h/s中的扇区编号是从“1”至“63”,而逻辑扇区lba方式下扇区是从“0”开始编号,所有扇区编号按顺序进行。
在此转换过程中,我们必须要知道的物理量有:
c1—起始扇区的柱面号
h1—起始扇区的磁头号
s1—起始扇区的扇区号
ns—每磁道的扇区数
nh—硬盘每柱面磁道数
c、h、s表示硬盘当前的柱面号、磁头号和扇区号,则计算柱面c、磁头h、扇区s对应的相对逻辑扇区号rs的公式为:
逻辑扇区rs=nh×ns×(c-c1)+ns×(h-h1)+(s-s1),为验证此公式,下面我们来举个例子。
实例:已知有一个4磁头(硬盘每柱面的磁道数为4),每磁道有17个扇区的硬盘,其中有一个逻辑硬盘d:,它的第一个扇区在硬盘的柱面号为120,磁头号为1,扇区号为1的位置,则计算柱面号为160,磁头号为3,扇区号为6的逻辑扇区号rs是多少?
分析:
根据前面的说明,已知条件有:c1=120, h1=1, s1=1, ns=17, nh=4,c=160,h=3,s=6,则代入上面公式可得到逻辑扇区号rs=4×17×(160-120)+17×(3-1)+(6-1)=2759,即硬盘柱面号为160,磁头号为3,扇区号为6的逻辑扇区号为2759.
2.2 硬盘逻辑地址转换成物理地址
在对硬盘进行故障维护或者进行相关软件开发时,不仅需要将硬盘的物理地址转换成逻辑地址,有时还需要知道逻辑地址转换为物理地址的方法。
根据计算机中符号的常用法则,我们用“div”表示除法运算,用“mod”表示取余数运算,其他参数如c、h、s依然表示硬盘当前的柱面、磁头和扇区号,c1、h1、s1、ns和nh含义也和上面一致。在已知硬盘逻辑地址即逻辑扇区号ls的情况下,求硬盘对应的物理地址的柱面号c、磁头号h和扇区号s的方法如下:
c=((ls div ns)div nh)+ c1
h=((ls div ns)mod nh)+ h1
s=(ls mod nh)+ s1
实例:设硬盘的磁头号为4,每磁道17个扇区,其中逻辑硬盘d的第一个扇区在硬盘的柱面120、磁头1、扇区1上,求逻辑d盘上逻辑扇区为2757编号对应的物理地址是多少?
分析:根据上面的已知条件,我们可知c1=120, h1=1,s1=1,ns=17,nh=4,ls=2757,则将这些数据代入上面的公式可得:
c=((2757 div 17)div 4)+120=160
h=((2757 div 17)mod 4)+1=3
s=(2757 mod 17)+1=4
即逻辑扇区号ls为2757的硬盘对应的物理地址为柱面号是160、磁头号是3和扇区号为4。
3 结束语
以上是本人在教学中的一些教学总结,有可能还存在一些不完善的地方。因为我深知,关于硬盘的这一块知识还有很多有待于我们去进一步的探索和积累,所以希望大家对于以上的内容给予提出宝贵的意见,以更好的促进我们的教学。
参考文献
[1] 张钟澍.大容量硬盘修复技术及数据管理.电子科技大学出版社,2008.
[2] 范国渠.计算机组装与维护.北京:北京交通大学出版社,2008.
[3] 杜树杰.计算机组装与维护.北京:中国铁道出版社,2009.
[4] 林俊豪,刘丹等改.diy硬盘管理/数据备份/系统恢复.人民邮电出版社,2008.
本文链接:http://www.qk112.com/lwfw/jsjlw/jisuanjiyingyong/245082.html