2012-05-06 27 views
3

我一直在寻找位于here的CHS方程的LBA,我无法理解它们为什么会起作用。有人可以解释为什么这些方程式有效(也许简单说明数据存储在诸如软盘之类的存储设备上的顺序)LBA到CHS解释

+1

它与将小时:分钟:秒转换为秒和返回相同。你只有不同的号码。 –

回答

8

CHS指磁盘从字面上以这种方式访问​​数据时的圆柱体,磁头和扇区 - 选择气缸,头和扇区读取。

LBA是一种新颖的方案,它基本上将磁盘作为不断增加的块数来处理。

转换方案基本上让你从一个到另一个。首先,公式为您提供了你需要知道的一些值的占位符 - 如何每缸许多首长,多少人均部门。

所以,现在想象你有一些数据是这样的:

Cylinder number Head Number  Sector Number Data   LBA 
================================================================================ 
     0    0    0   A    1 
     0    0    1   B    2 
     0    0    2   A    3 
     0    1    0   B    4 
     0    1    1   A    5 
     0    1    2   B    6 

这其中有每人只有三轨故意做作方案。如何,我们已经选择了LBA,以便我们每次追踪的曲目号码都会增加。但是,当我们切换头部时,我们还需要增加曲目编号。因此,我们可以说:

LBA = sectors per head * current head + current sector number 

所以现在找LBA 4,我们知道在CHS符号,等于(0,1,0)。每个头有三个扇区,3*1+0=4

请注意,我故意错过了-1,所以您专注于这个想法 - 这是因为LBA是零偏移量。

无论如何,这对于首长和行业来说工作得很好,但是气瓶呢?好吧,如果汽缸数由一个上升,我们跳下number of heads per cylinder头前进的磁盘,这是磁盘上number of heads per cylinder times number of sectors per head部门上。如果我们给出一个柱面,磁头,扇区元组,我们可以计算出有多少部门,可能加起来:

LBA = (((cylinder number * heads per cylinder) + head number) * 
     * sector per head) + sector number - 1 

从左至右工作,等式的第一部分转换柱面号为需要跳跃的人数;下一部分将当前头号添加到该头部并将其转换为多个扇区。最后,添加当前扇区号并从零索引中减去一个。

我在这里重复自己,有很好的理由 - 这只是其中的一个概念。如果有帮助,请绘制一个从十六进制到十进制的并行转换。假设我给了你FED,并想知道十进制数是什么。嗯,转换将是:

dec = (((15*16)+14)*16)+13 

我怎么工作了这一点?那么,从左至右在FED,有16个“数百名”每“十”,我们有数字15,除此之外,我们“十位”的数量,这是14本,我们通过16再乘以因为有每单位16“十”。最后,我们增加额外的13个单位。

的事情是,你每天做这种事情有小数号码 - 这里唯一的困难是基础,或radix是一个数字,十因此很有意义我们自然符号。


编辑:它只是发生在我身上,你实际上是在问相反的方向。这是容易!

首先,模数运算符 - 这意味着在给定值的剩余部分在由另一个值除以。因此,如果我们有r = X mod Y则r是余当X用Y

这就是通常所说的时钟算法,考虑的事实,就像一个时钟,这些值去周围循环的方式为你增加X

我们也可以计算除数的商 - 给一对XY和计算X/Y,这就是A这样X > AY的最大值。

把它放在一起,如果你被要求计算除以5的32和商的余数,我们看到2 = 32 mod 5,因为5除以30.然后,30 = 6 * 5,所以商是6.

右,现在到公式。给定一个LBA地址,我们知道,如果我们每气缸盖乘以每头的轨道,这给了我们一个轨道特定气缸数“盖”的数量 - 在这个范围内的所有余使用相同的气缸nunber。使用上述人工表格的实例:每头有三条轨道,假设每个汽缸有六个头 - 所以6 * 3 = 18。现在取一个LBA,比如5 - 5/18 = 0,余数为5.所以我们把这个商值看作柱面数,就是这个数。

那么接下来的问题采取LBA数并划分,通过每磁道的扇区你 - 为什么?请记住,我们的LBA计数“跟踪”。按照这个数值划分并发言(因为每个单独的轨道都包含所有可能的剩余部分)将我们转换为头像。然后,我们取该值模的每个气缸头的数量,从而,例如,如果我们有每缸和为8的头值6头,我们正确地报告头数为2(气缸数为1,占第一个6)。

最后,扇区号是一个简单的LBA除以每个磁道的扇区(加上一个来抵消零索引)的余数。为什么?那么,每个曲目只能包含一定数量的扇区,然后才能使用不同的磁头/磁道。

+0

非常感谢! –

+0

我有同样的问题试图了解它...... WTH是“每缸”和“每扇区”......不是它是“每个磁盘的磁头”,“扇区-per-track“和”每个磁盘的磁盘“?我刚才问这个问题 - http://stackoverflow.com/questions/32642016/chs-to-lba-mapping-disk-storage任何帮助将不胜感激,谢谢! –