中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-30 17:58
中国DOS联盟论坛 » DOS疑难解答 & 问题讨论 (解答室) » [讨论] BIOS和分区软件究竟是如何确认硬盘容量的 精华I 查看 15,551 回复 40
16 发表于 2005-10-27 19:52 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
20年会员
UID 42843
性别 男
来自 四川南充
状态 离线
17 发表于 2005-10-27 22:37 ·  中国 湖北 武汉 联通
高级用户
★★★
积分 587
发帖 302
注册 2005-07-25 17:31
20年会员
UID 41046
性别 男
状态 离线
硬盘发展的历史到处都找的到,而且每次硬盘发展的时候突破的限制都有详细介绍。我就不贴了。

我想说的是,这是硬件软件发展不同步的表现,就像在64位CPU上运行16位程序,其他的好多硬件都会有类似的现象。

尤其明显在硬盘上的是,硬盘参数一般是通过BIOS存取的。那么首先BIOS能够接受到的数据地址位数要比硬盘所能够提供的要相等或更大。同样,软件存取BIOS的时候,软件能够接受的数据地址位数也要大于等于BIOS。

所以,每次盘片技术的突破,都会造成已有的软件(包括固化在ROM中的)更新换代。

至于容量的差别是不同计算方法造成的,实际上都是使用28位的寄存器,并没有很大的区别,把硬盘设置成不同模式没有什么实际意义。


PS:我也使用的是80G硬盘,但是我的主板是97年买的430HX主板,通过修改BIOS硬盘模块能够支持80G已经算是个奇迹了,现在的BIOS不能手动设置,只能AUTO。

[ Last edited by fdsiuha on 2005-11-1 at 20:17 ]
欢迎造访DOS的小屋!
http://risky.ik8.com
18 发表于 2005-10-28 00:46 ·  中国 上海 电信
金牌会员
★★★★
积分 4,639
发帖 2,239
注册 2005-01-30 00:00
21年会员
UID 35785
性别 男
状态 离线
Originally posted by qwe1234567 at 2005-10-27 19:52:
Head Sector Cylinder Capacity

CHS 16 255 39236 39235

LARGE 240 255 2615 39235

LBA 255 63 9964 39235

首先,感谢你为讨论问题而采集了数据。但奇怪的是,这就是你80G的硬盘?怎么看上去象40G?而且为何所有模式下所显示的容量都相同?你的BIOS是AWARD的吗?多少版本号?
19 发表于 2005-10-28 01:21 ·  中国 上海 电信
金牌会员
★★★★
积分 4,639
发帖 2,239
注册 2005-01-30 00:00
21年会员
UID 35785
性别 男
状态 离线
Re: fdsiuha

关于这个问题我也曾在网上查找过很多资料,但几乎都差不多,也没有找到能够解释我疑惑的答案。你所说的寻址容量是 软件>BIOS>HDD ,我认为要看什么时候了,当象我们现在可以“稳定”使用的时候是这样,但当硬盘容量有所突破的时候往往是反过来的。

你所说的“至于容量的差别是不同计算方法造成的”能否举个具体的计算实例来说明这个问题。

确实,现在的大硬盘,BIOS都是能够正确的访问。但正如我前面所说的,假如我们的目的只是在于可以使用,那么我们也没必要讨论这问题了。如果从我们能够单独使用这硬盘的角度来说,设成什么模式确实没有什么意义,因为没有人会在乎这几兆容量的差别。但是当你在不同的机器上使用同一块硬盘的时候,有时候,你就会知道这个意义了。或者,一些OS安装软件在你一个已经分好区的硬盘上,把你的分区改的面目全非的,你原来的盘符都不认时候,你也会体会到这个意义了。

