LBA到CHS说明

时间:2012-05-06 19:56:41

标签: assembly operating-system storage

我一直在研究位于here的LBA到CHS方程式,我无法理解它们的工作原理。有人能解释为什么这些方程有效吗? (或许简要说明数据存储在存储设备(如软盘)上的顺序)

1 个答案:

答案 0 :(得分:9)

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

我是怎么做到的?好吧,在美联储从左到右,每“十”有16“数百”,我们有数字15.为此,我们加上“十”的数字,这是14。我们再次乘以16,因为有每单位16“十”。最后,我们增加了13个单位。

问题是,你每天用十进制数做这种事 - 这里唯一的困难是基数,或radix不是十的数字因此,我们的自然符号是有道理的。


编辑:我刚刚想到你正在询问相反的方向。那很多更容易!

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

这通常被称为时钟算术,因为像时钟一样,当你增加X时,这些值会以循环方式循环。

我们还可以计算除数的商 - 给定一对XY和计算X/Y,这是A的最大值,{{1} }}

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

是的,现在进入公式。给定一个LBA地址,我们知道如果我们将每个磁道的磁道乘以每个磁道的磁头数,这就得到了给定磁道数“覆盖”的磁道数 - 该范围内的所有剩余磁盘都使用相同的圆柱形nunber。使用上面设计表的实际例子:每个头有三个轨道,让我们说每个圆柱有6个头 - 所以6 * 3 = 18。现在拿一个LBA,比如5 - 5/18 = 0余数5.所以我们把那个商数值作为圆柱数,它就是。

所以接下来的问题是LBA编号并将其划分为每个轨道的扇区 - 为什么?记住,我们的LBA计算“轨迹”。除以此值并发言(因为每个单独的轨道占所有可能的剩余部分)将我们转为头。然后,我们以每个气缸的磁头数量为模,这样,例如,如果我们每个气缸有6个磁头,磁头值为8,我们正确报告磁头数为2(气缸数为1,占第6)。

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