中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS疑难解答 & 问题讨论 (解答室) » [讨论] BIOS和分区软件究竟是如何确认硬盘容量的
« [1] [2] [3] »
作者:
标题: [讨论] BIOS和分区软件究竟是如何确认硬盘容量的 上一主题 | 下一主题
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 31 楼』:  

我一个245M的小硬盘在LBA
模式下工作时SPFDISK无法对它进行操作,在CHS模式下工作时SPFDISK可以对它进行操作,而且还多出了0.21M,不知道是什么原因。



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2005-10-31 11:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
DOSforever
金牌会员





积分 4633
发帖 2236
注册 2005-1-30
状态 离线
『第 32 楼』:  

你那200多兆的硬盘肯定不支持LBA寻址模式,当然只能用CHS模式了。你是接在哪台机器上的,什么版本的BIOS



DOS倒下了,但永远不死
DOS NEVER DIES !

投票调查:
http://www.cn-dos.net/forum/viewthread.php?tid=46187

本人尚未解决的疑难问题:
http://www.cn-dos.net/forum/viewthread.php?tid=15135
http://www.cn-dos.net/forum/viewthread.php?tid=47663
http://www.cn-dos.net/forum/viewthread.php?tid=48747
2005-11-1 16:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
DOSforever
金牌会员





积分 4633
发帖 2236
注册 2005-1-30
状态 离线
『第 33 楼』:  

CHS和LBA确实不是同一个算法,但我认为并不是在BIOS层面上,而是在ATA接口层面上。ATA接口的硬盘寻址寄存器(现以28bit寻址为讨论基础,48bit暂不讨论)分别用了16位,4位和8位来分别表示柱面数、磁头数和扇区数;所以,如果以CHS方式来寻址的话,最大可寻址空间为 2^16 * 2^4 * (2^8-1) = 267386880 个扇区,也就是 136,902,082,560 byte;如果把整个28位用来作表示为一个LBA的线性地址的话,那就是可寻址 2^28 = 268435456 个扇区,也就是 137,438,953,472 byte。这也就是两种方式最大可寻址空间的区别。

具体到某个硬盘是否如你计算所表达的那样我表示怀疑。还是以那块60G的硬盘为例,为了简便起见我们就以扇区为计算单位(其实都一样)。假如按照CHS模式的话,三个参数都在允许的范围以内。但假如按照LBA模式的话 0111111111111111110100110100(B) => 134,217,012(D) 所表示的扇区数已经超出这块硬盘的实际实用扇区数了。反过来,这块硬盘的最大实用扇区数为 120,103,200 (D) => 0111001010001010000100100000(B) 28bit,这个数值无论怎么分割也凑不成该模式下CHS各个参数的。

我们再把那块60G的硬盘的参数的表格扩充计算一下:

  Quote:
                            LBA Sector count: 120,103,200 sectors

                Head * Sector * Cylinder = Total Sectors | Remain | Sectors/Cylinder     
                                                                          |           |
CHS              16       255      29437     120,102,960 |    240  |             4080
                                                                          |           |
LARGE         240       255        1962     120,074,400 | 28800 |            61200
                                                                          |           |
LBA            255         63        7476     120,101,940  |  1260 |            16065


通过上面这个例子可以看出,无论哪种模式下,逻辑上的CHS参数乘积所得到的总扇区数都小于LBA(注意,此LBA非彼LBA,下面会说明)所给出的总扇区数,而且剩余的扇区数都不到该模式下每柱面的扇区数,也就是不足以构成一个柱面。因此,我认为CHS和LBA算法的不同只是表现在ATA接口层面上,而在BIOS层面上所显示出的各个模式的各个CHS参数都是以ATA接口的LBA总扇区数为基础进行换算的,而且是以柱面为单位分配的,所有这些柱面相加的总扇区数不超过LBA给出的总的扇区数,不足的部分省略。

说了那么多的LBA和CHS,我认为有必要说明一下,不然的话很可能会引起混淆

我认为有两个LBA的概念,一个是ATA层次上的 LBA ,也就是这个硬盘内部的可线性寻址的最大扇区数,我认为这就是这块硬盘的最大可用扇区数;而另一个 LBA 是指在BIOS层面上,也就是BIOS向OS报告的它的寻址模式。
同样,有两个CHS概念,一个是指 CHS模式 ,也就是BIOS的一种寻址方式;而另一个是 CHS参数 ,是所有模式下都要用到的柱面、磁头、扇区数的参数。

到此为止,我认为我们可以暂且得出一个结论,也就是我在表格下面的第一段话。对于这个结论我没有什么理论依据和实际实验来证明其正确性,只能通过纸面上的一些数据来“自圆其说”。关于两个LBA和CHS的概念也是我自己分析的结论,同样没有什么理论基础。现在,尽管还有许多细节问题没有搞清楚,比如 PC Tools 5.0 的逻辑定位问题,但我认为我们还是取得了一定的进展。真是非常感谢所有参与讨论和关注此问题的朋友,特别是 fdsiuha 。同时也希望有更多的朋友能提供试验数据和提出理论假设,也希望有功底深厚的大师能不惜赐教。

[ Last edited by DOSforever on 2005-11-1 at 16:48 ]



DOS倒下了,但永远不死
DOS NEVER DIES !

投票调查:
http://www.cn-dos.net/forum/viewthread.php?tid=46187

本人尚未解决的疑难问题:
http://www.cn-dos.net/forum/viewthread.php?tid=15135
http://www.cn-dos.net/forum/viewthread.php?tid=47663
http://www.cn-dos.net/forum/viewthread.php?tid=48747
2005-11-1 16:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fdsiuha
高级用户




积分 587
发帖 302
注册 2005-7-25
状态 离线
『第 34 楼』:  



  Quote:
但假如按照LBA模式的话 0111111111111111110100110100(B) => 134,217,012(D) 所表示的扇区数已经超出这块硬盘的实际实用扇区数了。反过来,这块硬盘的最大实用扇区数为 120,103,200 (D) => 0111001010001010000100100000(B) 28bit,这个数值无论怎么分割也凑不成该模式下CHS各个参数的

不是这个意思,LBA的存取确实把28位的寄存器作为一个统一的部分存取,但是使用这个寄存器的时候,仍然分为C、H、S这3部分相乘,其中对于更大的硬盘来说,H更大些,另外两个参数是固定的(好好想一下3个参数的物理意义);此所谓地址线性增加,非我们所见的28位寄存器的大小,从0->n,而是硬盘内部的所有扇区都有一个从小到大的编号,这样做自然是把LBA看成是具有CHS参数的硬盘,保持兼容性。

所以你上面说的的B->D转换方式是不正确的。所以后面自然就“无法自圆其说”了。


PS:另外查了所谓LARGE,无非是在INT13的两个寄存器之间相互借4位来存取更多的空间罢了,与CHS没有本质区别。还有忘了说了,就是并不是LBA方式解决500MB的限制问题。

[ Last edited by fdsiuha on 2005-11-1 at 20:29 ]



欢迎造访DOS的小屋!
http://risky.ik8.com
2005-11-1 19:21
查看资料  访问主页  发短消息 网志   编辑帖子  回复  引用回复
DOSforever
金牌会员





积分 4633
发帖 2236
注册 2005-1-30
状态 离线
『第 35 楼』:  

我们先把讨论的基础确定下来,不然的话会陷入混乱。首先我们先确定有几件事是可以肯定的。一个是一个硬盘的最大可寻址扇区数是确定的,由厂商给出。另一个是要寻址的扇区地址是经过两次转换,一次是BIOS,另一次是ATA接口。假如这两件事是可以确定的,好,我们接着讨论。

我想你所说的寄存器应该是指ATA寄存器而不是Int 13h所用的寄存器吧,假如是的话,你说LBA模式使用这个寄存器的时候仍然是3部分相乘,那么这样一来岂不是和CHS模式没有区别了吗?怎么体现它的“整体”概念和CHS本质的区别呢?

另外,我认为随着硬盘容量的增加不是 H 值的增大而是 C 值的增大,H 反而是固定的,因为表示磁头的位数最少,最容易达到饱和。

我记得好象LARGE模式是最初突破504M限制的,后来才出现LBA模式的,由于这种模式现在也不常用,所以我们就不把它纳入讨论范围了。只要能搞清楚CHS和LBA也一样。

[ Last edited by DOSforever on 2005-11-2 at 01:17 ]



DOS倒下了,但永远不死
DOS NEVER DIES !

投票调查:
http://www.cn-dos.net/forum/viewthread.php?tid=46187

本人尚未解决的疑难问题:
http://www.cn-dos.net/forum/viewthread.php?tid=15135
http://www.cn-dos.net/forum/viewthread.php?tid=47663
http://www.cn-dos.net/forum/viewthread.php?tid=48747
2005-11-2 01:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fdsiuha
高级用户




积分 587
发帖 302
注册 2005-7-25
状态 离线
『第 36 楼』:  

至于“整体”的概念,我说过了,它是硬盘内部的机制。现在的硬盘内部寻址是使用CHS的,而是把所有的扇区统统编号,直接靠这个编号来寻址。然后在硬盘的接口上它被转化为一个CHS参数。为什么要如此麻烦呢?第一,硬盘太大,里圈和外圈每道扇区数相差太大,用直接反映磁盘3维结构的CHS参数对于软件来说变化范围太大,而且不同的硬盘之间也不一样。这样做会使软件难以适应大部分的硬盘(譬如1头10柱面有128个扇区,由于你寻址到64为止,损失一半空间,在如1头1柱面只有32个扇区,由于寄存器可以寻址到64个,所以寻址就会经常出现越界),统一编号扇区后,逻辑上就只存在柱面的范围(就是盘片的直径乘密度,换句话,就是磁道密度的变化)的变化,不会越界,也不会损失空间。第二,虽然废除了CHS直接寻址,但是软件都使用固定的CHS格式来寻址,尤其微软的软件。所以对外还是要以CHS方式传递参数。

所以我的意思是:硬盘28位的寄存器,是软件和硬件之间的接口。就是当向硬盘提交了存取方式之后,硬盘内部寻址机构就会具此选择地址转换的模式。我在前面已经说过了,虽然LBA和CHS在硬盘的内部使用不同的方式寻址,所有的硬盘模式返回28位的都是CHS参数。这个转换过程由硬盘来完成,软件没有必要也操不到这个心。

LBA和CHS其实没有什么本质的区别。你去看你的电脑BIOS,它只有NORMAL、LARGE、LBA、AUTO而没有分成CHS、LBA、LARGE吧。因为LBA它就是用CHS的其中一个方式,只不过,他的28位全都可以为最大值,可以全是1。造成的影响就是每柱面的扇区多一些。

而我们以前那些所谓的限制只是由于软件-软件-软件之间的转换造成的。与CHS和LBA没有关系。只是到137G才是物理极限,新硬盘采用48位寄存器才能解决。

之后,才是软件--包括BIOS--负责接下来的工作,其中的I\O例程按照给定的C、H、S寻址,读写磁盘。

我们之所以软件看到的LBA、CHS设置以及不同的数值,只是硬盘内部按不同的寻址给出的。BIOS一般不做更进一步的变换(LARGE要稍微做一点变化,所以LARGE其实是软件实现的,因此兼容性不好)。

你还说过PC兔子的问题,不只是它,好多磁盘软件都出现过类似的问题,这种问题的根源就是地址的转换问题,就是因为它通过BIOS(通过DOS那就当然更不行了)存取磁盘。你把你现在使用的LBA或NORMAL换成NORMAL或LBA,再开机系统都启动不了,马上当机给你看--BIOS连操作系统的启动扇区都定位不到,你还能指望老版本的PC兔子能通过BIOS来做什么?我有一大把这样的DOS软件,十有八九,一打开就马上死机。


--------------------------------------------------
我的个人网站有关磁盘的详细介绍,还没做完估计到年底也做不完,唉

[ Last edited by fdsiuha on 2005-11-2 at 16:08 ]



欢迎造访DOS的小屋!
http://risky.ik8.com
2005-11-2 15:44
查看资料  访问主页  发短消息 网志   编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 37 楼』:  

关于我的小硬盘(245M)请看http://www.cn-dos.net/forum/viewthread.php?tid=17118&fpage,至于多出了0.21M是SPFDIS认出来的,不是计算出来的,200多兆的硬盘肯定支持LBA寻址模式,而且FDISK可以在LBA寻址模式分区,在外加硬盘时,pqmagic正常启动,没发现错误,也能分区。该硬盘上的DOS启动正常,就是除了在CHS模式下工作时SPFDISK正常,其他模式下工作时SPFDISK均不认识小硬盘的分区。BIOS的版本请看『第 20 楼』!



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2005-11-3 09:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fdsiuha
高级用户




积分 587
发帖 302
注册 2005-7-25
状态 离线
『第 38 楼』:  

建议联系该软件作者^^



欢迎造访DOS的小屋!
http://risky.ik8.com
2005-11-4 21:27
查看资料  访问主页  发短消息 网志   编辑帖子  回复  引用回复
zjnbwdj
中级用户




积分 300
发帖 137
注册 2005-11-4
状态 离线
『第 39 楼』:  

即便是用FDISK来分区,用SFDISK(一个我经常用的硬盘分区和格式化软件)来查看,还是有好多空闲的硬盘空间,也就是还没有100%的对硬盘进行分区.

2005-11-6 13:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
rainhard
新手上路





积分 11
发帖 6
注册 2005-11-2
状态 离线
『第 40 楼』:  CHS应该是物理方式,而LBA是模拟方式在早期兼容更大容量的

早期的BIOS/DOS在CHS方式下不支持比较大的Cylinder值,LBR就是通过算法将Cylinder值虚拟成header,LARGE也是一种虚拟的算法。
后来的BIOS和32位系统已经支持了更大的Cylinder,所以用哪种方式应都是差不多的。

2005-11-7 11:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
weilong888
银牌会员




积分 1270
发帖 548
注册 2004-5-31
状态 离线
『第 41 楼』:  

这种对硬盘的讨论是很有价值的。可惜我的认识没有各位的深刻。要知道,整台电脑,就是这硬盘上的数据最重要了。

2006-10-6 08:34
查看资料  发送邮件  发短消息 网志  OICQ (314295922)  编辑帖子  回复  引用回复
« [1] [2] [3] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: