5

我一直在查看位于此处的 LBA 到 CHS 方程,但我无法理解它们为什么起作用。有人可以解释为什么这些方程式有效吗?(或许可以简要说明数据在存储设备(如软盘)上的存储顺序)

4

1 回答 1

11

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

从左到右,等式的第一部分将柱面数转换为跳跃所需的磁头数;下一部分将当前磁头编号添加到其中并将其转换为扇区数。最后,添加当前扇区号并从零索引中减去 1。

我在这里重复自己,这是有充分理由的——这只是这些概念之一。如果有帮助,请绘制一个平行线 - 从十六进制转换为十进制。假设我已经给了你 FED 并且想知道十进制是什么。那么,转换将是:

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

我是怎么解决的?好吧,在 FED 中,从左到右,每“十”有 16 个“百”,我们有数字 15。除此之外,我们加上“十”的数量,即 14。我们再次乘以 16,因为有每单位 16 个“十”。最后,我们添加了额外的 13 个单元。

问题是,你每天都用十进制数做这种事情——这里唯一的困难是基数或基数不是十的数字,因此在我们的自然符号中是有意义的。


编辑:我刚刚想到你实际上是在问相反的方向。这容易得多

首先,取模运算符——这意味着给定值除以另一个值时的余数。因此,如果我们有,r = X mod Y则 r 是 X 除以 Y 时的余数。

这通常被称为时钟算术,因为就像时钟一样,这些值会随着您的增加而以循环方式传播X

我们还可以计算除数的商 - 给定一对XY并计算,这是这样X/Y的最大值。AX > AY

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

对,现在进入公式。给定一个 LBA 地址,我们知道,如果我们将每个磁头的磁道乘以每个柱面的磁头数,就可以得出给定柱面编号“覆盖”的磁道数 - 此范围内的所有剩余部分都使用相同的柱面编号。使用上面设计的表格的实际示例:每个磁头有三个磁道,假设每个柱面有 6 个磁头 - 所以 6*3=18。现在取一个 LBA,比如 5 - 5/18 = 0 余数 5。所以我们将这个商值作为柱面编号,它就是。

因此,下一个问题采用 LBA 编号并将其除以您拥有的每个磁道的扇区 - 为什么?请记住,我们的 LBA 计算“曲目”。除以这个值并占满席位(因为每个单独的轨道都考虑了所有可能的余数)将我们转换为正面。然后我们将该值取模每个柱面的磁头数,例如,如果我们每个柱面有 6 个磁头,磁头值为 8,则我们正确地将磁头数报告为 2(柱面数为 1,占前 6).

最后,扇区号是一个简单的 LBA 除以每个磁道的扇区(加一以抵消零索引)余数。为什么?好吧,在需要不同的磁头/磁道之前,每个磁道只能包含一定数量的扇区。

于 2012-05-06T20:17:56.103 回答