CHS:
CHS,是英语:Cylinder-head-sector的缩写,翻译过来是:柱面-磁头-扇区。这是早期对磁盘驱动器的每一个物理数据块进行编址的一种方法。
扇区:在计算机磁盘存储器中,一个扇区(英语:sector)是磁盘或光盘上一个磁道的分区。每个扇区存储固定数量用户可访问的数据,传统上,对于硬盘驱动器(HDD)来说是512字节,对于CD-ROM和DVD-ROM来说是2048字节。较新的硬盘驱动器使用4096字节(4 KiB)扇区,这被称为Advanced Format(AF)。可以这样来理解扇区,磁盘上的每个磁道被等分为若干个弧段,这些弧段便是硬盘的扇区(Sector)。硬盘的第一个扇区,叫做引导扇区。
磁头
磁盘由许多盘片组成,每个盘有两面,每面各有一个磁头,都可记录信息。
柱面
当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道(Track)。在磁盘中,处于同一半径圆的磁道组成的一个圆柱面(Cylinder)。
在CHS规范中,磁头的最大数就是16,扇区数是63。
一个硬盘的容量=柱面数(或磁道数)×磁头数×扇区数×每个扇区的大小(通常是512字节)。
1024×16×63×512≒504MB
1024×256×63×512≒7.875GB
IDE硬盘参数的限制
|
HDD |
BIOS |
小 |
柱面(C) |
0 - 65535 |
0 - 1023 |
0 - 1023 |
磁头(H) |
0 - 15 |
0 - 254 |
0 - 15 |
扇区(S) |
1 - 255 |
1 - 63 |
1 - 63 |
最大容量 |
128GB |
7.8GB |
504MB |
EIDE(Enhanced IDE:增强性IDE)是Pentium以上主板必备的标准接口。有标准标准模式、大模式、逻辑块地址式(LBA)3种工作方式。
增强型(有时也做扩展型)IDE接口是一个在你的计算机和它的大容量存储设备之间的标准电子接口。EIDE对集成电路设备的增强使得对大于528MB(实际大小504MB)的硬盘驱动器可寻址成为可能。EIDE还提供对硬盘驱动器的快速访问,支持内存直接访问(DMA),并且通过AT附件包接口支持附加磁盘,包括CD-ROM和磁带设备。访问大于528MB(504MB)的驱动器时,EIDE (或与它一起提供的基本输入/输出系统)使用28位的逻辑字组地址(LBA) 来标明磁盘上的实际柱面,头以及数据的扇区。LBA 的28位地址提供了足够的信息来标明高达8.4 GB 容量的磁盘驱动器的每个扇区。 EIDE 在1994年被ANSI 做为一种标准采用。ANSI 把它叫做高级技术附加装置-2(它也叫做“高速硬盘接口”)。
为了兼容CHS寻址,能识别的最大容量为7.875GB,相当于LBA24bit。
LBA
逻辑区块寻址(Logical Block Address, LBA)是非常单纯的一种寻址模式﹔从0开始编号来定位区块,第一区块LBA=0,第二区块LBA=1,依此类推。这种定址模式替换了原先操作系统必须面对存储设备硬件构造的方式。最具代表性的首推CHS(cylinders-heads-sectors,磁柱-磁头-扇区)定址模式,区块必须以硬盘上某个磁柱、磁头、扇区的硬件位置所合成的地址来指定。CHS模式对硬盘以外的设备来说没什么作用(例如磁带或是网络存储设备),所以通常也不会用在这些地方。过去MFM(Modified Frequency Modulation, 改良调频式)和RLL(Run Length Limited)存储设备都曾使用CHS模式,ATA-1设备更将延伸CHS(Extended Cylinders-Heads-Sectors, ECHS)也派上了用场。
SCSI采用LBA抽象定址。实际上硬件控制器还是以CHS来定址区块,但无论驱动程序还是任何以低级访问磁盘的应用程序(例如数据库软件)通常都不再需要这个参数。各种要求区块低级访问的系统调用把定义好的LBA传给驱动程序﹔最直接的情况下(逻辑器件与实体设备单一对应)驱动程序只是将LBA再传给硬件控制器。
LBA对应与逻辑器件虚拟化
当逻辑器件是经由虚拟化或是集合所构成的,像是RAID(磁盘阵列)和SANs(Storage Area Network)这种复杂的情况,就得把应用程序根据其观点中的磁盘来指定的LBA转换成每个实体存储设备上的LBA。在复杂的分布式存储结构下,从发出要求的应用程序到实体甚至是远程设备之间,会有太多这样的LBA转换。
在容量<7.875GB的时候,CHS与LBA可以互相转换。
CHS地址可用以下公式转成LBA,
#lba=(#c*H+#h)*S+#s-1
其中,
#c、#h、#s分别是磁柱、磁头、扇区的编号
#lba是逻辑区块编号
H=heads per cylinder,每个磁柱的磁头数
S=sectors per track,每磁道的扇区数
LBA可用以下公式对应到CHS:
#c=#lba/(S*H)
#h=(#lba/S)%H
#s=(#lba%S)+1
其中,
/ 是整数除法
% 是取整数除法中的余数
请注意,当今的磁盘使用ZBR(Zone Bit Recording, 等密度记录)方式,实际的每轨扇区数得根据它是哪一轨。不过磁盘还是会提供这个参数来匹配公式,内部再自动调整。
其它公式:
#lba/S=q 余 r
#s=1+r
q/H=#c 余 #h
例如:
CHS总数=[600, 10, 84],求#lba=1234所对应的CHS编号:
1234/84=14 余 58
#s=1+58=59
14/10=1 余 4
#c=1
#h=4
#chs=(1, 4, 59)
验算: (1*10+4)*84+59-1=14*84+58=1234
LBA、ATA设备以及Enhanced BIOS
ATA-1规范中定义了28位定址模式,当成LBA或是CHS都可以。如果用CHS这28位拆成: 磁柱16位、磁头4位、扇区8位。注意CHS模式扇区是从1开始算,所以在这个规范中扇区数最多只有255个,最大扇区编号为254(0xFE)。
规范采用当时,CHS的BIOS规范只有24位: 磁柱10比特、磁头8位、扇区6比特,定义在BIOS的INT 13H软件中断里,而且已经用在DOS的MBR(Master Boot Record,主要开机记录)。这造成了BIOS CHS跟ATA CHS之间必须经过转换,否则各参数只能用到两者的最大公因数即CHS比特数={10, 4, 6},也就是1024×16×63个扇区,以每扇区512位组计算得504 MB。转换方式其一是Large模式或称Enhanced BIOS模式(又名Bit Shift Translation, 位移转换),此方式会重新对应侦测到的磁柱和磁头数而扇区数不变﹔方式其二是将头一种CHS对应到LBA之后再换算成另一种CHS机制,称为LBA-assist。
即使利用这些转址方式,BIOS定给MS-DOS逻辑扇区(以及Windows NT 4.0硬盘分区)的CHS比特数={10, 8, 6}机制顶多也只能达到7.84 GiB。
以每扇区512位组来计算,ATA-1所定义的28位LBA上限达到128 GiB。
2002年ATA-6规范采用48位LBA,同样以每扇区512位组计算容量上限可达128 Petabytes。
来源:oschina
链接:https://my.oschina.net/u/660460/blog/804708