LBA到CHS说明

Hud*_*den 4 assembly storage operating-system

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

小智 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
Run Code Online (Sandbox Code Playgroud)

这是一个刻意设计的方案,其中每个头只有三个轨道.如何,我们选择订购LBA,以便我们上升的每个轨道号增加数量.但是,当我们切换磁头时,我们还需要增加磁道编号.因此,我们可以说:

LBA = sectors per head * current head + current sector number
Run Code Online (Sandbox Code Playgroud)

所以现在找到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
Run Code Online (Sandbox Code Playgroud)

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

我有点在这里重复自己,并且有充分的理由 - 这只是其中一个概念.如果它有帮助,绘制一个并行 - 从十六进制转换为十进制.假设我已经给你FED并想知道十进制是什么.好吧,转换将是:

dec = (((15*16)+14)*16)+13
Run Code Online (Sandbox Code Playgroud)

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

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


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

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

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

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

把它们放在一起,如果你被要求计算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除以每个磁道的扇区(加一个以抵消零索引)余数.为什么?那么,在需要不同的头/轨道之前,每个轨道只能包含一定数量的扇区.