检测并修复失败指令的方法及系统的制作方法

文档序号:6612539阅读:201来源:国知局
专利名称:检测并修复失败指令的方法及系统的制作方法
技术领域
本发明有关于一种4企测并修复失败指令的方法及系统,且特别是有关于 一种检测原生指令队列的多个指令的检测并修复失败指令的方法及系统。
背景技术
存储控制器允许多个未执行的指令同时执行于一-兹盘,此种技术称为原生指令队列(native command queuing, NCQ )技术。原生指令队列可重新排 序磁盘的多个指令,以最佳化磁盘的工作负荷,并提高磁盘存取效率。请参照图IA及图IB,图1A表示传统的一原生指令队列系统的示意图, 图1B表示传统中的另一个原生指令队列系统的示意图。如图1A所示,传统 的原生指令队列110a至少包括待执行于磁盘100的第一指令101及第二指令 102。传统的原生指令队列110a中,若第一指令101存取到磁盘100中毁损 的磁区而使指令请求时间超过等待时间,则原生指令队列110a的所有指令会 被取消,因此第一指令101及第二指令102皆执行失败。然而,若第一指令 101再次发出执行要求,并与第三指令103排序于原生队列指令110b,如图 1B所示,由于第一指令101仍存取到磁盘100中毁损的磁区,因此原生指令 队列110b的所有指令会被取消而导致第一指令101及第三指令103皆执行失 败。传统的原生指令队列110a及110b中,由于第一指令101存取到毁损的 磁区,使得第二指令102及第三指令103皆执行失败,如此一来便降低系统 执行能力。此外,若第一指令101再次发出执行要求,将导致更多指令无法 正常执行,因此降低系统的可靠度及效能。发明内容有鉴于此,本发明的目的就是在提供一种检测并修复失败指令的方法及 系统,当原生指令队列的请求时间超过等待时间,则逐一执行原生指令队列 上的各个指令,并修复失败指令。 提出一种检测并修复失败指令的方法,应用于原生指令队列,并包括以下步骤步骤(a),根据原生指令队列同时执行多个 指令于一磁盘。步骤(b),测量这些指令的请求时间是否超过等待时间,若请 求时间不超过等待时间,则进行步骤(a)。步骤(c),选择这些指令之一。步 骤(d),判断选择的指令是否执行成功,若选择的指令执行成功,则进行步骤 (f)。步骤(e),修复选择的指令。步骤(f),判断是否已选择过原生指令队列 的所有指令,若未选择过所有指令,则选择这些指令中的另一个,并重复步 骤(d)。根据本发明中的另一个方面,提出一种检测并修复失败指令的系统,包 括原生指令队列及处理单元。原生指令队列具有待执行于一磁盘的多个指令。 处理单元包括第一判断单元、选取单元、第二判断单元、第三判断单元及修 复单元。第一判断单元用以判断这些指令的请求时间是否超过等待时间。选 取单元用以选择这些指令之一。第二判断单元用以判断选择的指令是否执行 成功。第三判断单元用以判断选取单元是否已选取过所有指令。修复单元用 以修复失败指令。其中,当这些指令的请求时间未超过等待时间,;兹盘同时 执行这些指令;当这些指令的请求时间超过等待时间,》兹盘执行选取单元选 择的指令;当选择的指令执行成功,选取单元依据第三判断单元决定是否自 这些指令中选择这些指令中的另一个;当选择的指令执行失败,修复单元修 复选择的指令且选取单元依据第三判断单元决定是否自这些指令中选择另 一。其中,选取单元逐次选择这些指令之一,至所有这些指令皆被选择过。为让本发明的上述内容能更明显易懂,下文特举一较佳实施例,并配合 附图,详细i^明如下


图1A表示传统的一原生指令队列系统的示意图; 图1B表示传统中的另 一个原生指令队列系统的示意图; 图2表示依照本发明较佳实施例的一种检测并修复失败指令的系统的示 意图;图3表示依照本发明较佳实施例的一种检测并修复失败指令的方法的流 程图;以及图4表示图3的检测并修复失败指令的方法的详细流程图。
主要元件符号"i兌明100、 290:磁盘101、 102、 103、 201、 202:指令 110a、 110b、 200:原生指令队列210处理单元220第一判断单元230选取单元240第二判断单元250第三判断单元260修复单元261磁盘重置单元262固件重置单元263第四判断单元264第五判断单元265第六判断单元具体实施方式
请参照图2,其表示依照本发明较佳实施例的一种检测并修复失败指令 的系统的示意图。检测并修复失败指令的系统包括原生指令队列200及处理 单元210。原生指令队列200具有待执行于;兹盘290的数个指令。于本实施 例中,这些指令例如包括第一指令201及第二指令202。磁盘290例如是以 串行式先进附力口技术(Serial Advanced Technology Attachment, SATA )为 介面的磁盘。处理单元210包括第一判断单元220、选取单元230、第二判断 单元240、第三判断单元250及修复单元260。第一判断单元220用以判断第 一指令201及第二指令202的请求时间是否超过预定的等待时间。第一判断 单元220例如是计时器。选取单元230用以选择第一指令201或第二指令202 中的其一。第二判断单元240用以判断选取单元230选择的指令是否执行成 功。第三判断单元250用以判断选取单元230是否已选择过原生指令队列200 的所有指令。修复单元260用以修复失败的指令。其中,若第一判断单元220 判断第一指令201及第二指令202的请求时间未超过等待时间,则第一指令 201及第二指令202同时执行于磁盘290。若第一判断单元220判断第一指令 201及第二指令202的请求时间超过等待时间,则选取单元230自第一指令 201及第二指令202中选择其中一个指令,且只有选取单元230选择的指令 执行于石兹盘290。若选取单元230选择的指令执行成功,则选取单元230依 据第三判断单元250决定是否自第一指令201及第二指令202中选择另一指 令。若选择的指令失败,则以修复单元260修复,并依据第三判断单元250 决定是否自原生指令队列200选择另一指令。其中,选取单元260逐次地选 择原生指令队列200的指令至所有指令皆被选择过。依照本发明较佳实施例 的检测并修复失败指令的系统,当原生指令队列200的请求时间超过等待时 间,则通过选取单元230分别选择并执行其中的一指令,如此重复地执行至 原生指令队列200的所有指令皆执行完毕,因此可避免传统的原生指令队列 系统中,由于多个指令无法执行成功所导致系统低可靠度及低效能的缺点。另外,检测并修复失败指令的系统较佳地还包括第二原生指令队列(未 表示于图中),若原生指令队列200的所有指令皆执行完毕,则检测并修复失 败指令的系统执行第二原生指令队列的多个指令。此外,选取单元230较佳地依据原生指令队列200的顺序依序地选择其 中一个指令,以降低》兹盘290的磁头旋转时间及搜寻等待时间。再者,当第二判断单元240判断选取单元230选择的指令失败,则以修 复单元260修复。倘若指令无法成功地执行,原因可能为磁盘290无法顺利 读取磁区,因此修复单元260较佳地包括一石兹盘重置单元261,用以重新启 动-兹盘290。另外,/磁盘重置单元261较佳地包括第四判断单元263,用以判 断磁盘290是否已重新启动过。此外,指令无法执行成功的原因可能为应用于磁盘290的固件(未表示 于图中)发生错误,因此修复单元260较佳地包括固件重置单元262,用以 重新启动固件。于本实施例中,固件例如是串行式先进附加技术(SATA)转 接卡的固件。另外,轫体重置单元262较佳地包括第五判断单元264,用以 判断固件是否已重新启动过。于本实施例中,修复单元260较佳地还包括第六判断单元265,用以判 断失败指令为读取(read)指令或写入(write)指令。其中,若失败指令为 读取一磁区内容的指令,则磁盘290将此磁区内容写至备援区(spare),当 有另 一指令亦读取此磁区内容时,磁盘290将磁头重新移动(remap )至备援 区以读取此磁区内容。若失败指令为写入一磁区的指令,则禁用(disable)
磁盘290。以下更配合流程图说明检测并修复失败指令的方法。请参照图3,其表 示依照本发明较佳实施例的 一种4全测并修复失败指令的方法的流程图。并请 同时参照图2的元件标号。检测并修复失败指令的方法用以检测原生指令队 列200的多个指令。于本实施例中,原生指令队列200以第一指令201及第 二指令202为例作说明。检测并修复失败指令的方法至少包括以下步骤首先,如步骤S310所示, 根据原生指令队列200同时执行第一指令201及第二指令202于石兹盘290。其次,如步骤S320所示,以第一判断单元220测量第一指令201及第二 指令202的请求时间是否超过预定的等待时间。若请求时间不超过等待时间, 则进行步骤S310。若请求时间超过等待时间,则进行步骤S330。于本实施例 中,假设第一指令201为存取至毁损磁区的指令,导致磁盘290无法回应第 一指令201的要求而使请求时间超过等待时间,即实施步骤S330。接着,如步骤S330所示,选取单元230根据原生指令队列200自第一指 令201及第二指令202中选择其中一指令,在此假设选择的指令为第一指令 201。然后,如步骤S3^所示,以第二判断单元240判断选择的第一指令201 是否执行成功。若选择的指令执行不成功,则进行步骤S350。若选择的指令 执行成功,则进行步骤S360。于本实施例中,由于第一指令201为存取至毁 损^兹区的指令而无法执行成功,因此执行步骤S350。接着,如步骤S350所示,以修复单元260修复第一指令201。其次,如步骤S360所示,以第三判断单元250判断是否已选择过原生指 令队列200的所有指令。若尚未选择过所有指令,则执行步骤S370。在此, 原生指令队列200的第二指令202尚未被选择过,因此执行步骤S370。接着,如步骤S3:70所示,以选取单元230选择原生指令队列200中的另 一个指令并重复执行步骤S340。在此,由于第二指令202尚未被选择过,因 此选取单元230选择第二指令202并重复执行步骤S340。上述检测并修复失败指令的方法根据原生指令队列的数个指令的请求时 间作依据,若超过等待时间,则分别执行各个指令并将失败的指令修复,因 此可避免传统的原生指令队列造成的系统低可靠度及低效能的缺点。此外,于本实施例中,当选取单元230选择第二指令202并重复执行步
骤S340。由于第二判断单元240判断第二指令202执行成功,因此进行步骤 S360。在此,由于原生指令队列200的所有指令皆已被选择过,因此较佳地 跟据另一原生指令队列(未表示于图中)重复进行步骤S310。藉此,可确保 原生指令队列200的所有指令皆被检查过。于本实施例中,选取单元230较佳地依据原生指令队列200的顺序依序 地选择其中一指令,因此可降低磁盘290的磁头旋转时间及搜寻等待时间。请参照图4,其表示图3的检测并修复失败指令的方法的详细流程图。 其中,于图3的步骤S340中,若选择的指令执行不成功,则执行步骤S350, 以下以图4详细说明步骤S350。在此假设欲修复的指令为第一指令201。首先,实施步骤S351,以/磁盘重置单元261重新启动^兹盘290。当第一 指令201无法成功地执行,可能由于磁盘290无法顺利读取磁区,故重新启 动》兹盘290。此外,若,兹盘290已重新启动过,则4交佳地不再重新启动一次。再者,实施步骤S352,以固件重置单元262重新启动应用于,兹盘290的 固件。由于应用于磁盘290的固件可能发生错误而导致第一指令201无法成 功地执行,因此重新启动固件。此外,若固件已重新启动过,则较佳地不再 重新启动。接着,实施步骤S353,以第六判断单元265判断第一指令201的指令型 态,若第一指令201为读取指令,则进行步骤S354;若第一指令201为写入 指令,则进行步骤S355。在步骤S354中,磁盘290将第一指令201读取的磁区的内容写至备援区。 因此当有另一指令亦读取此磁区的内容时,磁盘290将磁头移动至备援区。在步骤S355中,若第一指令201为写入指令,则禁用磁盘290。上述步骤S351-S355并非仅限制于步骤S350的实施方式,亦可仅实施 步骤S351 ~ S355的一或部分地实施步骤S351 ~ S355。此外,于完成步骤S351 后、步骤SSW后、步骤S3S4后及步骤S355后,较佳地分别以第二判断单元 240判断选择的指令是否执行成功。若选择的指令执行成功,则进行步骤 S360。本发明上述实施例所公开的检测并修复失败指令的方法及系统,当原生 指令队列的请求时间超过等待时间,则逐一地执行原生指令队列的各个指令, 藉此找出失败的指令并修复的。此外,原生指令队列的其他指令可通过分别 执行的方式成功地执行,因此至少具有提高》兹盘执行正确率、增加可靠度及
提升效能的优点。虽然本发明已以较佳实施例公开如上,然其并非用以限定本发明。任何 所属技术领域中的普通技术人员,在不脱离本发明的精神和范围的情况下, 可进行各种更动与修改。因此,本发明的保护范围以所提出的权利要求的范 围为准。
权利要求
1. 一种检测并修复失败指令的方法,应用于一原生指令队列,该方法包括下列步骤(a)根据该原生指令队列同时执行多个指令于一磁盘;(b)测量该多个指令之一请求时间是否超过一等待时间,若该请求时间不超过该等待时间,则进行该步骤(a);(c)选择该多个指令之一;(d)判断选择的该指令是否执行成功,若选择的该指令执行成功,则进行步骤(f);(e)修复选择的该指令;以及(f)判断是否已选择过该原生指令队列的所有该多个指令,若未选择过所有该多个指令,则选择该多个指令中的另一个,并重复该步骤(d)。
2. 如权利要求1所述的检测并修复失败指令的方法,在该步骤(f)中, 若已选择过所有该多个指令,则根据另一原生指令队列重复该步骤(a)。
3. 如权利要求1所述的检测并修复失败指令的方法,在该步骤(f)中, 若未选择过所有该多个指令,则依序选择该多个指令中的另一个,并重复该 步骤(d)。
4. 如权利要求1所述的检测并修复失败指令的方法,其中步骤(e)还包括(e-l)重新启动该磁盘。
5. 如权利要求4所述的检测并修复失败指令的方法,其中步骤(e-l)还 包括(e-1-1)若该》兹盘尚未重新启动过,重新启动该;兹盘。
6. 如权利要求1所述的检测并修复失败指令的方法,其中步骤(e)还包括(e-2)重新启动应用于该/磁盘的一固件。
7. 如权利要求6所述的检测并修复失败指令的方法,其中步骤(e-2)还 包括(e-2-l)若该固件尚未重新启动过,重新启动该固件。
8. 如权利要求1所述的检测并修复失败指令的方法,其中步骤(e)还包 括(e-3)判断选择的该指令,若选择的该指令为读取指令,进行步骤(e-4), 若选择的该指令为写入指令,进行步骤(e-5);(e-4)将该指令读取的内容写至该磁盘的一备援区;或 (e-5)禁用该》兹盘。
9. 如权利要求1所述的检测并修复失败指令的方法,其中该磁盘为一串 行式先进附加技术^f兹盘。
10. —种检测并修复失败指令的系统,包括 一原生指令队列,具有待执行于一磁盘的多个指令;以及 一处理单元,包括一第 一判断单元,用以判断该多个指令之一请求时间是否超过一等待时间;一选取单元,用以选择该多个指令之一; 一第二判断单元,用以判断选择的该指令是否执行成功; 一第三判断单元,用以判断该选取单元是否已选择过所有该多个指令;及一修复单元,用以修复失败指令;其中,当该多个指令的该请求时间未超过该等待时间,该磁盘同时执行 该多个指令;当该多个指令的该请求时间超过该等待时间,该》兹盘执行该选 取单元选择的该指令;当选择的该指令执行成功,该选取单元依据该第三判 断单元决定是否自该多个指令中选择该多个指令中的另 一个;当选择的该指 令执行失败,该修复单元修复选择的该指令且该选取单元依据该第三判断单 元决定是否自该多个指令中选择另一个;其中,该选取单元逐次选择该多个指令之一,至所有该多个指令皆被选 择过。
11. 如权利要求IO所述的检测并修复失败指令的系统,其中还包括另 一原生指令队列,若该选取单元已选取过该原生指令队列的所有该多 个指令,则根据另该原生指令队列执行另多个指令于该磁盘。
12. 如权利要求IO所述的检测并修复失败指令的系统,其中该选取单元 依序地选择该多个指令之一。
13. 如权利要求10所述的检测并修复失败指令的系统,其中该修复单元 还包括一-兹盘重置单元,用以重新启动该磁盘。
14. 如权利要求13所述的检测并修复失败指令的系统,其中该磁盘重置 单元还包括一第四判断单元,用以判断该-兹盘是否已重新启动过。
15. 如权利要求10所述的检测并修复失败指令的系统,其中该修复单元 还包括一固件重置单元,用以重新启动应用于该》兹盘的一固件。
16. 如权利要求15所述的检测并修复失败指令的系统,其中该固件重置 单元还包括一第五判断单元,用以判断该固件是否已重新启动过。
17. 如权利要求10所述的4企测并修复失败指令的系统,其中该^修复单元 还包括一第六判断单元,用以判断选择的该指令的信息;其中,若选择的该指令为读取指令,该磁盘将该指令读取的内容写至该 磁盘的一备援区,若该指令为写入指令,该磁盘为禁用状态。
18. 如权利要求IO所述的检测并修复失败指令的系统,其中该磁盘为一 串行式先进附加技术磁盘。
全文摘要
本发明公开一种检测并修复失败指令的方法及系统。检测并修复失败指令的方法应用于原生指令队列,并包括以下步骤步骤(a),根据原生指令队列同时执行多个指令于一磁盘。步骤(b),测量这些指令的请求时间是否超过等待时间,若请求时间不超过等待时间,则进行步骤(a)。步骤(c),选择这些指令之一。步骤(d),判断选择的指令是否执行成功,若选择的指令执行成功,则进行步骤(f)。步骤(e),修复选择的指令。步骤(f),判断是否已选择过原生指令队列的所有指令,若未选择过所有指令,则选择这些指令中的另一个,并重复步骤(d)。
文档编号G06F3/06GK101398746SQ200710161250
公开日2009年4月1日 申请日期2007年9月25日 优先权日2007年9月25日
发明者杨珽皓, 江益峰, 詹景翔 申请人:广达电脑股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1