另外我想问一下你的BIOS怎么个不能手工设置,是没有这个选项,还是使用手工设置的话它不认?你现在升级后的BIOS是哪种版本的?版本号多少?
20 发表于 2005-10-28 07:17 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
20年会员
UID 42843
性别 男
来自 四川南充
状态 离线
我的BIOS是AWARD V6.0PG BIOS显示硬盘容量为81G,WINDOWS显示硬盘容量为76.26G,现在的BIOS为什么不能手动设置硬盘?我的BIOS可以手动设置硬盘,BIOS的日期为02/27/03。
21 发表于 2005-10-28 09:24 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
20年会员
UID 42843
性别 男
来自 四川南充
状态 离线
『第 18 楼』:
根据我的计算硬盘容量是:
CHS 81962434560 字节
LARGE 81939456000 字节
LBA 81956689920 字节
你是怎么看象40G?所有模式下所显示的容量怎么相同啦?明明不相同嘛!
22 发表于 2005-10-28 10:02 ·  中国 上海 黄浦区 电信
金牌会员
★★★★
积分 4,639
发帖 2,239
注册 2005-01-30 00:00
21年会员
UID 35785
性别 男
状态 离线
我把你在第16楼写的参数按相应的列对齐再整理一下

Head Sector Cylinder Capacity

CHS 16 255 39236 39235 (81962434560)

LARGE 240 255 2615 39235 (81939456000)

LBA 255 63 9964 39235 (81956689920)

可以看出 Capacity 一列中所显示的容量均为39235,也就是40G左右。不知你后来所说的81G是在那里显示的。括号中的数值是我按照各个模式下CHS的值分别计算出的容量,和你的计算结果完全相同,是一个80G的硬盘。但为什么在容量一列中所显示是40G,而且数值都一样呢?
23 发表于 2005-10-28 14:19 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
20年会员
UID 42843
性别 男
来自 四川南充
状态 离线
应该是这样:
Head Sector Cylinder Landing zane

CHS 16 255 39236 39235 (81962434560)

LARGE 240 255 2615 39235 (81939456000)

LBA 255 63 9964 39235 (81956689920)
81G是在上面数据是时同一个画面里显示的!Landing zane应该不是硬盘容量,我的硬盘是单碟80G的!
24 发表于 2005-10-28 15:27 ·  中国 上海 黄浦区 电信
金牌会员
★★★★
积分 4,639
发帖 2,239
注册 2005-01-30 00:00
21年会员
UID 35785
性别 男
状态 离线
那看来是你自己写错了咯,那你还跟我激动个啥!你前面和我瞎激动了几次我都没怎么和你计较了!要不是看你小子可爱,我……
你现在还写错了,应该是 zone 而不是 zane !

我再问你,你的80G容量到底是怎么显示的,难道就简单显示个“81G”?我想也不会象我们计算的那样会列出具体的数字。
25 发表于 2005-10-28 17:33 ·  中国 湖北 宜昌 电信
高级用户
★★★
积分 587
发帖 302
注册 2005-07-25 17:31
20年会员
UID 41046
性别 男
状态 离线
我的BIOS程序经过两道PATCH的,其中有一个PATCH明确指出PATCH后只能使用AUTO利用PATCH的程序检测硬盘,自己设置当场死机,或自检当机。

其实如果是老BIOS依赖CHS/LARGE/LBA选择的话,你就算在同一个机子中修改了模式,硬盘都是不能正常存取的。更不说移到其他机器上使用了。
欢迎造访DOS的小屋!
http://risky.ik8.com
26 发表于 2005-10-28 18:00 ·  中国 上海 黄浦区 电信
金牌会员
★★★★
积分 4,639
发帖 2,239
注册 2005-01-30 00:00
21年会员
UID 35785
性别 男
状态 离线
你说的对,但这个问题并不限于在老的BIOS上,实际上在所有的BIOS上都是这样的。而且我想你指的不能正常存取是指在一块已经分好区的硬盘上吧。这也正是我为什么要提出这个问题的实用性之一。因为如果大家都是只能用LBA模式的话也就没这个问题了,问题就在于它还有其它模式可选,也可以正常使用(指一旦选定一个模式)。所以我又回到了一开始的问题上来了:

