现在的位置: 首页 > 综合 > 正文

小议计算机存储之三.硬盘的寻址方式

2013年10月26日 ⁄ 综合 ⁄ 共 2874字 ⁄ 字号 评论关闭

小议计算机存储之三.硬盘的寻址方式

草木瓜

20080420

一、前言

 上文主要介绍了硬盘的存储原理,倾向与物理层面。这篇文章内容就要关注贴近应用层的
硬盘寻址操作以及其发展的历史。

 <更多相关内容:http://blog.csdn.net/liwei_cmg/archive/2008/03/06/2154833.aspx>

二、操作系统下查看硬盘信息

 Linux:
 
 [root@liwei sysconfig]# fdisk -l

 Disk /dev/sda: 8053 MB, 8053063680 bytes
 255 heads, 63 sectors/track, 979 cylinders
 Units = cylinders of 16065 * 512 = 8225280 bytes
 
    Device Boot    Start       End    Blocks   Id  System
 /dev/sda1   *         1       892   7164958+  83  Linux
 /dev/sda2           893       974    658665   82  Linux swap
 
三、硬盘寻址的发展

 我们清晰的看到,上面显示硬盘有255个磁头(head),每个磁头按理来说都有个盘面对应,
而实际上是不可能存在的。其实我们看到的参数只是一个逻辑值,现在大部分硬盘都是单碟
单磁头。那这里的255是怎么来的,这又是一段历史。

 早期,硬盘的容量还很小的时候,人们采用与软盘类似的结构生产硬盘。即硬盘盘片的每
一条磁道都具有相同的扇区数。由此产生了著名的3D参数 (Disk Geometry): 磁头数(Heads),
柱面数(Cylinders)和扇区数(Sectors),同时也确定了相应的寻址方式(CHS寻址方式),即BIOS
INT 13h这种方法。

  磁头数(Heads):
   表示硬盘磁头数量(即盘片数据)。最大值为255,用8个二进制位存储。
  柱面数(Cylinders) :
   表示硬盘每个盘面上磁道数量。最大值为1023,用10个二进制位存储。
  扇区数(Sectors):
   表示每条磁道上扇区数量。最大值为63,用6个二进制位存储。

 然IDE/ATA接口规范与INT 13H规范并不一致。见下面列表:

    标准         用于柱面Bit数  用于磁头Bit数  用于扇区Bit数  用于定义整个结构的Bit数
IDE/ATA              16                    4                    8                    28
BIOS Int 13h        10                    8                    6                    24

 硬盘访问时,BIOS与IDE控制器对参数不做任何转换。这样物理上最多能支持(2^10) * (2^4) *
(2^6)  * 512 即1024*16*63*512大约504M的最大硬盘容量。这个方式就是物理CHS寻址,对应
的就是我们常见的BIOS NORMAL方式。

The original BIOS real-mode INT 0x13 interface supports drives of sizes up to about 504 MB
using what is commonly referred to as Physical CHS addressing.

 由于每个磁道的扇区数相等,所以外道记录密度要远低于内道,因此会浪费大量磁盘空间。
而且硬盘最大容量才504M,显然不能满足计算机行业发展要求。为解决这些问题,进一步提高
硬盘容量,人们改用等密度结构方法来生产硬盘。这样外圈磁道的扇区就比内圈磁道多了很多。
采用这种结构后,硬盘也不再具有实际3D参数,寻址方式也改为线性寻址,即以扇区为单位进
行寻址。即在物理CHS寻址方式基础上又发展了逻辑CHS寻址方式。此时磁头数只是虚拟数字
了,访问硬盘时,由IDE 控制器把由柱面、磁头、扇区等参数确定的逻辑地址转换为实际硬盘的
物理地址。这样将磁盘容量提高到(2^10) * (2^8) * (2^6)  * 512 即1024*256*63*512大约8064M。
对应的就是BIOS中常见的LBA(Logical Block Addressing)方式。

This interface was later extended to support addressing of up to exactly 8064 MB using what is
 commonly referred to as Logical CHS addressing. This limit originates from a combination of the
 register value based calling convention used in the INT 0x13 interface, and the goal of maintaining
 backward compatibility. There were originally a number of BIOS that offered incompatible versions
 of this interface, but eventually the computer industry standardized on the interface developed in
 the Award BIOS. This limit uses 1024 cylinders, 256 heads, 63 sectors, and 512 byte blocks,
 giving roughly 7.875 GB of addressing (1024 * 256 * 63 * 512).

 除LBA以外,逻辑CHS寻址方式还有一种方式LARGE。是在硬盘柱面超过1024而又不被LBA支
持时使用。LARGE 模式采用的方法是把柱面数除以2再把磁头数乘以 2,总容量不变。
 NORMAL,LBA和LARGE三种模式中目前LBA使用最多。
 
 通过上面的叙述,便知道 255 heads, 63 sectors/track, 979 cylinders 这些数据只是逻辑的,并
不是实际物理存在的。不过还有个问题,8G的硬盘容量还是太少了。为解决这个问题,厂商又推
出了扩展INT 13H规范。不过扩展INT 13H LBA通过28bit的地址定义了268435456(2 ^ 28)个扇区,
最大容量137438953472字节,大约137(硬盘厂商)/128GB。之后业内又提出了Big Drives规范将LBA
寻址中可用的寄存器空间从28bit提升到了48bit,即48bit LBA,暂时不用担心空间的问题了。

 话又说回来,我们现在的个人操作系统都是32位的,内存最大支持4G,而硬盘最大支持
(2^32/2^10/2^10/2^10)*512 G=4*512=2048 G,如不能普及64位操作系统,这个容量限制不久就会
到来。

四、结束

 其实要想深入物理寻址方式,就须要电子电路和汇编方面的知识内容,不过寻址方式也不是本系列
的真实意图。

 

 
 

抱歉!评论已关闭.