存储装置以及该装置中的数据保存方法与流程

文档序号:11773921阅读:300来源:国知局
存储装置以及该装置中的数据保存方法与流程

本申请要求以美国临时专利申请62/319,674号(申请日:2016年4月7日)为在先申请的优先权。本申请通过参照该在先申请而包括在先申请的全部内容。

本实施方式通常涉及存储装置以及该装置中的数据保存方法。



背景技术:

存储装置、例如磁盘装置、固态硬盘(ssd)为了使来自主机系统(主机)的访问的高速化,一般具备高速缓存(cache)。高速缓存用于存储由来自主机的写入指令确定的数据(写入数据)以及根据来自主机的读取指令而从盘读出的数据。

高速缓存通常使用易失性存储器来实现。因此,存储于高速缓存的数据、也即是高速缓存数据会由于向存储装置供给的电力的切断(电源切断)而从该高速缓存中消失。

为了避免由该电源切断导致的高速缓存数据的消失、也即是为了保护高速缓存数据免受电源切断的影响,以往提出了各种方法。这些方法之一是如下方法:在电源切断时使用备用电源,将高速缓存数据保存于存在多个种类的非易失性存储部中的可以高速地访问的闪速rom那样的非易失性存储器中。使用该方法而提供的高速缓存数据保护功能也被称为断电保护(plp:powerlossprotection)功能。

但是,即便利用plp功能,也难以在可以从备用电源供给电力的时间(可以备份的时间)内非易失地保存所有的高速缓存数据。于是,要求缩短电源切断时的高速缓存数据的保存所需的时间。



技术实现要素:

本实施方式提供一种能够缩短高速缓存数据的保存所需的时间的存储装置以及该装置中的数据保存方法。

实施方式的存储装置包括非易失性存储介质、易失性存储器、多个非易失性存储器以及控制器。所述易失性存储器包含用于至少将要写入所述非易失性存储介质的写入数据作为高速缓存数据来存储的高速缓存。所述多个非易失性存储器能够以比所述非易失性存储介质快的速度进行访问。所述控制器与切断向所述存储装置的电力供给相应地将所述高速缓存内的高速缓存数据保存于所述多个非易失性存储器。所述控制器基于所述多个非易失性存储器是否处于繁忙状态来调整所述多个非易失性存储器用于保存高速缓存数据的顺序。

附图说明

图1是示出实施方式所涉及的磁盘装置的典型构成的框图。

图2是示出表示图1所示的高速缓存中的高速缓存数据存储状态的存储器映射的例子的图。

图3是示出图1所示的保存管理表的数据构造例的图。

图4是示出图1所示的目标闪速rom(from)用缺陷(defect)管理表的数据构造例的图。

图5是示出上述实施方式中的数据保存处理的典型步骤的流程图。

图6是示出数据保存处理所包含的第1保存处理的典型步骤的流程图。

图7是示出数据保存处理所包含的第2保存处理的典型步骤的流程图。

图8是用于说明数据保存处理中的目标闪速rom(from)的典型的切换以及针对目标from的典型的数据保存的图。

图9是示出在数据保存处理中保存于from的保存管理表的内容的例子的图。

图10是示出上述实施方式中的数据复原处理的典型步骤的流程图。

具体实施方式

以下,参照附图对各种实施方式进行说明。

图1是示出实施方式所涉及的磁盘装置(以下,也记为硬盘驱动器(hdd))的典型构成的框图。磁盘装置是存储装置的一例。图1所示的hdd具备:头盘组件(hda)11、驱动器ic12、控制器13、dram14、多个闪速rom(from)(例如4个from15_0至15_3)以及备用电源16。

hda11包括盘110。盘110例如是在其至少一方的面具备对数据进行磁记录的记录面的非易失性存储介质。hda11还包括头、主轴马达(spm)以及致动器等众所周知的机械要素。但是,这些要素在图1中被省略。

驱动器ic12根据控制器13(更详细而言是控制器13内的cpu133)的控制,驱动spm以及致动器。控制器13例如使用将多个元件集成于单一芯片的被称为片上系统(system-on-a-chip;soc)的大规模集成电路(lsi)来实现。控制器13包括:主机接口控制器(以下,称为hif控制器)131、盘接口控制器(以下,称为dif控制器)132以及cpu133。

hif控制器131经由主机接口20与主机装置(以下,称为主机)连接。hif控制器131受理从主机传输的指令(写入指令、读取指令等)。hif控制器131控制主机与dram14之间的数据传输。