这个硬盘实际的最大可用容量究竟是多少呢?那个在CHS模式下所认出的最大容量究竟是不是可靠的呢?如果在它这个模式下对硬盘的访问会不会有所损伤呢?”
27 发表于 2005-10-29 11:07 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
20年会员
UID 42843
性别 男
来自 四川南充
状态 离线
Originally posted by DOSforever at 2005-10-28 15:27:
那看来是你自己写错了咯,那你还跟我激动个啥!你前面和我瞎激动了几次我都没怎么和你计较了!要不是看你小子可爱,我……
你现在还写错了, ...

是我没有搞清楚,应该是:
Head Sector Cylinder Landing zone Capacity

CHS 16 255 39236 39235 81G (81962434560)

LARGE 240 255 2615 39235 81G (81939456000)

LBA 255 63 9964 39235 81G (81956689920)
28 发表于 2005-10-29 16:52 ·  中国 湖北 武汉 联通
高级用户
★★★
积分 587
发帖 302
注册 2005-07-25 17:31
20年会员
UID 41046
性别 男
状态 离线
其实没有担心的必要,不同的存取方式都是硬盘所能够接受的。不会说40G硬盘你发出存取80G地址的指令时候磁盘上的机械臂会移出盘片外。显示不同的容量只是硬盘上的空余空间的分配方式不一样。

我们逻辑上的多少头、多少扇、多少道,现在只是一个逻辑概念,并不是真正对应盘片上的3维结构,这个是由硬盘内部的寻址转换引起的。而且即使是在这些所谓被分配的空间之间,也不是连续的,譬如有出厂的时候被标为坏扇区的部分,也有被硬盘登记为未使用的扇区(备分以取代使用后出现的坏扇区)。这些都是硬盘的逻辑电路处理的内部问题。

除了上述的情况,事实上硬盘盘片上可用物理空间要大于实际我们使用的范围不少,很多时候机械臂也可以使磁头移到这些地方上,但是保留这些空间一般都是为了安全或其他的目的,比如所谓的磁头PARK区,不会完完全全用掉。但是这些也都是硬盘内部电路控制的,对不论什么级别的软件,都是不可见的(但是有些硬盘采用不公开的特殊的指令,可以使自己厂商的一些专业硬盘修复、检测软件进行操作)。
欢迎造访DOS的小屋!
http://risky.ik8.com
29 发表于 2005-10-30 05:08 ·  中国 上海 闵行区 电信
金牌会员
★★★★
积分 4,639
发帖 2,239
注册 2005-01-30 00:00
21年会员
UID 35785
性别 男
状态 离线
我们现在讨论的硬盘最大可用容量当然不包括它的P-LIST和G-LIST以及其它内部所用掉的扇区,我们只是讨论一个从逻辑上来讲对用户是一个“完好无损”的硬盘。实际上我记得好象从几十兆的硬盘开始,在CMOS中的CHS参数就已经不是实际的物理参数了,那时候如果手工指定参数错误是不能正常使用的。所以依照此想法,我在想,尽管你现在无论选择何种寻址模式硬盘都可以正常使用,但会不会假如我选择了一个不恰当的模式,它所寻址的各个扇区,相对与它“应有”的模式是不可靠的呢?或者前面一部分比较接近,而越往后就越是偏离“正常”位置呢?现在,我们没有一个理论根据或者实际使用经验来证明这三种模式都可以完全正常使用,也就是说无非是寻址容量有所差别罢了。如果是这样的话那太好了,看来我们都没有用足我们硬盘的最大容量,今后我们安装新硬盘设置的时候都应该选择CHS模式。根据qwe1234567提供的数据,在CHS模式下与LARGE模式竟有20多兆容量的相差 (81,962,434,560 - 81,939,456,000 = 22,978,560) ,与我们常用的LBA模式也有5兆多的相差 (81,962,434,560 - 81,956,689,920 = 5,744,640) 。即便是有人经过实践证明无论哪种模式都能够完全正常使用,也最好有人能够从理论上来解释一下为什么会造成这一现象,以及我们应该使用CHS模式来达到硬盘的最大使用容量。

