曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 6754|回复: 0
打印 上一主题 下一主题

[存储] CHS 与 LBA 之间的转换

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2011-8-8 19:29:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
CHS 模式不能管理超过 8064MB 的硬盘,所以提出了更加简便的 LBA 寻址方式。在 LBA 所表示的地址不再是硬盘的实际物理地址(在 CHS 中由柱面,磁头和扇区决定的地址)。LBA 将 CHS 的三维寻址方式转变为一维的线性寻址,它将 C/H/S 这几个参数按照一定的方式转变为线性编号,这样避免了 CHS 的繁琐寻址方式,从而提高了系统效率。在访问磁盘时,硬盘控制器会将这种逻辑地址转换为磁盘的物理地址。

从 CHS 到 LBA 的转换公式:
LBA = (( C x HPC ) + H ) x SPT + S - 1
LBA:逻辑扇区号(逻辑块地址)
C :柱面号;
H :磁头号;
S :扇区号;
HPC :每个柱面上的最大磁头数。
SPT:每个磁道上的最大扇区数。

按照上面公式,那么对于通常所说的 MBR 位于 0 磁道 0 柱面 1 扇区(磁盘也正是从这里开始寻址),此时 S = 1, LBA = 0 。

下面是假设每个柱面对应有 16 个磁头,然后对 LBA 和 CHS 进行换算后的对照表:
LBA 值对应 CHS
00, 0, 1
10, 0, 2
20, 0, 3
620, 0, 63
9450, 15, 1
10070, 15, 63
10081, 0, 1
10701, 0, 63
10711, 1, 1
11331, 1, 63
11341, 2, 1
20151, 15, 63
20162, 0, 1
16,12715, 15, 63
16,12816, 0, 1
32,25531, 15, 63
32,25632, 0, 1
16,450,55916319, 15, 63
16,514,06316382, 15, 63


根据上面的 LBA 公式和上面的表格的计算值,我们可以逆推出由 LBA 求 CHS 的公式:

1. 当 C=1 时, SPT * HPC 就是一个完整柱面的扇区总数,所以要求的当磁头处于某个位置时所在的柱面,可由以下式子得出:
C = LBA / (SPT * HPC)

2. (LBA / SPT) 表示当前 LBA 位置一共跨越了多少个磁道,而 HPC 表示一个柱面上一共有多少个磁头(一个磁头对应一个磁道),所以用 (LBA / SPT) 的结果对 HPC 做求模运算,那么就知道了当前所在的 LBA 位置是对应着哪个磁头,所以求 H 位置的公式如下:
H = (LBA / SPT) % HPC


3. 求当前所处的扇区位置比较好理解,即用 LBA 对 SPT 求模,然后将其结果加 1 即可,因为对于 CHS 来说,初始扇区是从 0 柱面,0 磁道,1扇区起算,所以有以下公式:
S = (LBA % SPT) + 1
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-17 17:11 , Processed in 0.060962 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表