dif控制器132控制盘110与dram14之间的数据传输。dif控制器132包含读/写通道(未图示)。读/写通道例如处理与相对于盘110的读/写相关联的信号。读/写通道通过模拟-数字转换器将从盘110读取的信号(读取信号)转换为数字数据,从数字数据解码读取数据。读/写通道另外从数字数据提取出头的定位所必需的伺服数据。读/写通道另外对写入盘110的写入数据进行编码。此外,读/写通道也可以与dif控制器132独立地设置。该情况下,dif控制器132控制dram14与读/写通道之间的数据传输即可。

cpu133是作为图1所示的hdd的主控制器发挥功能的处理器,例如包括sram134。但是,sram134也可以设置在cpu133或者控制器13的外部。cpu133依照控制程序来控制hdd内的其他要素的至少一部分。该至少一部分包括驱动器ic12、hif控制器131以及dif控制器132。

在本实施方式中,控制程序预先存储于未与from15_0至15_3不同的未图示的from(以下,称为特定from)的特定的存储区域中。但是,控制程序也可以被预先存储于from15_0至15_3中的任意一个、或者盘110、或者读取专用的非易失性存储器(例如rom)(未图示)中。特定from的存储区域的一部分预先存储有初始程序加载程序(ipl)。

cpu133例如与从hdd外部的主电源向hdd的电力供给的开始相应地执行ipl,由此,将控制程序的至少一部分加载至sram134(或者dram14)的存储区域的一部分。但是,在如本实施方式那样控制程序被存储于特定from的情况下,也可以不一定执行上述的程序加载。另外,ipl也可以例如预先存储于rom。

sram134是通常与dram14相比具有高速的访问速度的易失性存储器。sram134的存储区域的一部分用于对保存管理表135以及目标闪速rom用缺陷管理表136进行存储。但是,表135以及136也可以存储于dram14。也即是,也可以(包含控制程序的存储)取代sram134而使用dram14。

dram14的存储区域的一部分作为高速缓存140使用。高速缓存140是用于存储从主机传输的写入数据(也即是,由来自主机的写入指令确定的写入数据)的高速缓存(所谓的写入高速缓存)。dram14的存储区域的其他一部分作为用于存储从盘110读取的读取数据的高速缓存(所谓的读取高速缓存)而使用。在图1中,该读取高速缓存被省略。

from15_0至15_3是与盘110相比较能够高速地访问且可以改写的非易失性存储器。from15_0至15_3主要用于与向hdd的电力供给的切断(电源切断)相应地保存例如cpu133保存于dram14内的高速缓存140的数据(高速缓存数据)。此外,dram14以及from15_0至15_3也可以设置于控制器13的内部。

from15_0至15_3分别具备状态寄存器(未图示)。状态寄存器至少表示所对应的from的繁忙/就绪状态以及写入结果状态。繁忙/就绪状态表示所对应的from当前是处于访问工作状态(也即是,不可进行新的访问例如写入的繁忙状态)、还是该from处于非访问工作状态(也即是,可以进行新的访问例如写入的就绪状态)。写入结果状态表示所对应的from中的最新的写入工作的结果(有无错误)。

备用电源16与电源切断相应地暂时生成电力。所生成的电力被利用于将高速缓存140所存储的数据保存于from15_0至15_3中的任意一个。但是,在本实施方式中,所生成的电力也被利用于使头退回到离开盘110的部位(所谓的斜面(ramp))。

hif控制器131、dif控制器132、cpu133、dram14以及from15_0至15_3与总线137连接。总线137具有数据总线以及地址总线。在本实施方式中,cpu133为将高速缓存数据保存于from15_0至15_3,以分时方式使用总线137,逐次访问该from15_0至15_3中的任意一个。由此,在无法对from15_0至15_3同时访问的环境下,cpu133并行地执行用于针对from15_0至15_3保存数据的处理。此外,也可以不经由总线137,而from15_0至15_3单独地或者经由hif控制器131与cpu133连接。

图2示出表示图1所示的高速缓存140中的高速缓存数据存储状态的存储器映射的例子。在图2的例子中,在由高速缓存地址0至11表示的高速缓存140内的区域中存储有数据(高速缓存数据)d0至d11。高速缓存地址表示确保高速缓存140的dram14内的存储区域中的相对地址。由高速缓存地址0至11确定的高速缓存140的各区域是被称为块的一定大小(size)的区域,数据d0至d11的大小(size)也与块的大小相等。

