gpt4 book ai didi

assembly - LBA兑换CHS的说明

转载 作者:行者123 更新时间:2023-12-02 19:04:27 26 4
gpt4 key购买 nike

我一直在寻找位于here的LBA到CHS方程,但是我很难理解它们为什么起作用。有人可以解释为什么这些方程式起作用吗? (也许简要说明数据在软盘等存储设备上的存储顺序)

最佳答案

从磁盘实际访问数据的那一天开始,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个单位。

问题是,您每天都会使用十进制数字来执行此类操作-唯一的困难是基数或 radix是一个不为10的数字,因此按照我们的自然表示法是有意义的。

编辑:这只是对我而言,您实际上是在询问相反的方向。那要容易得多!

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

由于与时钟一样,这些值会随着循环 X的增加而以循环方式绕行,因此通常称为时钟算术。

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

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

对,现在到公式上。给定一个LBA地址,我们知道,如果我们将每个磁头的磁道乘以每个磁头的磁头数,则可以得出给定磁道编号“覆盖”的磁道数-此范围内的所有其余数都使用相同的磁道数。使用上面设计的表的实际示例:每个磁头有3条磁道,而每个圆柱体有6个磁头-因此6 * 3 = 18。现在取一个LBA,例如5-5/18 = 0余数5。因此,我们将该商值作为柱面数,即为柱面数。

因此,下一个问题采用LBA编号,然后将其除以您拥有的每个磁道的扇区数-为什么?好的,请记住,我们的LBA算是“轨道”。除以该值并取其底线(因为每个单独的轨道都占所有可能的余数)会将我们转换为正面人物。然后,我们将该值取每个汽缸的缸盖数的模数,这样,例如,如果每个汽缸有6个缸盖且水头值为8,则我们正确地将缸盖数报告为2(汽缸数为1,占最大缸数)。前6个)。

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

关于assembly - LBA兑换CHS的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10473768/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com