这里我再讲一个有关事例:
大名鼎鼎的 PC Tools 5.0 相信各位都一定用过吧,不知你们现在手头还有没有,我还一直保留着,而且有好几种版本,呵呵(我还想以后发个贴专门讨论这件事情)。我们知道,当时它的磁盘编辑功能是很强的。在LBA寻址模式的BIOS和硬盘出现以前,它可以很方便的编辑逻辑盘的各个逻辑扇区或某一簇,以及FAT12/16系统定义的各个逻辑区域,比如可以直接跳转到BOOT区,第一个FAT扇区,第一个FDT扇区和第一个数据扇区。当突破528M容量的BIOS也就是支持LBA的BIOS出现以后, PC Tools 5.0 的磁盘编辑的定位问题来了:当我指定要它跳转到第一个FAT扇区或者第一个FDT扇区的时候,它实际跳转到的并不是该区域,也就是说它的扇区计算位置出现了错误。我想这很可能是由于 PC Tools 是按照CHS寻址模式来设计的,而实际硬盘却是按照LBA来寻址的,所以会造成这一现象。但奇怪的是后来Ext int13h出现后,这么古老的 PC Tools 反而可以正常定位了?!同样是在LBA模式下,为什么会出现两种不同的结果呢?

我举这个事例和我前面所怀疑的扇区定位问题不是一回事,前面我怀疑的是物理定位,也就是说怀疑偏离了扇区的真正的物理位置,而这个例子我认为是逻辑定位问题,也就是说某个扇区的物理位置没错,但不是我要找的扇区。当然,还有可能随着要找的扇区位置的后移,同时具有逻辑定位的偏差和物理位置的偏差。
30 发表于 2005-10-31 10:48 ·  中国 湖北 武汉 联通
高级用户
★★★
积分 587
发帖 302
注册 2005-07-25 17:31
20年会员
UID 41046
性别 男
状态 离线
哎呀哎呀

CHS和LBA不是同一个计算方法...
28位的寄存器是这样的(就以你前面的60G硬盘为例子):
CHS和LBA分别为:
10000/111 11111/11001011111101
11111 111/11111/11110100110100
因为CHS是C、H、S三个不同寄存器,所以每个寄存器都分别规定最大值,其中的磁头固定为10000。
但是LBA是整个28位全都作为一个整体传送给BIOS,所以可以是2^28=137G。

在这个计算容量的过程中,LBA容量的增量为
LBA=255(磁头,固定)*63(扇区,固定)*512/1024=8032.5K
也就是说,磁盘的最小单位为8M。
这样的好处就是,用户不用知道自己的CHS参数究竟是多少,直接转换为线性地址了(修改:这句话说的%$^&@#,让人误解,其实是我想说的是“这样的好处就是,用户不用知道自己的CHS参数究竟是多少,因为它是由线性地址直接转换而来的”)

但是CHS的计算方法不是这样,因为是对应物理参数(当然后来也是硬盘内部的地址转换),所以,他的所有3个寄存器的值都是可以变动的,这样计算出来的值当然与LBA有微小差别(8M以下),就算是现在前两个寄存器达到最大(现在的所有硬盘所使用的方式),其增量为
CHS=16(磁头,固定)*255(扇区,固定)*512=2040K
与LBA的增量不一样。

这样,一个固定的磁盘空间要同时表示为两个互不能相约的参数,只能牺牲一点(<6M)磁盘空间的寻址了,由于线性寻址的普及,那么这个工作统一由磁盘的内部电路来完成。

你所谓的用CHS达到最大空间的利用率,确实有道理,毕竟LBA的最小增量大一些,容易留下“边角料”。但是LBA是更为先进的性质,尤其是运行在系统级的软件,将逐渐抛弃CHS方式,而且对于现在120G、160G甚至更大的硬盘,<6M的空间没有什么意义,而且以后可能还会采用更大单位的储存方式。另外LBA虽然同样有137G限制,但是它表示地址范围的大一些(最大容量比CHS多500MB左右),而且极其容易的扩展到更大的空间。

至于LARGE我还没有资料,不知道它的工作方式,不好说

[ Last edited by fdsiuha on 2005-11-1 at 20:23 ]
欢迎造访DOS的小屋!
http://risky.ik8.com
论坛跳转: