CHS(Cylinder-Head-Sector,柱面-磁头-扇区)是一种早期硬盘寻址方式,用于定位磁盘上的数据位置。在早期PC BIOS和MBR分区表中,系统通过指定柱面号、磁头号和扇区号来访问硬盘数据。由于CHS的地址空间有限(例如传统的24位CHS限制为1024柱面 × 16磁头 × 63扇区 ≈ 8.4GB),随着硬盘容量增长,这一限制成为瓶颈。
为了突破8.4GB的限制,引入了扩展CHS(ECHS),也称为“伪CHS”或“LBA模拟”。ECHS通过在BIOS中对物理LBA地址进行转换,映射成更大的虚拟CHS值,从而让旧操作系统误以为硬盘仍使用CHS寻址,实际上底层已采用逻辑块寻址(LBA)。这是一种过渡性解决方案,兼容性较好但不够稳定,因不同厂商的转换算法不一致可能导致兼容问题。
最终,现代系统全面转向LBA(Logical Block Addressing,逻辑块寻址)。LBA将整个硬盘视为一个连续的逻辑扇区序列,从0开始编号,极大简化了寻址过程,并支持更大容量(如LBA-48可支持超过128PB)。如今,在AHCI协议的SATA设备和NVMe固态硬盘中,全部基于LBA进行数据访问。CHS在现代系统中仅作为向后兼容的抽象存在,BIOS或操作系统可能将其显示为虚拟值,不再反映真实的物理结构。
# 示例:将LBA转换为虚拟CHS(简化模型)
def lba_to_chs(lba, sectors_per_track=63, heads_per_cylinder=16):
cylinder = lba // (heads_per_cylinder * sectors_per_track)
head = (lba // sectors_per_track) % heads_per_cylinder
sector = lba % sectors_per_track + 1 # 扇区从1开始
return (cylinder, head, sector)
# 示例:LBA 1000 转换为 CHS
print(lba_to_chs(1000)) # 输出: (1, 7, 35)
MBR(主引导记录)分区表中的CHS字段用于描述每个分区的起始和结束位置,使用传统的柱面(Cylinder)、磁头(Head)、扇区(Sector)三元组进行寻址。在MBR的16字节分区项中,分别存储了:
- 起始CHS地址(3字节:1字节磁头 + 2字节柱面/扇区组合)
- 结束CHS地址(3字节,格式相同)
其中,柱面占用10位(来自2字节中的部分位),磁头7位,扇区6位(实际用5位表示1–63)。这种编码方式最多支持:
- 柱面数:1024(0–1023)
- 磁头数:256?但受限于CHS字段仅7位磁头 → 最大128(0–127)
- 实际常用限制为:1024柱面 × 16磁头 × 63扇区
每扇区大小为512字节,因此最大可寻址空间为:
1024 × 16 × 63 × 512 = 528,482,304 字节 ≈ 504 MB
但这只是早期限制。后来通过BIOS扩展和操作系统支持,引入了“扩展INT13”规范,允许使用更大的虚拟CHS映射,最终形成业界通用的最大CHS为 1024×16×63,对应约 8.4GB 的关键瓶颈(准确为 1024×255×63×512 ≈ 8.4GB,当允许255个磁头时)。
真正导致MBR只能管理8.4GB以下硬盘的原因是:
✅ MBR本身使用CHS作为主要分区寻址方式,而其CHS字段长度有限(各3字节),无法表示更大的磁盘位置。
✅ 即使后来引入LBA,为了兼容旧系统,MBR仍需保留CHS字段,且许多BIOS和引导程序依赖这些值。
✅ 当硬盘超过CHS编码能力时,系统无法正确定位分区,导致无法识别或访问超出部分。
因此,在1990年代末期,随着硬盘容量突破8.4GB,这一限制变得不可接受,从而催生了新的解决方案:
- LBA模式:绕过CHS,直接使用线性地址。
- GPT分区表:作为EFI/GPT标准的一部分,彻底弃用CHS,支持高达ZB级容量。
- MBR的替代:虽然现代系统仍可用“保护性MBR”,但真正的分区管理已由GPT完成。
综上,MBR中的CHS字段因其固有的位数限制(尤其是10位柱面、7位磁头、6位扇区),导致最大仅能寻址约8.4GB空间,成为早期PC硬盘容量发展的硬性瓶颈。


7840

被折叠的 条评论
为什么被折叠?



