2.3.3 IDE磁盘【译】
现代个人计算机器磁盘是从IBM PC XT进化而来,XT的磁盘控制器位于插件卡中,控制着10MB的希捷磁盘。希捷磁盘由4个磁头,306个柱面,每个磁道有17个扇区。控制器能够操作两个驱动。操作系统读写磁盘的方式是:把参数放进CPU寄存器,然后调用PC内建只读内存中的BIOS(基本输入输出系统)。BIOS发布机器指令来加载硬盘控制器寄存器。
从控制器位于分开的板子上,到控制器和驱动紧密集成,技术的飞速发展始于20世纪70年代中期的IDE驱动(电子集成驱动器)。然而,BIOS的调用规范由于向后兼容的原因并未发生变化。调用规范通过给磁头,柱面和扇区编号来给扇区编址,磁头和柱面从0开始编号,扇区从1开始。这种选择可能是来自早期BIOS程序员犯的错误,他在8088汇编器中编写他的杰作。磁头编号有4位,扇区编号有6位,柱面有10位,最大的驱动可能有16个磁头,63个扇区和1024个柱面,合计1032192个扇区。这样一个最大的驱动能存储504MB,在当时看起来似乎是无限的,在今天肯定不是。(你会抱怨今天新买的计算机不能驾驭超过1000TB的驱动吗?)
很不幸的是,不久,504MB以下的驱动诞生了,但是它的结构是错的(比如,4个磁头,32个扇区,2000个柱面共计256000个扇区)。由于一成不变的调用规范,操作系统无法给扇区编址。就这样,磁盘控制器开始撒谎了,假装驱动结构处于BIOS的限制下,实际上把虚拟机构重新映射到物理结构上。虽然这种方法有效,但它产生了严重的破坏,操作系统不得不小心翼翼地放置数据来最小化寻址时间。
最终,IDE驱动进化成了EIDE驱动(扩展的IDE),支持第二种编址模式LBA(逻辑区块寻址),给扇区编址为从0到最大数2^28-1。这种模式要求控制器把LBA地址转化成磁头,扇区和磁道地址,但是至少它超越了504M的限制。不幸的是,它的瓶颈是2^28 * 2^9字节(128GB)。在1994年,当EIDE标准被采纳后,没人能设想到128GB的磁盘。标准委员会成员,像政治家一样,用拖字诀把问题留给下一批继任者。
EIDE驱动和控制器也有其他的改进。比如,EIDE控制器有两个通道,每个通道有一个主要驱动和一个辅助驱动。这种配置使得一个控制器最多能有四个驱动。CD-ROM和DVD驱动也是支持的,传输率从4MB每秒变成16.67MB每秒。
随着磁盘技术一直在完善,EIDE标准也继续进化,由于某些原因,EIDE的继任者被称作ATA-3(AT嵌入式接口),参考IBM PC/AT(AT指的是当时让16位CPU以8MHz运行的先进技术)。下个版本,标准被称作ATAPI-4(ATA包接口)并且速度增加到33MB每秒。在ATAPI-5中达到66MB每秒。
到现在,由28位的LBA地址产生的,128GB的限制被逐渐逼近了,所以ATAPI-6把LBA的大小改为48位。新标准还是会在磁盘变为2^48 * 2^9字节(128PB)时陷入麻烦。容量以每年50%的速度增长,48位的限制会在2035年产生。为了寻找解决办法,请翻阅本书的11版。我赌他们会把LBA改为64位。APAPI-6标准把传输速率增加到100MB每秒,并且首次提出磁盘噪音的问题。
APAPI-7标准和过去做了彻底的决裂。相比于增加驱动连接头的数量(为了增加数据传输速率),该标准使用了被称作串行ATA的技术,通过7-pin连接头,一次传输一比特,速度从150MB每秒开始,有望在未来达到1.5GB每秒。通过把老旧的80线扁平电缆替换成只有几毫米厚的圆形电缆,能增加计算机内部的空气流通。还有,串行ATA用0.5伏的电压发送信号(ATAPI-6驱动是5伏),降低了耗电。几年内,所有的计算机都会使用串行ATA。磁盘的耗电问题变得更加重要,对有着巨大磁盘高端设备如数据中心,和低端设备如笔记本电脑都是如此。