盘容量限制问题的形成以及解决方案 上

盘容量限制问题的形成以及解决方案 上 - 电脑诊所 - 电脑教程网

盘容量限制问题的形成以及解决方案 上

日期:2007-10-08   荐:
  盘容量限制问题的形成以及解决方案 上 2002-1 1957年IBM公司研制成功的IBM 350(RAMAC)是第一台真正意义上的硬盘存储器,之后经历了漫长的技术革新,于80年代初期引入PC(个人电脑),当时的容量仅为20-40M,而经过10几年的发展,硬盘的容量逐步提高,而当时一些设计上的失误就造成了今天可能出现的硬盘容量限制问题。(容量限制问题:就是系统无法完全识别或正常使用超过一定容量的硬盘) 容量限制问题的成因 要明白这个原因我们需要对IDE接口硬盘的工作方式做一个介绍,即使到现在我们今天的IDE硬盘驱动依旧使用早先的DOS-BIOS(磁盘操作系统-基本输入/输出系统)的分层结构上。它的基本工作模式就是:程序调用->DOS功能调用->文件管理设备->INT 13中断管理(读/写)->BIOS磁盘服务->IDE(ATA)接口->磁盘控制器,也就是说我们如果需要对硬盘进行操作必须通过以上的一系列步骤才能完成,那么我们以下一起来看看这一系列步骤的作用。 文件管理设备:其负责文件及其在磁盘上存储位置之间的映射关系,不过需要通过磁盘读写中断INT13执行读写命令来存储、调入文件。当新文件被保存时,文件管理器决定它在当前目录里的存储位置,在文件分配表中为这个新文件添加文件目录项,并把文件写入磁盘。当读文件时,文件管理器在FAT中找到文件在磁盘上的位置,接着就调入文件。 IDE(ATA) 接口:在介绍IDE(ATA)接口前,简单说说硬盘的结构:硬盘分为一定数量的柱面(以硬盘中心为圆心的同心圆磁迹),每个柱面都需要磁头来读写数据。另外,硬盘上的数据都是以每扇区512字节的格式存储的,所有的数据传输都是以扇区(柱面被等分的园弧磁迹)为单位的。IDE(ATA)接口是寄存器驱动式的并口总线。要传输数据,BIOS首先往IDE(ATA)里特定的寄存器写入数据的开始地址和数据传输的长度,再把有关的读/写命令往特定的寄存器里发送从而开始数据传输。 现在的硬盘一般都支持逻辑块寻址(LBA)和柱面磁头扇区寻址(CHS),我们以CHS寻址方式来举例:数据传输的开始地址是写到4个8位寄存器里的,分别是: 柱面低位寄存器 柱面高位寄存器 扇区寄存器 设备/磁头寄存器 因此,柱面地址是16位[柱面低位寄存器(8位),柱面高位寄存器(8位)]。扇区地址是8位(注意:扇区寄存器里第一个扇区是1扇区,而不是0扇区)。而磁头地址是4位(没有完全占用8位)。因此,硬盘柱面的最大数是65,536(2的16次方),磁头的最大数是16(2的4次方),扇区的最大数是255(2的8次方-1,注意刚刚我们提到的扇区寄存器问题)。所以,能寻址的最大扇区数是267,386,880 (65,536x16x255)。一扇区又是512字节,也就是说如果以CHS寻址方式,IDE硬盘的最大容量为136.9GB。LBA寻址方式,上述的总共28位可用的寄存器空间(16+8+4)被看作一个完整的LBA地址,因为包括位0(CHS里扇区不能从0开始计算),其能寻址的扇区数是268,435,456 (65,536x16x256),这时IDE硬盘的最大容量为137.4GB。 INT 13管理:INT 13管理其实也是按照寄存器的模式来设计的,它的高层即文件管理器层发布数据读写命令和有关的参数给CPU,然后触发INT 13中断的进行,激活BIOS的磁盘服务来执行数据传输。数据的开始地址被写到3个8位寄存器里,分别是: 柱面低位寄存器 柱面高位/扇区寄存器 磁头寄存器 柱面地址是10位(柱面低位寄存器占用8位、柱面高位寄存器占用2位),扇区地址为6位(8位-已经被计算过的高位寄存器的2位)。磁头寄存器为8位。因此如果这样的话:柱面的最大数是1024(2的10次方) ,磁头的最大数是256(2的8次方),扇区的最大数是63(2的6次方-1)。所以,通过INT 13管理能寻址的扇区数是16,515,072 (1,024x256x63)。一扇区是512字节,也就是说如果以CHS寻址方式,IDE硬盘的最大容量为8.456GB。LBA寻址方式能寻址的扇区数是16,777,216(1024x256x64),这时IDE硬盘的最大容量为8.601GB。 看到这里,我们应该感到硬盘容量限制的成因有了一些“眉目”了吧,那么我们具体来到底是什么让硬盘出现了所谓的限制: 528MB的容量限制: 由于早先的硬盘容量比较小,因此设计的BIOS的时候当把地址从Int 13的地址寄存器转换为IDE(ATA)的地址寄存器时,仅仅把INT 13管理中10位的柱面地址用来对应IDE(ATA)接口中的16位柱面寄存器,而把没有用到的6位(高位寄存器)地址都设定为0。并且也仅把6位的扇区地址来对应IDE(ATA)接口的8位扇区寄存器,其中没有用到的2位设置为0。并且INT 13管理的磁头寄存器4位(又去掉了4位)来对应IDE(ATA)。因此,此时的磁盘柱面最大数为1024(2的10次方),磁头的最大数是16(2的4次方),扇区的最大数是63(2的6次方-1)。因此能寻址的扇区数就成了1,032,192(1,024x16x63)。一个扇区的容量是512字节,也就是说如果以CHS寻址方式,IDE硬盘的最大容量为528.4MB。因此528MB的硬盘容量限制就出现了。 2.1GB的容量限制: 这里分为两个部分,一部分是由磁盘服务的限制造成的,另外一个是由于磁盘格式造成的,通常我们把前者称为2.1GB的硬件容量限制,后一种称为2.1GB的软件容量限制。 硬件容量硬件 当时,为了528MB容量限制的问题,人们提出一些不同的办法,其中一个办法就是INT 13服务的磁头寄存器没有用到的4位中的2位(确切的说是高2位)保留给柱面数的第11、12位使用。这样,最大的磁头数就是64(2的6次方)。但是,当时的操作系统不使用这种转换方法,其认为磁头寄存器的所有位数只可能记录磁头数。比如,为了正确地转换柱面数为2,048、磁头数为64的硬盘,就需要操作系统把柱面数除以4(512个逻辑柱面数),磁头数乘以4(256个逻辑磁头数)。不过由于BIOS中并没有开放所有的磁头数寄存器,当然无法记录这样的磁头数。因此遇到这种运行机制的BIOS,在系统自检的时候就会造成系统当机。 软件容量限制 当时DOS分区的限制是由文件分配表(FAT)决定的。FAT处理存储空间是以簇为单位的,它处理一簇的最大长度是32,768字节,最多能处理65,536个簇,如果将两个数字相乘,就会得到DOS的最大分区界限值是2,147,483,648字节或2,048MB(2,147,483,648 /1,0242)。因此超过这个容量的硬盘,如果使用FAT格式,就最大只能识别2.048GB的硬盘容量。 3.2GB的容量限制: 一些版本的BIOS不能识别超过6322柱面的硬盘,不过这种BIOS比较少见,由于柱面有限制,其最高支持扇区数为6,372,576(6322x16x63),如果乘以512扇区容量的话,其最高支持容量为6,372,576x512=3,262,758,912/1024=3.18GB。 4.2GB的硬盘容量限制: 当时一些操作系统使用8位寄存器来存储磁头数,这样当BIOS报告硬盘的磁头数等于256(最高容量)时,只有磁头数的最先一位(即0)被系统保存,从而导致硬盘配置错误。一旦硬盘的磁头数是16,柱面数大于8,192(2的13次方,由于后三位寄存器已经被磁头寄存器借用,其实这里牵涉到一个突破528MB容量限制的转换做法的问题,由于这一段比较负责,在这里就不详细介绍了,我们只要明白有这个限制就够了),系统就无法正常识别了,因此其最大的容量就被限制在了4.2GB=8192x16x63x512/1024。 8.4GB的容量限制 我们已经知道INT 13服务的寻址方式最高可以支持8.4GB以下的容量(柱面数、磁头数、扇区数的最大值分别是16,383、16和63,而三者相乘就是8.456GB)。因此,这个容量限制出现是迟早的问题了。所以,这个限制是我们目前最常遇到的容量限制。为了解决这个问题,一些厂商定义了新的扩展INT 13服务扩展标准。新的INT 13服务扩展标准不使用操作系统的寄存器传递硬盘的寻址参数,它使用存储在操作系统内存里的地址包。地址包里保存的是64位LBA地址,如果硬盘支持LBA寻址,就把低28位直接传递给ATA接口,如果不支持,操作系统就先把LBA地址转换为CHS地址,再传递给ATA接口。通过这种方式,能实现在ATA总线基础上CHS寻址最大容量是136.9 GB,而LBA寻址最大容量是137.4GB。 33.8GB的容量限制 在CHS寻址中,由于IDE(ATA)接口的限制,柱面数最高支持65,535(2的16次方-1),所以,当遇到柱面数大于65,535的时候,系统就无法识别这种硬盘了,不过LBA由于独特的寻址模式就不存在这个问题,这个容量限制具体为:65535x16x63x512/1024=33.8GB。 137GB的容量限制 相信这个问题就不用提了,目前的磁盘工作方式就注定IDE硬盘存在这个问题,前面介绍IDE(ATA)接口的时候,这个问题就已经出现了
[1] [2]  

(出处:http://www.sheup.com)


 [1] [2] 

标签: