本申请相应的美国申请为1995年2月17日提交的美国申请系列号08/390,852及1995年7月10日提交的美国临时申请系列号60/000,966的部分继续申请,这里为一切目的通过引用将它们的公开结合在此。
图1为实施本发明的计算机系统10的简化方框图。在这一高层次上例示的计算机系统配置是标准的,因而图1标识为先有技术。然而,适当地编程为实施本发明的诸如系统10这样的计算机系统则不是先有技术。按照已知的实践,计算机系统包括一个处理器12,它经由一个总线予系统15与若干处围设备连通。这些外围设备中通常包括一个存储器子系统17、一个用户输入装置20,一台显示器22及一个文件存储系统25。总线子系统15示意性地示出为一条单一总线,但一个典型的系统有若干条总线,诸如一条局部总线及一条扩展总线(诸如,ISA、EISA、MCA或PCI)。计算机系统还可以是桌面系统或便携式系统。
存储器子系统17包括若干存储器,其中有一个主随机存取存储器(RAM)30、一个存储有BIOS的只读存储器(ROM)32及用于存储系统参数的一个非易失性RAM(NVRAM)。最好将实现本发明程序存储在ROM32中。
用户输入装置20通常包括一个键盘40并且还可括一个指点装置42,诸如一个鼠标器或跟踪球。文件存储系统存储程序与数据文件,并且通常至少包括一个硬盘驱动器45及一个软盘驱动器47。并且还可有其它设备,诸如CD-ROM驱动器48及光盘驱动器。此外,该系统可包括带可拆卸的介质盒的类型的硬驱动器。
本说明书中,通常采用“总线系统”一词,意在包含使系统的各种部件互相通信的一切机构。除了输入装置及显示器,其它部件不一定在相同的物理位置上。因此,例如一部分文件存储系统可通过各种远程网络介质连接。类似地,输入装置与显示器不一定与处理器在同一位置上,虽然预计本发明将最经常实现在PC与工作站的情况中。
图2示出硬盘驱动器45的局部图。具体地,在设定了硬盘驱动器的分区之后,便在硬盘的第一物理扇区中建立与写入一张分区表。分区表的最后两个字节定义一个标记字段,它指示分区表与分区数据是否存在。标记值55AAh表示已设置硬盘驱动器的分区并已保存了分区表。在包含图与表的现在的讨论中,后缀“h”或“(h)”表示一个数的十六进制表示,而后缀“(d)”则表示一个数的十进制表示。
除了标记字段以外,分区表中包含表示多达四个分区的参数数据的四个16字节段。如果少于四个分区,便将未曾建立的分区的段设置为全零。各16字节的段包含对应的分区的范围、大小与内容。各16字节段的单个字段示出在文后的表一中。
硬盘驱动器将按照在硬盘驱动器格式化进程中所设定的参数计算分区的起始地址、结束地址、及大小。然后将这些数据值写入分区表中。
图3为按照本发明的一个实施例的自动检测的流程图。计算机系统可将利用上面提到的方法的软件存储在BIOS ROM32中,以便在引导进程中能执行该软件及自动检测硬盘驱动器的类型。
以这一实施例及将描述的其它实施例,最好向用户提供每次引导计算机时运行该自动检测程序的选择。这能通过菜单选择来提供。如果用户选定每次引导计算机时令该程序进行,则所确定的参数将用于初始化硬盘驱动器。如果用户选定在引导时不要自动运行该程序,则该程序能运行一次而将存储在NVRAM35中的参数用于以后引导时初始化硬盘驱器。从而在下面的说明中,应理解为所描述的程序操作可在引导时自动调用或响应用户命令而调用。
如上所述,硬盘驱动器的特征在于一个头参数(HP)、一个扇区/道参数(SP)及一个柱面参数(CP)。系统首先从分区表中读取数据(步骤50),并检验标记字段(步骤52)。如果这一字段中的值不是55AAh,则硬盘驱动器尚未格式化,而系统求助于其它技术来初始化硬盘驱动器(步骤53),例如利用以前由硬盘驱动器提供的省缺参数。
如果标记字段中的值为55AAh,则系统进行到从分区表中的值中计算头与扇区/道参数(步骤55)。如能从上表中看出的,分区表中包含地址信息,但并不直接提供所需要的参数。然而,一个逻辑块地址可用头与扇区/道参数以及头、扇区与柱面地址表示。逻辑块地址0对应于地址(柱面0,头0,扇区1)。计算逻辑块地址的公式如下:
逻辑块地址=(((柱面*头参数)+头)*(扇区
/道参数))+(扇区-1)
或者省略成:
LBA=(((CA*HP+HA)*SP)+(S
A-1)
其中:
LBA=逻辑块地址
CA=柱面地址
HP=头参数
HA=头地址
SP=扇区/道参数
SA=扇区地址
因而有可能用上述公式来表示起始与结束扇区地址,并导出下列两个公式:
起始地址=(((起始柱面*头参数)+起始头)*(扇区/道参数))+(起始扇区-1) (1)
结束地址=(((结束柱面*头参数)+结束头)*(扇区/道参数))+(结束头-1) (2)
还有可能直接从分区表信息中计算出起始与结束扇区地址如下:
起始地址=分区第一扇区 (3)
结束地址=(分区第一扇区)+(分区中扇区)-1
(4)
将式(3)与(4)代入式(1)与(2)得出含两个未知数的两个方程,即头与扇区/道参数,由于所有其它系数的值都是存储在分区表中的。解这两个方程提供这两个参数的值。
然后系统前进到确定柱面参数(步骤60)。在确定了柱面、头与扇区/道参数之后,便精确地识别了硬盘驱动器的类型(步骤62)。然后系统利用柱面、头与扇区/道参数的计算值初始化该硬盘驱动器(步骤65)。虽然没有精确的参数仍能初始化硬盘驱动器,但这将不可能利用硬盘驱动器的全部空间。
图4为例示确定柱面参数的方式(上述步骤60)的流程图。简言之,柱面参数是以两种方法之一确定的,取决于该硬盘驱动器是否具有与ID命令对应的类型。系统发送ID命令到硬盘驱动器(步骤70),并判定该ID命令是否被接受与执行,即是否受到响应(步骤72)。
对ID命令的响应为一块识别该驱动器的256个字的数据。这一数据中包含诸如型号、系列号、驱动器上的总空间(即总扇区数)及柱面、头与扇区/道参数的省缺值等信息。如果用户已经重新格式化了驱动器,则柱面、头与扇区/道参数的返回值将不反映该硬盘驱动器的实际状态。然而总空间并不随重新格式化改变,而表示有效与有用的数据。
如果ID命令被接受与执行,则该硬盘驱动器被识别为接受这种命令的驱动器(步骤75)。在这一情况中,从对ID命令的响应中的数据确定该硬盘驱动器的总空间(即总扇区数)(步骤77)。然后用头参数与扇区/道参数去除总扇区数而算出柱面参数(步骤80)。
如果ID命令未被接受及执行,则系统将该硬盘驱动器识别为非AT-BUS类型(步骤82)。这时将柱面参数定为分区表中的结束柱面的最大值(步骤85)。第一实例
作为第一实例,考虑具有图5的分区表的一个硬盘驱动器。在本实例中,硬盘驱动器具有接受ID命令的一个IDE(集成驱动器电子器件)接口。
如能从分区表的内容中看出的,第一分区的起始地址为125D:05BE,而第一分区的结束地址为125D:05CD。然而,第二、第三与第四分区段的内容全为0,表明重新格式化时该硬盘驱动器只利用了第一分区。分区表段的内容如文后的表二。
单一分区的起始地址为(柱面0,头1,扇区1),而结束地址为(柱面721,头12,扇区51)。因此:
起始地址=分区第一扇区=51
结束地址=分区第一扇区+分区中的扇区-1
=51+478635-1
=478685
将这两个值代入地址变换方程进行如下:
由于地址=(((柱面*HP)+头)*SP)+(
扇区-1),
51=(0·HP+1)·SP+(1-1)
473635=(721·HP+12)·SP+
(51-1)
解这两个方程得出HP=13与SP=51。
由于该硬盘驱动器具有一个IDE接口,它接受ID命令。返回的参数之一便是该硬盘驱动器的总空间。已知它为479349个扇区。
由于总扇区=CP·HP·SP
CP=总扇区/(HP·SP)
=479349/(13·51)=723
从而该硬盘驱动器的参数为:
柱面参数=723,
头参数=13,以及
扇区/道参数=51。
从这些参数中,该硬盘驱动器的类型成为已知的,并能精确地初始化该驱动器。第二实例
作为第二实例,考虑具有图6的分区表的一个硬盘驱动器。在本实例中,该硬盘驱动器为不接受ID命令的一种ST506类型。如能从分区表的内容中看出的,第一分区的起始地址为145B:05BE,第一分区的结束地址为145B:05CD,第二分区的起始地址为145B:05CE,而第二分区的结束地址则为145B:05DD。第三与第四段的内容全为0,表明该硬盘驱动器在格式化时只利用两个分区。
这两个分区的分区表段的内容如文后的表三
如表中所示,第一分区的起始地址为(柱面0,头1,扇区1),而第一分区的结束地址则为(柱面770,头4,扇区17),因此:
起始地址=分区第一扇区=17
结束地址=分区第一扇区+分区中扇区-1
=17+65518-1=65534通过将这两个值代入地址变换式而解这两个方程:
17=(0·HP+1)·SP+(1-1)
65534=(770·HP+4)·SP+
(17-1)解这两个方程得出HP=5及SP=17。
然而,由于这一硬盘驱动器为一种ST506类型,它不接受ID命令,因此不能传递硬盘驱动器的总空间,由于不知道该硬盘驱动器的总空间,便不能像第一实例中那样从硬盘驱动器的总空间中解出柱面参数。但是,有可能利用分区表中的最大结束柱面作为硬盘驱动器的柱面参数。
在本实例中,第一分区的结束柱面为770,而第二分区的结束柱面为1021。因此,MAX(1021,770)=1021,而将这一硬盘驱动器识别为具有:
柱面参数=1021,
头参数=5,以及
扇区/道参数=17另一实施例
图7为按照本发明的另一实施例的方法的流程图。许多步骤与上述步骤对应,从而采用对应的参照数字。在本实施例中,系统首先发送ID命令到硬盘驱动器(步骤70),并判定该ID命令是否被接受与执行,即有无响应(步骤72)。如果ID命令被接与执行,便将该硬盘驱动器识别为接受这种命令的驱动器而将一个标志设置为1(步骤75)。如果未接受与执行ID命令,则系统将该硬盘驱动器识别为非AT-BUS类型(步骤82)而将标志设置为0。为了明确起见,采用了值1与0,但也可采用任何一对有区别的值。事实上,该标志可以是初始设定为0的一个单元(诸如用于扇区总数的单元),并且当且仅当该硬盘驱动器响应ID命令时将一个非零数据值存储在其中。
系统从分区表中读取数据(步骤50),并检验标记字段(步骤52)。如上所述,如果该字段中的值不是55AAh,系统便不能利用分区表数据来确定柱面、头及扇区/道参数的值。然后系统检验标志(步骤90),如果标志为1,系统便利用以前响应ID命令提供的省缺参数初始化硬盘驱动器(步骤53)。如果标志不为1,系统便不能初始化硬盘驱动器(步骤92),并可选择通知用户这一事实。如果NVRAM35中存储有参数值,原则上可利用这些值,但结果可能与所期望的不同。
如果标记字段中的值为55AAh,系统便前进到从分区表中的值中计算头与扇区/道参数(步骤55),然后进行到确定柱面参数(步骤60)。已经确定了柱面、头与扇区/道参数之后,便精确地识别了硬盘驱动器的类型(步骤62)。然后系统利用计算出的柱面、头与扇区/道参数初始化硬盘驱动器(步骤65)。如图4中所示那样进行柱面参数的计算,而分支则取决于标志的值。结论
作为结论,能够看出,即使已经重新格式化了驱动器,本发明也能自动地确定硬盘驱动器的有关参数。
虽然以上是本发明的特定实施例的完整描述,但可采用各种修正,替代构造及等效物。
例如,虽然上述描述是对硬盘驱动器而言的,本发明也能用在至少一种类型的CD-ROM。CD-ROM的许多标准中,一种是由ATAPI协会制订的“可引导的CD-ROM格式规范”。ATAPI为“AT附件包接口”的缩写。它是指用于存取AT兼容计算机上的硬盘与CD-ROM驱动器的接口与协议而言。服从这一标准的CD-ROM片头(TITLE)不论各扇区的数据容量,以类似于硬盘的格式存储数据。相应地,有可能将这种CD-ROM片头用作“可更换的硬盘”。这意味着这种可更换的CD片头与硬盘相同的方式存储数据。由于不同的CD-ROM片头可能使用不同的参数值,为了访问CD-ROM片头上的数据,有必要知道头、扇区/道及柱面参数。本发明通过如上所述那样找出第一扇区、读取分区表及计算参数而使之成为可能。
因此,上述描述不应视为限制由权利要求书所定义的发明范围。
表1
参数 |
第一分区 |
可引导 |
80(h) |
起始头 |
01 |
起始扇区 |
01 |
起始柱面 |
0 |
操作系统标识符 |
06(h) |
结束头 |
0C(h)=12(d) |
结束扇区 |
B3 bits(5:0)=33(h)=51(d) |
结束柱面 |
B3 bits(7:6)+D1(h)=2D1(h)=721(d) |
分区第一扇区 |
00000033(h)=51(d) |
分区中扇区 |
00074DAB(h)=478635(d) |
表2
参数 |
第一分区 |
第二分区 |
可引导 |
80(h) |
0 |
起始头 |
01 |
01 |
起始扇区 |
01 |
C1 |
起始柱面 |
0 |
03 |
操作系统标识符 |
04 |
05 |
结束头 |
04 |
04 |
结束扇区 |
D1(h)位(0:5)=11(h)=17(d) |
17(d) |
结束柱面 |
D1(h)位(6:7)7+D2(h)=302(h)=770(d) | 3FD(h)=1021(d) |
分区第一扇区 |
00000011(h)=17(d) |
0000FFFF(h) |
分区中扇区 |
0000FFEE(h)=65518(d) |
00005357(h) |
表3
字节位移 |
字段长度 |
字段含义 |
00h |
1字节 |
00h=不可引导;80h=可引导 |
01h |
1字节 |
起始头 |
02h |
1字节 |
起始扇区 |
03h |
1字节 |
起始柱面 |
04h |
1字节 |
操作系统标识符 |
05h |
1字节 |
结束头 |
06h |
1字节 |
6位用于结束扇区;2位用于结束柱面的2个高位 |
07h |
1字节 |
结束柱面的8个低位 |
08h |
1双字 |
分区第一扇区 |
0Ch |
1双字 |
分区中扇区数 |