图3示出图1所示的保存管理表135的数据构造例。保存管理表135用于将高速缓存数据的保存目的地与对应的高速缓存地址相关联地进行管理。即保存管理表135用于存储与高速缓存140的高速缓存地址p相关联地表示对应的数据dp(d[p])的保存目的地的信息(from#q/arear[q])。from#q(q为0至3中任意一个)表示from15_q,arear[q]表示from#q内的第r[q]个区域(块)。在以下的说明中,有时将from15_0至15_3也记为from#0至#3。

图4示出图1所示的目标闪速rom用缺陷管理表136的数据构造例。缺陷管理表136用于管理from15_0至15_3内的缺陷区域(area)。即缺陷管理表136用于将表示判定为缺陷的from#q内的arear[q]的信息与表示该from#q的信息q相关联地进行存储。

接下来,关于本实施方式的工作,参照图5来说明利用plp功能将高速缓存数据保存于非易失性存储器的数据保存处理。图5是示出数据保存处理的典型步骤的流程图。

cpu133监视从主电源向hdd的电力供给的状态。另外,cpu133在检测到施加于hdd的电源电压超过一定期间而成为小于一定电平(也即是,阈值)的状态的情况下,判定为电力供给的切断(也即是,电源切断)。在该情况下,cpu133启动plp功能。这样,备用电源16生成电力。在本实施方式中,备用电源16为了生成电力,使用spm的反电动势。但是,备用电源16也可以使用利用施加于hdd的电源电压来充电的电容器来生成电力。

由备用电源16生成的电力被供给至hdd内的至少驱动器ic12、控制器13、dram14以及from15_0至15_3。但是,在图1中,用于从备用电源16向驱动器ic12、dram14以及from15_0至15_3供给电力的路径被省略。

cpu133接受由备用电源16生成的电力,开始依据图5的流程图的数据保存处理。首先,cpu133对指针p、q以及r[0]至r[3]、标记f[0]至f[3]进行初始设定(a101)。即cpu133将指针p、q以及r[0]至r[3]都设定为初始值,将标记f[0]至f[3]清除。

指针p指示dram14中表示存储有应保存的高速缓存数据(更详细而言是写入高速缓存数据)的高速缓存140内的区域的高速缓存地址。将存储于由指针p(也即是,高速缓存地址p)指示的高速缓存140内的区域的数据记为d[p](或者dp)。指针p的初始值表示存储了在数据保存处理中最初应保存的数据d[p]的高速缓存140的高速缓存地址。在本实施方式中,设为指针p的初始值为0。

指针q指示应保存数据d[q]的from、即from#q(from15_q)。在本实施方式中,设为指针q的初始值为0。指针r[q](q=0、1、2、3)指示保存数据d[p]的from#q内的区域。在本实施方式中,设为指针r[q]的初始值为0。

关于标记f[q],在设置了该标记f[q]的情况下表示:在数据保存处理中,用于向from#q保存数据的工作至少已经执行了1次。另外,关于标记f[q],在清除了该标记f[q]的情况下表示:在数据保存处理中,用于向from#q保存数据的工作一次也未执行。也即是,关于标记f[q],在设置了该标记f[q]的情况下表示:自此执行的数据保存工作是首次之外的向from#q保存数据的工作。另外,关于标记f[q],在清除了该标记f[q]的情况下表示:自此执行的数据保存工作是首次向from#q保存数据的工作。在以下的说明中,有时将设置了标记f[q]的状态表示为f[q]=1,将清除了标记f[q]的状态表示为f[q]=0。

接下来,cpu133将由指针q指示的from#q选择为应保存由指针p指示的数据(高速缓存数据)d[p]的from(以下,称为目标from)(a102)。接下来,cpu133经由总线137参照目标from#q的状态寄存器,由此,检查该目标from#q的繁忙/就绪状态(a103)。另外,cpu133判定目标from#q是否处于繁忙状态(a104)。

如果,目标from#q不处于繁忙状态(a104的“否”)、即目标from#q处于就绪状态,则cpu133判断为可以进行用于向目标from#q的区域r[q]保存(写入)数据d[p]的数据保存工作。该情况下,cpu133判定是否设置了标记f[q](也即是,是否为f[q]=1)(a105)。如果设置了标记f[q](a105的“是”),则cpu133判断为自此应执行的数据保存工作是首次之外的向目标from#q保存数据的工作。另外,cpu133根据目标from#q处于就绪状态(a104的“否”),判断为针对该from#q的前次的数据保存工作已完成。该情况下,目标from#q的状态寄存器将该from#q中的前次的数据保存(写入)工作的结果表示为写入结果状态。

于是,cpu133通过参照目标from#q的状态寄存器,来检查写入结果状态(a106)。另外,cpu133基于写入结果状态,判定from#q中的前次的写入工作的结果是否错误(a107)。

如果,没有错误(a107的“否”)、即针对from#q的前次的数据保存工作未出错误地完成,则cpu133进入a108。此时,如根据以下的说明可以类推的那样,在sram134(或者dram14)内的特定的区域s[q]设定有与针对from#q的前次的数据保存工作相关的信息。该信息包含与在针对from#q的前次的数据保存工作中使用的p、q以及r[q]相等的p′、q′以及r′[q′]。

在a108中,cpu133从区域s[q]取出p′、q′以及r′[q′]的组。另外,cpu133将所取出的p′、q′以及r′[q′]的组作为与针对由当前的指针q指示的from#q(也即是,由所取出的q′指示的from#q′)的前次的数据保存工作相关的保存管理信息,存储于sram134内的保存管理表135(a109)。

在本实施方式中,保存管理表135的全部条目(entry)的内容在a101中被清除(初始化)。另外,在本实施方式中,所取出的p′、q′以及r′[q′]的组被存储为与该p′相关联的保存管理表135的条目(a109)。在该情况下,也可以仅p′、q′以及r′[q′]的组所含的q′以及r′[q′]被存储为与该p′相关联的保存管理表135的条目。也即是,保存管理信息也可以不包含与存储该保存管理信息的保存管理表135的条目相关联的p′(高速缓存地址)。另外,与本实施方式不同地,对于p′、q′以及r′[q′]的组的存储,也可以从前头开始按顺序使用保存管理表135的条目。

所存储的保存管理信息p′、q′以及r′[q′]表示存储于由高速缓存地址p′表示的高速缓存140内的区域的数据d[p′]已被保存于from#q′的区域r′[q′]中。cpu133当执行a109后,为了向目标from#q的区域r[q]保存(写入)数据d[p],执行第1保存处理(a110)。

另一方面,如果from#q中的前次的写入工作的结果为错误(a107的“是”),则cpu133从区域s[q]取出q′以及r′[q′](a111)。接下来,cpu133将所取出的q′以及r′[q′]的组作为表示from#q′的区域r′[q′]为缺陷的缺陷管理信息而存储(追加)于sram134内的缺陷管理表136(a112)。另外,cpu133为了重试针对由当前的指针q指示的from#q(也即是,由所取出的q′指示的from#q′)的前次的数据保存工作,而执行第2保存处理(a113)。

另外,如果未设置标记f[q]、也即是如果f[q]=0(a105的“否”),则cpu133判断为自此应执行的数据保存工作为首次向目标from#q保存数据的工作。该情况下,cpu133跳过a106至a109而执行第1保存处理(a110)。

以下,参照图6对第1保存处理(a110)进行说明。图6是示出第1保存处理的典型步骤的流程图。首先,cpu133开始用于下述处理的工作:读取由当前的指针p指示的高速缓存140内的数据d[p],并将该读取到的数据d[p]保存于由当前的指针q以及r[q]指示的目标from#q的区域r[q](a121)。在该情况下,目标from#q转变为繁忙状态。

接下来,cpu133将当前的指针p、q以及r[q]的组作为前次p′、q′以及r′[q′]的组,而设定于sram134(或者dram14)内的区域s[q](a122)。另外,cpu133与当前的标记f[q]的状态无关系地,设置该标记f[q](a123)。此外,也可以仅在处于标记f[q]被清除的状态的情况下(也即是a105的判定为“否”的情况下),cpu133设置(set)标记f[q]。另外,也可以仅在该情况下,在从a105至a110为止之间,cpu133设置标记f[q]。

接下来,cpu133使指针r[q]例如增加1(a124)。增加后的指针r[q]指示目标from#q的区域的下一个区域。

接下来,cpu133基于当前的指针q以及r[q],参照sram134内的缺陷管理表136(a125)。另外,cpu133判定由指针q以及r[q]指示的目标from#q的区域r[q]是否为缺陷(a126)。

如果为缺陷(a126的“是”),则cpu133返回a124,使指针r[q]再次增加。增加后的指针r[q]指示被判定为是缺陷的目标from#q的区域的再下一个区域。

与此相对,如果目标from#q的区域r[q]不是缺陷(a126的“否”),则cpu133接下来使该指针p增加(increment),以便使指针p指示存储着接下来要保存的高速缓存140内的数据的区域(a127)。另外,cpu133结束依据图6的流程图的第1保存处理(图5中的a110)。

接下来,参照图7对第2保存处理(图5中的a113)进行说明。图7是示出第2保存处理的典型步骤的流程图。首先,cpu133使指针r[q]例如增加1(a131)。增加后的指针r[q]指示在即将进行第2保存处理之前的在图5中的a107中检测到错误的(也即是,判定为缺陷的)目标from#q的区域的下一个区域。

接下来,cpu133基于当前的指针q以及r[q],参照sram134内的缺陷管理表136(a132)。另外,cpu133判定由指针q以及r[q]指示的目标from#q的区域r[q]是否为缺陷(a133)。

如果为缺陷(a133的“是”),则cpu133返回a131,将指针r[q]再次增加。增加后的指针r[q]指示被判定为是缺陷的目标from#q的区域的再下一个区域。

与此相对,如果目标from#q的区域r[q]不是缺陷(a133的“否”),则cpu133再次开始用于将由当前的指针p指示的高速缓存140内的数据d[p]保存于由当前的指针q指示的目标from#q的工作(a134)。即cpu133重试针对数据d[p]的保存失败的from#q(=q′)的数据保存工作。

在此,当前的指针p以及q分别指示在图5中的最近的a107中判定为错误的数据保存工作中使用的数据d[p]以及该数据d[p]的保存目的地的from。另一方面,在a134中保存数据d[p]的目标from#q内的区域是由在第2保存处理的a131中至少增加1次后的指针r[q]指示的区域。该目标from#q内的区域在a134的之前的a133中被判定为不是缺陷,与基于图5中的最近的a107中的错误判定而判定为是缺陷的区域不同。

cpu133当执行a134后,将设定于区域s[q]的r′[q′]变更为表示当前的r[q]。另外,cpu133结束依据图7的流程图的第2保存处理(图5中的a113)。

在此,返回图5的流程图。cpu133当执行第1保存处理(a110)后,为了目标from切换的准备而进入a114。另外,cpu133在执行了第2保存处理(a113)的情况下也进入a114。

另一方面,在目标from#q处于繁忙状态的情况下(a104的“是”),cpu133,由于该from#q的性能低,因此,判断为针对该from#q的前次的数据保存工作还未完成。在该情况下,如果cpu133等待前次的数据保存工作完成而目标from#q转变为就绪状态,则用于保存数据d[p]的工作会延迟。考虑到这点,在本实施方式中,cpu133不等待目标from#q转为就绪状态。

即cpu133判断为应通过跳过from#q在数据保存中使用的顺序,来将目标from(也即是,应保存数据d[p]的from)从该from#q变更为下一个from。于是cpu133为了目标from的切换的准备而进入a114。如下所述,所谓的from#q的下一个的from是指,如果from#q为from#0至#2中的任意一个,则为from#q+1,如果该from#q为from#3,则为from#0。

在a114中,cpu133将该指针q更新为“(q+1)mod4”,以使得指针q指示当前的目标from#q的下一个的from。众所周知,“(q+1)mod4”表示q+1除以4的情况下的余数。因此,如果指针q为0、1或者2,则该指针q被增加1,如果该指针q为3,则该指针q被设定为0。也即是,指针q以循环的方式指示from#0至3#。

接下来,cpu133判定高速缓存140内应保存的全部的数据(高速缓存数据)的保存是否完成(a115)。如果,全部的数据的保存未完成(a115的“否”),则cpu133返回至a102。即cpu133一边以循环的方式逐次确认from#0至3的状态(繁忙/就绪状态),一边重复上述处理直至全部的数据的保存完成。该处理包含:在a102中选择的from#q处于繁忙状态的情况下(a104的“是”),跳过该from#q被用于数据保存的顺序(a114、a115以及a102)。在以下的说明中,为了简略化,有时也将跳过from(from#q)被用于数据保存的顺序称为跳过from。

如果不久全部的数据的保存都已完成(a115的“是”),则cpu133将sram134(或者dram14)内的保存管理表135以及缺陷管理表136保存于from#0至#3中的任意一个、例如from#0(a116)。由此,cpu133结束依照图5的流程图的数据保存处理。保存于from#0的保存管理表135以及缺陷管理表136在下一次的hdd启动(接通电源)时,被加载至sram134(或者dram14)而使用。

此外,也可以为,保存管理表135保存于from#0至#3中的某一个,缺陷管理表136保存于from#0至#3中的另外一个。另外,保存管理表135以及缺陷管理表136也可以保存于不同于from#0至#3的from。

根据本实施方式,在依照图5的流程图的数据保存处理中,from#0至#3作为高速缓存数据保存用的目标from而以循环的方式依次被选择(a114以及a102)。但是,由于目标from的性能低,针对该目标from的前次的数据保存工作未完成,而该目标from处于繁忙状态的情况下(a104的“是”),cpu133不等待该前次的数据保存工作的完成。即cpu133跳过目标from,将该目标from的下一个的from选择为新的目标from(a114以及a102)。

如果新的目标from的性能高,则针对该新的目标from的前次的数据保存工作已近完成,该目标from处于就绪状态(a104的“否”)。在该情况下,cpu133能够立即开始针对新的目标from的新的数据保存工作(a110)。因此,根据本实施方式,能够缩短from#0至#3整体的保存工作所需的时间。

另外,在依据图5的流程图的数据保存处理中,cpu133在检测到针对from#q′(=q)的区域r′[q′]的数据保存(写入)工作的完成的情况下,检查该工作的结果(a106)。如果该结果为错误(a107的“是”),则cpu133将表示from#q′的区域r′[q′]为缺陷的缺陷管理信息存储于缺陷管理表136(a111以及a112)。

根据本实施方式,例如,在再次执行图5的流程图中示出的数据保存处理的情况下,cpu133利用缺陷管理表136(图6中的a124至a126、以及图7中的a131至a133),由此能够避免缺陷区域。即,根据本实施方式,能够自由地设定应保存数据的目标from#q内的区域r[q],因此,能够在避免缺陷块的同时高效地使用from。

接下来,对于上述的数据保存处理的具体例,除参照图2、图5以及图6之外,还参照图8进行说明。图8是用于说明目标from的典型的切换以及针对目标from的典型的数据保存的图。

图8中示出from#0(15_0)至#3(15_3)。在图8中,连接from#0至#3的箭头组81表示由指针q作为数据保存目的地(目标)而指定的from以循环的方式按from#0→from#1→from#2→from#3→

from#0→from#1→from#2→from#3→from#0→…进行切换。

在本实施方式中,from#0至#3的性能(例如,写入速度)虽然满足与hdd的标准相关的预先设定的规格,但在该规格的范围内,存在偏差。在图8的例子中,设为from#1的写入速度是其他的from#0、#2以及#3的写入速度的1/2。也即是,from#1的性能比其他的from的性能低,from#1中的数据写入所需要的时间是其他的from中的数据写入所需要的时间的2倍。

在本实施方式中,为了说明的简略化,设为:from#0至#3的各区域r[0]至r[3]不是缺陷,另外,在针对from#0至#3的数据保存工作中,未发生错误。进而,设为:图2所示的高速缓存140内的全部的数据是在数据保存处理中应保存的数据。应保存的数据包括数据d0(d[0])至d11(d[11])。在该情况下,指针p首先在图5中的a101中被设定为初始值0,之后,每当开始数据dp(=d[p])的保存(图6中的a121),在图6中的a127中被增加(在此,增加1)。由此,在图2所示的高速缓存140的例子中,指针p按顺序将数据d0、d1、d2、…指示为应保存的数据。

在图8中,箭头82表示从开始数据保存处理起的经过时间。在图8中,from#0至#3、以及数据d0至d11用矩形表示。分别表示数据d0、d4、d7以及d11的矩形配置在表示from#0的矩形内,分别表示数据d1以及d8的矩形配置在表示from#1的矩形内。该情况表示:在数据保存处理中,数据d0、d4、d7以及d11被保存于from#0,数据d1以及d8被保存于from#1。

分别表示数据d2、d5以及d9的矩形配置在表示from#2的矩形内,分别表示数据d3、d6以及d10的矩形配置在表示from#3的矩形内。该情况表示:在数据保存处理中,数据d2、d5以及d9保存于from#2,数据d3、d6以及d10保存于from#3。另外,表示数据d0至d11的矩形的与箭头82平行的边的长度表示该数据d0至d11的保存(写入)所需要的时间。

cpu133当开始图5的流程图中示出的数据保存处理时,首先,选择from#0作为高速缓存140内的数据d0的保存目的地(a102)。另外,cpu133通过检查所选择的from#0(目标from#0)的繁忙/就绪状态(a103),来判定该from#0是否处于繁忙状态(a104)。在图8中,指向数据d0的虚线的箭头表示该判定。同样地,在图8中,指向数据d1至d11的虚线的箭头表示作为该数据d1至d11的保存目的地而选择的from(目标from)是否处于繁忙状态的判定。其中,从分别表示数据d3、d6以及d10的矩形引出的虚线的箭头分别指向数据d4、d7以及d11。

在数据保存处理开始时,from#0处于就绪状态(a104的“否”)。此时,其他的from#1至#3也处于就绪状态。在from#0处于就绪状态的情况下,cpu133依照图6的流程图执行第1数据保存处理(a110),由此,开始用于向from#0的区域r[0](=0)保存数据d0的工作(a121)。

之后,cpu133与上述的数据d0的保存同样地,如图8所示那样,依次开始用于向处于就绪状态的from#1至#3的区域0(r[1]=r[2]=r[3]=0)保存数据d1至d3的工作(图6中的a121)。

之后,cpu133返回图5中的a102,选择from#0作为高速缓存140内的下一个数据d4的保存目的地,判定该from#0是否处于繁忙状态(a104)。此时,针对from#0的前次的数据保存工作、即用于向from#0保存数据d0的工作,如图8所示那样已经完成。因此,from#0处于就绪状态(a104的“否”)。另外,在用于向from#0保存数据d0的工作中,设为未发生错误(a107的“否”)。在该情况下,cpu133将表示针对from#0的区域0的数据d0的保存的p′=0、q′=0以及r′[q′]=0的组作为保存管理信息存储在与p′=0相关联的保存管理表135的条目(a108以及a109)。

于是,cpu133依照图6的流程图执行第1数据保存处理(a110),由此,开始用于向from#0的区域r[0](=1)保存数据d4的工作(a121)。之后,cpu133返回图5中的a102,选择from#1作为高速缓存140内的下一个的数据d5保存目的地。另外,cpu133,如图8中虚线的箭头83所示那样,判定from#1是否处于繁忙状态(a104)。如上述那样,from#1中的数据写入所需要的时间是其他的from中的数据写入所需要的时间的2倍。因此,from#1的前次的数据保存工作、即用于向from#1保存数据d1的工作,如图8所示那样处于未完成状态而正在继续着。也即是,from#1处于繁忙状态(a104的“是”)。

在该情况下,cpu133跳过from#1。之后,cpu133返回a102,选择from#1的下一个的from#2作为高速缓存140内的数据d5的保存目的地。

另外,cpu133如图8中虚线的箭头84所示那样,判定from#2是否处于繁忙状态(a104)。此时,from#2的前次的数据保存工作、即用于向from#2的区域0保存数据d2的工作,如图8所示那样已经完成。因此,from#2处于就绪状态(a104的“否”)。另外,在用于保存数据d2的工作中,设为未发生错误(a107的“否”)。

在该情况下,cpu133将表示针对from#2的区域0的数据d2的保存的p′=2、q′=2以及r′[q′]=0的组存储为与p′=2相关联的保存管理表135的条目(a108以及a109)。另外,cpu133依据图6的流程图执行第1数据保存处理(a110),由此,开始用于将数据d5保存于from#2的区域r[2](=1)的工作(a121)。

如上所述,from#1的性能比其他的from的性能低。在此,假设cpu133未将数据d5的保存目的地从from#1变更为from#2而等待用于向from#1保存数据d1的工作完成后再开始用于向该from#1保存数据d5的工作。在该情况下,数据d5的保存开始与本实施方式(图8的例子)相比较会延迟。

也即是,无论from#1的性能是否低,如果针对from#0至#3以循环的方式执行高速缓存数据的保存,则会导致from#0至#3整体的保存工作的延迟。该情况下,存在无法在可以备份的时间以内将全部的高速缓存数据保存于from#0至#3的可能性。

与此相对,在本实施方式中,由于from#1中的数据的保存需要时间,因而在无法将下一个数据保存于from#1的情况下,cpu133将该次的数据的保存目的地切换为下一个的from#2,而取代from#1。即cpu133跳过from#1,调整用于数据的保存的from#0至#3的顺序。由此,能够缩短from#0至#3整体的保存工作所需要的时间。

之后,cpu133返回图5中的a102,选择from#2的下一个的from#3作为高速缓存140内的下一个数据d6的保存目的地。此时,from#3的前次的数据保存工作、即用于向from#3的区域0保存数据d3的工作如图8所示那样已经完成。因此,from#3处于就绪状态(a104的“否”)。另外,在用于保存数据d3的工作中,设为未发生错误(a107的“否”)。

在该情况下,cpu133将表示针对from#3的区域1的数据d3的保存的p′=3、q′=3以及r′[q′]=0的组作为保存管理信息储存在与p′=3相关联的保存管理表135的条目(a108以及a109)。自此以下,cpu133,每次选择目标from(a102)且确认针对所选择的该目标from的前次的数据保存工作是否已正常地完成时(a104以及a107的“否”),将与该前次的数据保存工作相关的保存管理信息存储于保存管理表135(a108以及a109)。关于这些具体例,省略说明。

cpu133当执行a108以及a109后,依照图6的流程图执行第1数据保存处理(a110),由此,开始用于将数据d6保存于from#3的区域r[3](=1)的工作(a121)。之后,如图8所示,cpu133依次开始用于向from#0的区域2(r[0]=2)、from#1的区域1(r[1]=1)、from#2的区域2(r[2]=2)以及from#3的区域2(r[3]=2)保存数据d7、d8、d9以及d10的工作(a121)。

在用于向from#3保存数据d10的工作开始的时刻,用于向from#0保存数据d7的工作完成。于是,cpu133开始用于将数据d11保存于from#3的下一个的from#0的区域r[0](=3)的工作(a121)。此时,用于向from#0的下一个的from#1保存数据d8的工作,如图8所示那样未完成。与此相对,用于向from#1的下一个的from#2保存数据d9的工作,如图8所示那样已经完成。

在此,设为高速缓存140内包含数据d11的下一个应保存的数据(例如,数据d12)。在该情况下,cpu133跳过from#1,而开始用于向from#2保存数据d11的工作。

此外,cpu133在高速缓存140内应保存的全部数据的保存完成的情况下(图5中的a115的“是”),将sram134(或者dram14)内的保存管理表135以及缺陷管理表136保存于例如from#0(a116)。图9示出此时的保存管理表135的内容的例子。图9所示的保存管理表135的内容与图8所示的数据保存相对应。

在图8的例子中,from#1中的数据写入所需要的时间是其他的from中的数据写入所需要的时间的2倍。这种性能低的from#1中,仅保存有数据d0至d11中的数据d1以及d8。与此相对,在from#1以外的from、例如from#0中,保存有数据d0、d4、d7以及d11。很明显,from#0所保存的数据的量是from#1所保存的数据的量的2倍。这意味着:from#0至#3用于高速缓存数据的保存的顺序根据from#0至#3的性能而适当地被调整、也即是from#0至#3被有效地选择且访问。在图8的例子中,与等待from(尤其是from#1)中的数据保存的结束而开始下一个数据的保存工作的情况下相比较,能够将向from#0至#3保存高速缓存数据所需要的时间缩短约30%左右。

接下来,参照图10,对本实施方式中hdd接通电源(poweron)时所执行的数据复原处理进行说明。图10是示出数据复原处理的典型步骤的流程图。设为在与电源切断相应地进行了上述的数据保存处理之后,再次开始向hdd的电力供给。这样,cpu133依据图10所示的流程图,如下述那样执行数据复原处理。

首先,cpu133将在最近的数据保存处理中保存于from#0的保存管理表135以及缺陷管理表136加载至sram134(或者dram14)(a141)。接下来,cpu133对指针p进行初始设定(a142)。与数据保存处理的情况不同,指针p指示应存储从from#0至#3中任意一个读取的数据d[p]的、dram14内的高速缓存140的高速缓存地址。在本实施方式中,在数据复原处理中应用的指针p的初始值为0。

接下来,cpu133从加载至sram134(或者dram14)的保存管理表135,取得与指针p所指示的高速缓存地址p相关联的信息q以及r[q](a143)。所取得的信息q以及r[q]表示保存有数据d[p]的from#q内的区域r[q](from#q/区域r[q](arear[q]))。指针p与所取得的q以及r[q]的组与在图5中的a109中储存于保存管理表135的p′、q′以及r′[q′]的组对应。

cpu133基于所取得的信息q以及r[q],从from#q内的区域r[q]读取数据d[p](a144)。另外,cpu133将所读取的数据d[p]存储于指针p(高速缓存地址p)所指示的高速缓存140内的区域(a145)。由此,高速缓存地址p所指示的高速缓存140内的区域的内容被复原为上次电源切断发生之前的状态。

这样,cpu133使该指针p增加,以便使得指针p指示下一个应存储数据的高速缓存地址(a146)。接下来,cpu133判定保存于from#0至#3的全部数据是否被复原至高速缓存140内(a147)。在本实施方式中,基于增加后的指针p是否超过保存管理表135所存储的最大的p(=pmax),来执行a147的判定。

如果,a147的判定为否,则cpu133返回至a143,开始用于在高速缓存140中复原下一个数据d[p]的工作。不久,如果保存于from#0至#3的全部数据被复原(a147的“是”),则cpu133结束依据图10的流程图的数据复原处理。

在图9所示的保存管理表135的例子中,数据d0至d11通过上述的数据复原处理,如图2所示那样被复原至dram14内的高速缓存140中。即根据本实施方式,即便动态地变更向from#0至#3保存高速缓存数据的顺序,也能够基于保存管理表135将该保存的高速缓存数据可靠地复原至高速缓存140中。

本实施方式以存储装置为hdd的情况作为前提。但是,存储装置也可以是具有包含非易失性存储器(例如nand存储器)的群的非易失性存储介质的、如ssd那样的半导体驱动单元。

根据以上说明的至少1个实施方式,能够缩短高速缓存数据的保存所需的时间。

虽然对几个实施方式进行了说明,但这些实施方式仅是作为例子来被示出,目的不在于限定本发明的范围。实际上,在此所描述的新的实施方式可以通过各种其他方式来实施,此外,只要不脱离本发明的主旨,可以对各种实施方式进行各种省略、替换和改变。这些实施方式和/或其变形包括于发明的范围和要旨中,也包括于权利要求书所记载的发明及其等同的范围中。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1