专利名称:数据处理方法和装置的制作方法
技术领域:
本发明涉及一种数据处理方法和一种数据处理装置。具体地说,它涉及这样一种数据处理方法和数据处理装置,它们最好是用于例如完成数据发送和接收的IC(集成电路)卡或类似装置中。
已经研制出一种IC卡(智能卡),期望在电子货币系统或保安系统中找到应用。
该IC卡把用于实现各种处理的CPU(中央处理单元)与处理所必须的存储数据用存储器或类似装置集成到一起,其中的数据发送和接收是在IC卡进入与预定读出器/写入器(R/W)接触状态时实现的。
另一方面,有一种自身不带电池的无电池型IC卡,其电源是由R/W单元向IC卡提供的。
再有,有一种IC卡完成该IC卡与R/W单元之间的数据发送与接收,但通过使用电磁波使IC卡与R/W单元没有物理接触,该IC卡还从电磁波中获得必要的电源。
然而,当在没有物理接触的IC卡和R/W之间发送和接收数据时,如果在访问IC卡的存储器的同时,接收电磁波失败,因而不能得到足够的电源,这时便会发生称作存储器讹误(memory corruption)的问题,而且在存储器中的数据当中发生兼容性缺陷。
再有,当使IC卡与R/W接触借以发送和接收数据时,在用户能自由地向R/W插入或从R/W拔出IC卡的情况下,如果在访问存储器的同时从R/W中拔出IC卡,则也会发生存储器讹误。
当数据被存放在存储数据单元(在MS-DOS情况下为扇区)中时,例如在MS-DOS(微软磁盘操作系统)(注册商标)的文件分配表(FAT)中,如果在FAT中发生存储器讹误,数据(文件)的所有位置信息会丢失,于是数据不能被访问。
因此,当发生存储器讹误时,在最坏的情况下,IC卡不能被使用,所以需要某种对策来克服这种存储器讹误。
对付这一问题的一种方法会是这样保留来自紧挨着的前一场合和两个场合以前的数据,并把来自两个场合以前的数据更新为新数据,这样,即使数据不能被满意地更新(当来自两个场合之前的数据是被破坏数据时),来自紧挨着的前一个场合的数据仍会保持下来。
然而,当这样做时,例如如果在来自两个场合以前的数据正在被更新时供电停止,就会出现一种不稳定情况,此时不可能读出被更新的数据,因为被读的数据可能是正确的,或者不正确的,或者是立即前一个场合的数据。
考虑这种情况,本发明提供了一种方法,它总能保证稳定地读出一个数据。
根据本发明的信息处理方法和装置的特点在于一个存储器包括数据区用于以块为单元存储数据以及第一和第二区用于存储多个块号,这些块号是赋予数据区中各块的,数据被写入数据区中的一块,该块对应于存储在第一和第二区之一中的一个块号,已被写入数据的块的块号被存储在第一和第二区中的另一个区中,而在第一和第二区之一中的数据被抹掉。
本发明的特点还在于该存储器还可以包括一个区按所述块单元存储数据,一个指针区用于存储多个赋予数据区中各块的块号,以及第一和第二区用于存储多个赋予指针区中各块的块号。数据被写到指针区中一块的块号,该块号对应于存储在第一和第二区之一中的块号,并写入数据区中的相应块。已被写入数据的块的块号被存储在指针区的一块中,在指针区中被存储的该块的块号被存储在第一和第二区中的另一个区,而在第一和第二区之一中存储的数据被抹掉。
图1是应用本发明的非接触卡系统的一种形式的典型结构。
图2是图1中的读出器/写入器1的典型结构的方框图。
图3是图1中的IC卡2的典型结构的方框图。
图4A-4C是描述本发明基本原理的图。
图5A-5E是描述本发明基本原理的图。
图6是描述读处理的流程图,这个读处理与具有图4A-4C所示结构的存储器有关。
图7是描述写处理的流程图,这个写处理与具有图4A-4C所示结构的存储器有关。
图8显示出应用单指针系统的存储器的典型结构。
图9显示出应用该单指针系统的存储器的典型结构。
图10是描述由单指针系统进行读处理的流程图。
图11是描述由单指针系统进行写处理的流程图。
图12显示应用双指针系统的存储器的典型结构。
图13显示应用该双指针系统的存储器的典型结构。
图14是描述由双指针系统进行读处理的流程图。
图15是描述由双指针系统进行写处理的流程图。
图16显示当由双指针系统完成数据读时图3所示EEPROM 66的典型结构。
图17A和17B显示一个物理块的典型结构,该物理块是有效性确定块。
图18A和18B显示组成指针区的各物理块的举例。
图1显示应用本发明的非接触卡系统的一种形式的典型结构。
非接触卡系统由R/W1,IC卡2及控制器3组成,利用电磁波在非接触状态在R/W1和IC卡2之间发送和接收数据。就是说,R/W1向IC卡2发送一个预定命令,IC卡2接收这个命令并根据该命令进行处理。再有,IC卡2根据处理结果向R/W1发送响应数据。
R/W1通过一个预先确定的接口(例如遵守RS-485A规范或类似规范的接口)与控制器3相连,控制器3通过向R/W1提供预定控制信号来完成预定处理。
图2显示图1中的R/W1的典型结构。
在IC21中,用于处理数据的DPU(数据处理单元)31、用于处理发送到IC卡2的数据及从IC卡2收到的数据的SPU(信号处理单元)32、用于与控制器3通信的SCC(串行通信控制器)33以及存储器单元34通过总线相连,存储器单元34由预先存储处理数据所需信息的ROM41及在处理过程中暂时存储数据的RAM42组成。
再有,存储预定数据的闪速(flash)存储器22也连到总线上。
DPU31向SPU32输出一个向IC卡2发送的命令,并从SPU32接收来自IC卡2的响应数据。
SPU32根据向IC卡2发送的命令完成预定的处理(例如BPSK(双相移键控法)调制)并把它输出给调制电路23,从解调电路25接收由IC卡2发送的响应数据,并完成对数据的预定处理(如BPSK)。
调制电路23调制一个由振荡器26提供的预定频率(例如13.56MHz)的载波,该载波被来自SPU32的数据进行ASK(幅移键控法)调制,调制电路23通过天线27以电磁波形式向IC卡2输出被调制的波。在这种情况下,调制电路23以小于1的调制度完成ASK调制。就是说,即使当数据为低电平,被调制波的最大振幅也不会为零。
解调电路25解调通过天线27收到的被调制波(ASK调制波)并向SPU32输出解调后的数据。
图3显示图1所示IC卡2的典型结构。在IC卡2中,IC51接收由R/W1发送来的被调制波。电容器52包括一个LC电路和天线53,并与具有预定频率(载波频率)的电磁波同步(谐振)。
在IC51中,RF接口单元61在其ASK解调单元81中检测和解调经由天线53收到的被调制波(ASK调制波),并向BPSK解调电路62及PLL(锁相环)单元63输出被解调的数据。在电压调整器82中,被ASK解调单元81检测到的信号被稳压并作为直流电源提供给各种电路。
在RF接口单元61中,振荡电路83产生一个频率与数据时钟频率相同的信号并输出到PLL单元63。
RF接口单元61的ASK解调单元84通过改变天线53的负载来调制经天线53收到的被调制波,这是IC卡2的电源(例如,预定的开关元件根据数据切换到ON/OFF(通/断),而预定的负载只当开关元件为ON(通)时才平行连接于天线53),对应于从计算单元64提供的数据,而这个被调制分量通过天线53发送给R/W1(R/W1的天线27的终端电压被改变)。
PLL单元63从ASK解调单元81所提供的数据中产生一个与数据同步的时钟信号,并把该时钟信号输出到BPSK解调电路62和BPSK调制电路68。
当被ASK解调单元81解调出的数据是被BPSK调制的数据时,BPSK解调电路62根据PLL单元63提供的时钟信号完成数据的BPSK解调,并把被解调的数据输出到计算单元64。
当由BPSK解调电路62提供的数据是被编码数据时,计算单元64在编码器/解码器单元92中对数据解码并在序列发生器91(数据写单元)(块号写单元)(第一和第二块号写单元)中处理数据。再有,当数据不是被编码数据时,由BPSK解调电路62提供的数据被直接提供给序列发生器91而不受编码器/解码器单元92处理。
序列发生器91完成与作为命令向它提供的数据相对应的处理。就是说,例如序列发生器91向EEPROM66(存储器单元)写入数据或从中读出数据。
计算单元64的奇偶检验计算单元93从要存储在EEPROM66中的数据或从已存储在EEPROM66中的数据计算Reed-Solomon代码作为奇偶检验位。
再有,在序列发生器91中完成预定处理后,计算单元64向BPSK调制电路68输出对应于该处理的响应数据(用于向R/W1发送的数据)。
BPSK调制电路68对来自计算单元64的数据进行BPSK调制,并把调制过的数据输出到RF接口电路61的ASK调制单元84。
ROM65存储要被序列发生器91执行的处理程序或其他必要的数据。RAM67暂时存储在处理过程中的数据之类。
EEPROM66是一个非易失存储器,即使在IC卡2已结束与R/W1的通信并停止电源之后,它仍继续存储数据。
下面将解释R/W1和IC卡2之间的数据发送与接收。
R/W1(图2)从天线27发送预定的电磁波,监测天线27的负载状态,并等待直至检测到由于IC卡2的临近造成的负载状态的变化。
在这种情况下,R/W1可以通过发送由具有预定短模式(pattern)的数据进行ASK调制的电磁波和呼叫IC卡2来完成重复处理(定时询问),直至在固定的时间间隔内得到IC卡2的响应为止。
在R/W1中,当检测到IC卡2的临近时,R/W1的SPU32完成由要发送给IC卡2的数据进行的BPSK调制(这些数据包括与要由IC卡2完成的处理相对应的命令和被写入IC卡2的数据等),并以具有预定频率(例如数据时钟频率的2倍)的矩形波作为载波,并向调制电路23输出被调制波(BPSK调制信号)。
在BPSP调制中,能通过差分变换使数据对应于被调制波的相位变化,在这种情况下,由于即使BPSK调制信号被反向,其BPSK调制的信号也能被解调为原始数据,所以不需要考虑被调制波的极性。
调制电路23完成对预定载波的ASK调制,其调制度(=数据信号最大幅度/载波最大幅度)小于1(例如0.1),并通过天线27向IC卡2发送被调制波(ASK调制波)。
当不进行传输时,调制电路23产生一个例如具有数字信号二电平(高电平和低电平)的高电平的被调制波。
在IC卡2(图3)中,由R/W1的天线27发射的电磁波的一部分在天线53和电容52组成的LC电路中被转换成电信号,该电信号(被调制波)被输出到IC51的RF接口61。然后,RF接口61的ASK解调单元81通过对被调制波进行整流和平滑来完成包络检测,并把由此形成的信号提供给电压调整器82,通过抑制信号中的直流分量来提取数据信号并把数据信号输出到BPSK解调电路62和PLL单元63。
电压调整器82对ASK解调单元81提供的信号进行稳压,产生直流电源提供给各种电路。
在这种情况下,天线53的终端电压V0由例如下列方程表示V0=V10(1+kVs(t))cos(ωt)这里V10 cos(t)代表载波,k指定调制度,而Vs(ωt)代表从SPU32输出的数据。
再有,由ASK解调单元81整流的电压V1的低电平值VLR由例如下式表示VLR=V10(1+k(-1))-Vf在此式中,Vf代表在ASK解调单元81中构成完成整流和平滑的整流电路的二极管处的电压降,其值一般为0.7伏左右。
当电压调整器82收到被ASK解调单元81整流和平滑的信号时,该信号被稳压并作为直流电源提供给各种电路,包括计算单元64。由于被解调波的解调度“k”小于1,故在解调后的电压涨落(高电平和低电平之差)是小的。所以能在电压调整器82中容易地产生直流电源。
例如,当接收到调制度“k”为5%的被调制波时,如果V10为3伏或更高,则在整流后的低电平电压VLR是2.15(=3(1-0.05)-0.7)伏或更高,所以电压调整器82能提供足够高的电压作为各种电路的电源。再有,在这种情况下,在整流后的电压V1的交流分量(数据分量)幅值2kV10(峰-峰值)是0.3(=2×0.05×3)伏或更高,因此ASK解调单元81能以足够高的信噪比(S/N)解调数据。
这样,利用调制度“k”小于1的ASK调制波能实现低差错率(具有高信噪比)的通信,并向IC卡2提供足以做为电源的直流电压。
一旦收到来自ASK解调电路81的数据信号(BPSK调制信号),BPSK解调电路62便根据PLL单元63提供的时钟信号解调数据信号,并把被调制过的数据输出到计算单元64。
如果由BPSK解调电路62提供的数据是加密的,则计算单元64在编码器/解码器单元92中对数据解码,并把数据(命令)提供给序列发生器91。在这期间,即在把数据传送给IC卡2之后,R/W1在发出值为1的数据后等待一段时间,直至收到对它的响应。所以在这段时间里IC卡2收到有恒定最大幅度的被调制波。
在已结束处理之后,序列发生器91向BPSK调制电路68输出关于处理结果之类的数据(用于向R/W1发送的数据)。BPSK调制电路68以与R/W1的SPU32类似的方式对数据进行BPSK调制,然后该电路向RF接口单元61的ASK调制单元84输出数据。
ASK调制单元84根据要传送的数据,通过利用开关元件使连到天线53两端的负载发生变化,来对所收到的被调制波进行ASK调制(如前所述,当IC卡2传送数据时,由R/W1输出的被调制波最大幅度是常数)。于是R/W1的天线27的终端电压被改变,于是数据被传送到R/W1。
另一方面,当从IC卡2收到数据时,R/W1的调制电路23继续发送值为1(高电平)的数据。由IC卡2发送的数据被解调电路25从天线27的终端电压的很小变化(例如几十微伏)中检测出来,该天线27是与IC卡2的天线53电磁耦合的。
在解调电路25中,被检测到的信号(ASK调制波)被高增益放大器放大并被解调,作为解调结果所得到的数字信号被输出到SPU32。SPU32解调数据(BPSK调制信号)并把它输出到DPU31。DPU31处理来自SPU32的数据并根据处理结果确定是否要终止通信。再有,当确定要再次进行通信时,则如上述情况那样,在R/W1和IC卡2之间完成通信。
另一方面,当确定要终止通信时,R/W1终止与IC卡2的通信处理。
如前所述,R/W1利用调制度“k”小于1的ASK调制来向IC卡2发送数据。IC卡2接收该数据,完成对应于该数据的处理,并向R/W1回送对应于处理结果的数据。
接下来解释IC卡2(图3)的序列发生器91向EEPROM66写数据和从EEPROM66读数据的处理过程。然而,作为准备措施,首先要解释根据本发明对付存储器讹误的一种方法。
首先,将解释对付存储器讹误的方法的基本原理。
例如,假定对存储器读、写信息是由预定的块单元完成的,并考虑存于某块B1的数据被更新的情况(存于块B1中的数据被其他数据重写)。
在这种情况下,当新数据被写入(覆盖写到已存储的数据上)到块B1本身时,如果在写操作过程中向IC卡供电失效,则新数据不能被完全写入,于是引起存储器讹误。
当要被写入块B1的数据被实际写入块B1时发生存储器讹误,则系统不能对付它。就是说,例如,如果当存储在块B1中的数据是电子货币的余额或类似物,进行了新的购物,在减去购物钱之后的剩余之和作为新数据按上述方法写入,如果此时发生了存储器讹误,则IC卡不能被使用。
因此,要被写入块B1的新数据被写入不同于块B1的块B2。这样,如果当把新数据写入块B2的过程中发生了存储器讹误,则新数据不能被完全写入,于是它的有效性不能保证,但至少是已存储在块B1中的数据能免于被破坏。最后,在向块B2写入数据完成之后,存储在块B1中的数据被抹掉。
当提供甚至是更加新的数据时,这数据被写入不同于块B2的块,例如块B1。这样,当提供新数据时,新数据被写入到与紧挨着的前一个场合被写入数据的那个块不同的块中。所以,至少是在紧挨着的前一个场合所写入的数据免于受写入新数据的破坏,而且即使在最坏的情况,IC卡仍能被使用。
接下来参考图4A和4B来解释应用上述原理的对存储器读、写数据的方法。
在图4A和4B中,一块包括11个字节,其中1字节(8个二进制位)为新旧程度信息,8字节为数据,2字节为有效性信息,它们从前端起顺序排列。然而,1块中的位数以及分配给新旧程度信息、数据和有效性信息的位数都不特别限定于上述数量。
新旧程度信息指示该块存储内容的新旧程度。例如,可以使用绝对日期和时刻,或一个顺序数或类似量。当使用绝对日期和时刻时,在这种情况下存储数据的日期和时间便作为新旧程度信息被存储,于是能从新旧程度信息中检测出存储数据的最新块。再有,当使用顺序数时,在这种情况下,例如当每个数据被写入的场合便把一个增量数作为新旧程度信息存储起来,具有最大值的块便是写入数据所用的最新的一块。
这里,如果能识别至少两个块当中哪一个是新的,这就足够了。因此新旧程度信息至少应能代表三个状态。就是说,例如当假定使用0、1、2三个值作为能代表三个状态的新旧程度信息时,每次数据被写入两块中的这一个或那一个,0、1、2、0…可以被写入作为数据写入块的新旧程度信息。在这种情况下,当两块的新旧程度信息为0和1时,有1的块为较新的块,当它们为1和2时,有2的块为较新的块,而当它们为2和0时,则有O的块为较新的块。当使用0、1、2这三个值以这种方式作为新旧程度信息时,只需要二个二进制位。另一种作法是,例如可以使用三个标志作为新旧程度信息,每个标志有一个二进位,每当数据被写入块时,和标志联系在一起的二进制位可以相继地改变。
这里,在下文中将使用0、1、2三个值作为新旧程度信息。
其次,有效性信息指明眼下的新旧程度信息和数据的有效性(有效或无效),涉及该块的新旧程度信息和数据的写入是否是正常完成的,对此,可使用RS(Reed-Solomon)代码或类似代码。
有效性信息不限于RS代码之类错误校正码。就是说,如果有效性信息能表明有效性信息和数据是有效或无效(如前面描述的那样),便也就足够了,该有效性信息可以是例如在写新旧程度信息和数据时计算出的奇偶检验码,或者可以是例如1位的标志,它是在正确写入新旧程度信息和数据之后添加的。
在图4A和4B中,向存储器提供二个块,它们是第一区和第二区。图4A所显示的情况中数据01H至08H(H代表一个16进制数)已经被写入第一区块,而在第二区块中的数据已被抹去。
在这种情况下,假定例如提供了11H至18H作为新数据,首先,通过参考有效性信息来确定第一和第二区这两个块的有效性。这里,假定只有第一区块是有效的。
在写新数据的情况中,如前所述,为了防止在紧挨着的前一个场合写入的数据被破坏,新数据被写到这样的一块,其中数据尚未被记录。因此,在这种情况下,如图4(B)所示,数据11H至18H被写到第二区块。在完成写数据11H至18H之后,首先,向其写数据的块的新旧程度信息被更新。就是说,由于曾是最新块的第一区块的新旧程度信息被指定为01H,现在刚刚已经写入数据的第二区块的新旧程度信息被指定为02H,它是对01H增量1得到的,然后完成写有效性信息,它表示新旧程度信息02H的有效性。
最后,在对第二区块的全部写完成之后,记录在第一区块的全部数据被抹掉,例如如图4C所示。
接下来,参考图6和图7的流程图更详细地描述在具有图4所示结构的存储器中的数据读/写处理过程。
首先,将参考图6的流程图来描述读处理过程。
首先,在步骤S1,通过访问第一和第二区的有效性信息,确定有效性。当在步骤S1确定只有第一区的块有效时,该例程进入步骤S2并从第一区(它是有效块)读数据,于是过程终止。再有,当在步骤S1确定只有第二区的块有效时,该例程进入步骤S3,并从第二区(它是有效块)读数据,于是过程终止。当确定第一和第二两区的块都无效时,IC卡2的硬件寿命到了尽头,读处理不能完成(进行错误处理)。
接下来,将参考图7解释写处理过程。
在这种情况下,与图6中步骤S1的情况类似,在步骤S11中确定有效性。当第一和第二两区都无效时,IC卡2发生了致命错误,例如由于寿命结束,于是进行错误处理。在步骤S11,当确定第一区块有效时,例程进入步骤S12,并确定是无效块的第二区中的数据是否已被完全抹掉。当确定这数据尚未被完全抹掉时,例程进入步骤S20,当确定这数据已被完全抹掉时,例程进入步骤S13。在步骤S20,在第二区(它是无效块)中的数据被完全抹掉,于是例程进入步骤S13。
在步骤S13,新数据连同新旧程度和有效性信息被写入(更新)到其中数据被抹掉的第二区块,于是例程进入步骤S14。在步骤S14,第一区块中的数据被抹掉。
在步骤S11,当确定第二区块有效时,例程进入步骤S15,并确定是无效块的第一区中的数据是否已被完全抹掉。当确定这数据尚未被完全抹掉时,例程进入步骤S22,当确定这数据已被完全抹掉时,例程进入步骤S16。在步骤22,在第一区(它是无效块)中的数据被完全抹掉,于是例程进入步骤S16。
在步骤S16,新数据连同新旧程度和有效性信息被写入(更新)到其中数据被抹掉的第一区块,于是例程进入步骤17。在步骤17,第二区块中的数据被抹掉。
如果例如在抹掉旧数据之前或当在步骤S14或S17中抹掉旧数据期间供电失败,则可能发生旧数据仍未被抹掉或只有一部分数据被更新,从而如图5A所示奇偶检验恰好是正确的,而发生了存储器讹误。在这种情况下,在步骤S11两块中的数据被确定是有效的,于是例程进入步骤S18。
在步骤S18,当确定第二区比第一区新时,例程进入步骤S21,数据连同其新旧程度和有效性信息被再写到新块(此时新块是第二区),例如如图5B所示,然后例程进入步骤S22。接下来在步骤S22,以前述同样的方式,在第一区(它不是最新块)中的数据被抹掉(例如如图5C所示),例程进入步骤S16。
在步骤S16,新数据连同其新旧程度和有效性信息被写到(更新)其中数据已被抹掉的第一区块,然后例程进入步骤S17。在步骤S17,第二区块中的数据被抹掉,例如如图5E所示。
在步骤S18,当确定第一区比第二区新时,例程进入步骤S19,数据连同其新旧程度和有效性信息被再写到新块(此时新块是第二区)。然后例程进入步骤S20。接下来在步骤S20,以前述同样方式,在第二区(它不是最新块)中的数据被抹掉,例程进入步骤S13。在步骤S13,新数据连同其新旧程度和有效性信息被写入(更新)到其中数据被抹掉的第二区块,然后例程进入步骤S14。在步骤S14,第一区块中的数据被抹掉。
每次读数据时,通过允许有足够的时间用于记录,从而避免了数据被认为是正确或不正确这种不稳定状态。由于上述处理,抹掉第一区或第二区意味着可得到足够的时间用于在另一剩余区间中记录。所以可以避免读这一被记录数据时出现不稳定状况。
从外部看,第一和第二区这两个块被识别为同样的逻辑块。具体地说,第一和第二区块是物理上存在的两个物理块,而这些物理块被分别赋予物理块号,这些块号是标识物理块的唯一号码。第一和第二区的物理块的物理块号被做成对应于用来识别逻辑块的同一逻辑块号,利用这一逻辑块号由外部识别第一和第二区的物理块。
在下述内容中,物理块号和逻辑块号都假定由一字节表示。
在上述情况中,在完成对一物理块的数据写入之后,该物理块的新旧程度信息和有效性信息都被更新,所以当多个相关的数据被写入多个物理块时,可能会产生新旧数据的混合。从外部看来,如果在把多个数据写入多个逻辑块时发生了存储器讹误,虽然在存储器讹误发生之前写入新数据的逻辑块中存在新数据,但从发生存储器讹误的逻辑块到如果未曾发生存储器讹误则新数据会已经写入的逻辑块这一范围内存在旧数据。
在多个相关的数据作为整体是有意义的因而数据整体是有用的这样一种情况下,如前所述,当新数据和旧数据混合存在于多个相关数据中时,便不能建立起兼容性。就是说,例如有这样一种情况多个相关联的数据是上火车的车站和时间,下火车的车站和时间,以及上下火车的两车站之间的车费,那么,如前所述,当被写入的新数据是关于上车的车站,而关于上车的时间仍为旧数据,这样便不能建立起兼容性,因此数据是无意义的。
因此,在把多个数据写入多个逻辑块的情况中如果在写这多个数据完成之前发生存储器讹误,则从外部看来,必须在这个逻辑块中存在多个相关联数据中的所有旧数据。
因此,一个存储器具有例如图8所示的结构。
就是说,存储器包括存储数据用的数据区物理块,以及第一和第二区物理块,用于存储构成数据区所用物理块的物理块号。
再有,在与图4和图5的情况相似的图8中,一个物理块由11个字节组成。
由数据区组成的各物理块把数据存储在这些11字节单元中,而在图8中,数据区由8个物理块组成,分别被赋予#00H到#07H作为物理块号(#代表物理块号)。
在这种情况中,当从外部看时,4个逻辑块是可见的,并有%00H至%03H被分配给这4个逻辑块的每一个作为逻辑块号。在图8所示状态中,逻辑块号%00H至%03H被做成分别对应于物理块号#00H至#03H。
在第一和第二区的物理块中,头一个字节被分配给新旧程度信息,而最后两个字节被分配给有效性信息,这是图4所示共同特征。然而,在新旧程度信息和有效性信息之间的8个字节中安排是数据区中物理块的物理块号,即指向构成数据区的各物理块的指针。
在第一和第二区的新旧程度信息和有效性信息之间的8字节中,数据区的目标块的物理块号被安排在头4个字节中,而数据区的更新块的物理块号被安排在后4个字节。
在本文的上下文中,目标块是指信息应被写入的物理块。就是说,例如,根据前述基本原理,当存储在块B1中的数据被新数据重写时,新数据被写入块B2,但在这种情况下,块B1是新数据应被写入的块,因此块B1对应于目标块。
更新块是指当信息被写到一个物理块而其存储内容被更新时被用来进行更新的物理块。就是说,例如,根据基本原理,当存储在块B1中的数据被新数据重写时,块B2被实际写入新数据,因此块B2对应于更新块。
在第一和第二区的新旧程度信息和有效性信息之间的8个字节的头4个字节中安排的4个物理块号被做成对应于逻辑块号。就是说,例如,从其第一到第四字节的物理块号分别对应于逻辑块号%00H至%03H。
再有,在图8中,第一和第二区的物理块号分别被赋予#FE或#FF。
在具有上述结构的存储器中,在图8中,4个相关联的数据被存储在物理块#00H(有物理块号#00H的物理块)至#03H中,而其物理块号#00H至#03H被按此顺序安排在第一区中新旧程度信息和有效性信息之间的8个字节的前4个字节中(下文中将恰当地称作指向数据区中目标块的指针列)。
因此,例如观察第一区,物理块号#00H至#03H被做成分别对应于逻辑块号%00H至%03H。
在这种情况中,观察第一区,被做成对应于逻辑块%00H(逻辑块号为%00H的逻辑块)至%03H的物理块#00H至#03H中的任何一个都应是可访问块,即目标块。
更新块可以是在那时不构成目标块的物理块,或者可以说是空闲区。
相应地,在图8中,观察第一区,物理块#04H至#07H可以是更新块。更新块的物理块号#04H至#07H被安排在第一区的新旧程度信息和有效性信息之间的8个字节中的后4个字节(下文中将恰当地称作指向数据区的更新块的指针列)。
现在,例如假定第一和第二区中只有第一区是有效的,而从外部向对应于逻辑块号%00H和%02H的逻辑块做出了写两个相关联数据的请求。
在这种情况中,通过访问指向有效第一区中的数据区的目标块的指针列,识别出了对应于逻辑块号%00H和%02H的物理块号#00H和#02H,而物理块#00H和#02H被识别出作为要写入两个相关联数据的目标块。
再有,通过访问指向这第一区的数据区的更新块的指针列,识别出更新块的物理块号为#04H和#05H,它们的块号等于目标块的块号。例如,从指向数据区的更新块的指针列的左侧依次识别出更新块的物理块号。
本应写入作为目标块的物理块#00H或#02H的两个数据结果被分别写入作为更新块的物理块#04H或#05H,如同图9所示。
在这种情况中,图9所示状态是要写入对应于逻辑块号%00H至%02H的物理块号#00H和#02H的两个数据分别假定为40AH至4AH和50AH至5AH,这些数据被分别写入作为更新块的物理块#04H和#05H。
然后,被写入新数据的作为更新块的物理块的物理块号#04H和#05H被写入到指向无效的第二区中数据区的目标块的指针列。就是说,指向第一区中数据区的目标块的指针列被复制到第二区,并且如图9所示,目标块的物理块号#00H或#02H被分别重写成数据被实际写入的更新块的物理块号#04H或#05H。结果,观察第二区,物理块号#04H和#05H被分别做成对应于逻辑块号%00H或%02H,而物理块号#00H或#02H曾被做成对应于这两个逻辑块号。
再有,曾要被写入数据的物理块#00H和#02H现在变成了更新块,而物理块号#00H和#02H被写到指向无效的第二区中的数据区的更新块的指针列中。就是说,指向第一区中的数据区的更新块的指针列被复制到第二区,而且如图9所示,曾写入数据的物理块的物理块号#04H或#05H分别被目标块的物理块号#00H或#02H所重写。结果,观察第二区,物理块#00H和#02H变成更新块。
在如前所述更新第二区之后,与图4所示情况类似,第二区中的新旧程度信息和有效性信息依次被写入(重写),然后第一区中的数据被完全抹掉。
所以在这种情况中,除非在第二区中完成了写入指向数据区中目标块的指针列,否则不会被写入指明其有效性的有效性信息。就是说,在上述情况中,除非完成了对两个逻辑块%00H和%02H二者写入数据,否则不会向第二区中写入指明其有效性的有效性信息。
结果,如果在数据正在写入两个逻辑块%00H和%02H的时间区间内引起了存储器讹误,只有第一区仍然有效,那么通过访问有效的第一区,存储在物理块#00H和#02H(它们曾分别被做成对应于逻辑块%00H和%02H)中的数据被从逻辑块%00H和%02H中读出。
所以,当作为多个数据存储在逻辑块%00H和%02H的两个数据是彼此相关联的数据时,即使当发生存储器讹误时,也不仅能保持单个数据的兼容性,而且能保持两个数据之间的兼容性。
接下来,将参考图10和图11的流程图,进一步解释在具有图8和图9所示结构的存储器中数据的读、写处理过程。
首先,将参考图10的流程图来描述读处理。
在这种情况中,首先在步骤S31中完成与图6中的步骤S1中类似的确定处理。
当第一区为有效时,例程进入步骤S32,而当第二区为有效时,例程进入步骤S34。
在步骤S32,通过访问指向第一区中数据区的目标块的指针列,识别出了一个对应于要读数据的逻辑块号(这个逻辑块号例如是由外部提供的)的物理块号,即作为指向一个目标块的指针的物理块号,然后例程进入步骤S33。在步骤S33,从对应于在步骤S33中识别出的物理块号的物理块中读出数据,于是处理过程终止。
另一方面,在步骤S34,通过访问指向第二区中数据区的目标块的指针列,识别出一个对应于要读数据的逻辑块号的物理块号,即作为指向一个目标块的指针的物理块号,然后例程进入步骤S35。在步骤S35,从对应于在步骤S34中识别出的物理块号的物理块中读出数据,于是处理过程终止。
接下来,将参考图11的流程图来描述写处理过程。
在这种情况中,在步骤S41,也与在图7中的步骤S11类似,完成确定处理。
当只有第一区为有效时,例程进入步骤S42,并在那里确定在无效的第二区中的数据是否已被完全抹掉。当确定数据未被完全抹掉时,例程进入步骤S54,而当确定数据已被完全抹掉时,例程进入步骤S43。在步骤S54,作为无效块的第二区中的数据被抹掉,例程进入步骤S43。在步骤S43,通过访问指向第一区中数据区的更新块的指针列,识别出能作为更新块的物理块的物理块号,然后例程进入步骤S44。在步骤S44,例如由外部提供的要写数据被写入对应于所识别出的物理块号的物理块,即更新块。
再有,当由外部提供要写入多个逻辑块的数据时,在步骤S43,识别出更新块的物理块号,这些更新块的个数等于多个逻辑块的个数。在这种情况中,在步骤S44,来自外部的数据依次写入分别对应于所识别出的多个物理块号的更新块。
然后,例程进入步骤S45,指向第一区中数据区的目标块的指针列和指向第一区中数据区的更新块的指针列都被更新,而且更新后的新旧程度信息和有效性信息被复制到第二区。
就是说,关于指向第一区中的数据区的目标块的指针列,被做成与那些要从外部写入数据的逻辑块的逻辑块号相对应的物理块号(在图8和图9的例中为#00H和#02H)被更新为数据被实际写入的更新块的物理块号(在图8和图9的例中为#04H和#05H)。再有,关于指向第一区中的数据区的更新块的指针列,被写入数据的物理块(这些物理块是更新块)的物理块号(在图8和图9的例中为#04H和#05H)被更新为被做成与被写入数据的逻辑块的逻辑块号相对应的物理块号(在图8和图9的例中为#00H和#02H)。再有,新旧程度信息和有效性信息被更新,上述更新结果被写入第二区,然后例程进入步骤S46。在步骤S46,作为第一区的块中的数据被抹掉。
另一方面,当在步骤S41中确定第二区有效时,在步骤S47至S51及步骤S56中完成与步骤S42至S46及步骤S54中完成的处理相同的处理,只是对第一和第二区完成的处理分别反过来变成对第二和第一区的处理。
当发生存储器讹误时,如图7的步骤S18那样,在步骤S52确定已被定为第一区或第二区的块的新旧程度。在步骤S52,当确定第二区比第一区新时,例程进入步骤S55,指向第二区中数据区的目标块的指针列和指向第二区中数据区的更新块的指针列都被更新,并在步骤S56完成抹掉不是最新的第一区。其后,从步骤S48到S51,其处理过程与前面所述相同。
另一方面,如果在步骤52确定第一区比第二区新,则在步骤S53、步骤S54以及步骤S43至S46完成与步骤S55、S56及步骤S48至S51相同的处理,只是对第一和第二区的处理分别反过来变成对第二和第一区的处理。
参考图8至图11所描述的存储器读、写系统使用指向数据区的一级指针,因此,在下文中恰当地称作单指针系统。
在单指针系统的情况中,如图8和图9所示,在指向数据区的目标块的指针列中能存储4个物理块号,所以最多能对4块保持其数据兼容性。
在这种情况中,如图8和图9所示,与指向数据区的目标块的指针列相似,在指向数据区的更新块的指针列中能存储4个物理块号,因为也需要4个更新块来写4块数据,这是能保持兼容性的最大块数。
当把单指针系统应用于图8和图9所示存储器结构时,如前所述,最多能对4块保持数据兼容性,即难于对多于4块保持兼容性。就是说,当由第一和第二区的物理块来存储和管理构成数据区的物理块的物理块号时,能保持数据兼容性的块的个数受限于第一和第二区的物理块中能存储的块号的个数。
因此,存储器可以有例如如图12所示的结构。
就是说,在这种情况下,存储器的组成是作为存储数据的数据区的物理块,作为存储块号(这些块号是指向构成数据区的物理块的指针)的指针区的物理块,以及作为存储块号(这些块号是指向构成指针区的物理块的指针)的第一和第二区的物理块。
在图12中,为了方便,一个物理块占8个字节。
构成数据区的各物理块把数据存于8个字节单元中,在图12中的数据区包括24个物理块,分别被指定物理块号#00H至#17H。
在这种情况下,16个逻辑块是从外部可见的,这16个逻辑块分别被赋予逻辑块号%00H至%0FH。然而,在这种情况中,为了解释方便,假定存在的逻辑块个数与构成数据区的物理块个数相同,除了从外部可见作为逻辑块的物理块以外,另8个物理块分别被分配虚逻辑块号%10至%17。在图12所示状态中,逻辑块号%00H至%17H被做成分别对应于物理块号#00H至#17H。
构成指针区(块号区)的物理块把物理块号(这些物理块号是指向构成数据区的物理块的指针)存储在8个字节单元,在图12中指针区包括6个物理块,分别被指定物理块号为#18至#1D。在这种情况中,构成指针区的物理块把物理块号存储在8个字节单元中,而一个物理块号由一个字节表示,故一个物理块可存储8个物理块号。
再有,安排在指针区的每个物理块中的8个物理块号被做成与逻辑块号相对应。就是说,从第1字节到第8字节安排的物理块号被做成所对应的逻辑块号是以某一逻辑块号(如下文中提到的%00H、%08H或%10H)为基值从0至7偏移(移动)得到的。
在第一和第二区,分别将其第一字节分配给新旧程度信息,而将其最后一个字节分配给有效性信息。再有,作为指向指针区物理块的指针的物理块号被安排在新旧程度信息和有效性信息之间的6个字节中。
就是说,在第一和第二区的新旧程度信息和有效性信息之间的这6个字节当中,前3个字节中安排指针区目标块的物理块号(此后把这3个字节恰当地称作指向指针区目标块的指针列),而在后3个字节中安排指针区更新块的物理块号(此后把这3个字节恰当地称作指向指针区更新块的指针列)。
指向第一和第二区的指针区目标块的指针列中安排了3个物理块号,与这些物理块号相对应的指针区物理块所存储的物理块号被做成与逻辑块号相对应。就是说,与第1至第3字节中的物理块号相对应的指针区物理块所存储的物理块号分别被做成对应于逻辑块号%00H至%07H、%08H至%0FH、或%10H至%17H。
具体地说,例如在图12中,观察第一区,指向指针区目标块的指针列的第1字节中为物理块号#18H,由它指出的指针区物理块第1至第8字节中安排了物理块号$00H至#07H,这些物理块号被做成分别对应于逻辑块号%00H至%07H,这些逻辑块号被做成对应于指向第一区的指针区目标块的指针列的第1字节。就是说,在指向指针区目标块的指针列的第1字节中的物理块号所指出的指针区物理块第1至第8字节中安排的物理块号被做成分别对应于物理块号%00H至%07H,它们是以逻辑块号%00H为基值加上0至7偏移值。
类似地,在指向指针区目标块的指针列的第2字节中的物理块号所指出的指针区物理块第1至第8字节中安排的物理块号被做成分别对应于逻辑块号%08H至%0FH,它们是以逻辑块号%08H为基值加上0至7偏移值。
再有,在图12中,第一和第二区的物理块号分别被指定为#1E或#1F。
在具有前述结构的存储器中,例如观察第一区,指向指针区目标块的指针列中给出的物理块号所对应的物理块包括能被访问的指针区目标块。因此,在图12中,物理块#18H至#1AH构成指针区的目标块。再有,在图12中,在指针区中的其余物理块#1BH至#1DH是用于更新指针区的更新块,所以物理块号#1BH至#1DH被描述为指向第一区中指针区的更新块的指针列。
再有,在图12中,与指针区目标块所描述的物理块相对应的逻辑块%00H至%0FH所对应的数据区物理块是数据区的目标块。因此,在图12中,物理块#00H至#0FH构成数据区的目标块,而数据区的其余物理块#10H至#17H(对应于逻辑块%10H至%17H的物理块)构成更新数据区用的更新块。
在这种情况中,如前所述,指针区更新块的物理块号是在指向指针区更新块的指针列中给出的,所以通过访问该指针列能识别出更新块。
另一方面,由于数据区的更新块是对应于逻辑块%10H至%17H的物理块,通过访问由指向指针区目标块的指针列中第3字节描述的物理块号所对应的指针区物理块,便能从那里所描述的物理块号识别出更新块。
现在假定第一或第二区中只有一个区是有效的,例如第一区有效,而从外部发出了向对应于逻辑块号%00H和%02H的逻辑块写入两个相关联数据的请求。
在这种情况中,通过访问指向第一区(它是有效的)中指针区目标块的指针列和访问对应于那里所描述的物理块号的物理块,便能识别出要写入这两个相关联数据的目标块,它们是数据区的物理块。就是说,首先如前所述,通过访问指向第一区中指针区目标块的指针列的第一字节,能识别出指针区的物理块#18H,其中给出了对应于逻辑块%00H和%02H的数据区中物理块的物理块号。再有,通过访问物理块#18H的第1字节和第3字节,能分别识别出对应于逻辑块%00H和%02H的数据区物理块(目标块)的物理块号#00H和#02H。
然后,识别出数据区的更新块。就是说,如前所述,通过访问指向第一区中指针区目标块的指针列的第3字节,能识别出指针区的物理块#1AH,其中给出了对应于逻辑块%10H至%17H的构成数据区更新块的物理块的物理块号。再有,通过访问物理块#1AH,能识别出构成数据区更新块的物理块的物理块号#10H至#17H。这里,通过访问物理块#1AH,例如从左侧开始访问,便能识别出那些物理块,它们的块数等于作为数据区更新块被写入数据的数据区的目标块的块数。所以,对应于物理块号#10H和#11H的数据区物理块被作为更新块对待。
因此,如图13所示,本应被写入物理块#00H或#02H(它们是数据区的目标块)数据被分别写入物理块#10H或#11H(它们是数据区的更新块)。
在这种情况中,图13所示状态是要写入对应于逻辑块号%00H和%02H的物理块号#00H和#02H(分别由8字节00H和8字节02H指定)之中的两个数据被分别写入物理块#10H和#11H,它们是数据区的更新块。
如前所述,在把要写入对应于物理块号#00H和#02H(由对应于第一区中指针区物理块号#18H的物理块存储这些物理块号)的两个数据分别写入数区的更新块#10H和#11H之后,刚才作为数据区更新块并向其中写入数据的物理块的物理块号#10H和#11H被写入指针区的更新块,而本应写入数据的数据区物理块(目标块)的物理块号#00H和#02H被写入指针区的其他更新块。
就是说,首先,通过访问指向第一区中指针区更新块的指针列,识别出指针区的更新块。在这种情况中,〔指针区更新块的情况〕,通过从左侧开始相继访问指向指针区更新块的指针列,能识别出那些物理块,其个数等于指针区中那些目标块的个数,如前所述当把数据写入数据区时这些块必定被改变(被更新)。
因此,在上述情况中,通过从左侧开始相继访问指向第一区中指针区更新块的指针列,能识别出指针区的两个更新块#1BH和#1CH(它们的个数等于物理块#1AH的两个物理块和个数,物理块#1AH中有要写入数据的物理块(数据区的目标块)的物理块号#00H和#02H)、指针区的物理块#18H以及实际写入数据的物理块的物理块号#10H和#11H。
例如,在识别出的指针区更新块#1BH或#1CH当中的更新块#1BH中复制了指针区的物理块#18H(其中存储数据区目标块的物理块号#00H和#02H)中的存储内容,而这存储内容中的数据区目标块的物理块号#00H和#02H又分别被重写为实际写入数据的数据区更新块的物理块号#10H和#11H(如图13所示)。
再有,在识别出的指针区更新块#1BH或#1CH当中的另一个更新块#1CH中复制了指针区物理块#1AH(其中存储实际写入数据的物理块的物理块号#10H和#11H)的存储内容,而物理块号#10H和#11H被分别重写为本应被写入数据的物理块(数据区目标块)的块号#00H和#02H(如图13所示)。
然后,刚才是指针区更新块(那里的物理块号被更新)的物理块的物理块号#1BH和#1CH被写入指向第二区(它曾为无效区)的指针区目标块的指针列。就是说,指向第一区中的指针区目标块的指针列被复制到第二区,而第一区中对应于逻辑地址%00H至%07H的第1字节被重写为该指针区物理块的物理块号#1BH,其对应于逻辑地址%10H至%17H的第3字节被重写为该指针区的物理块号#1CH(见图13)。
结果,观察第二区,物理块#1BH、#19H和#1CH变为指针区的目标块,而曾为数据区更新块的物理块#10H或#11H被做成分别对应于逻辑块号%00H或%02H,曾是数据区目标块的物理块#00H或#02H曾被做成与这两个逻辑块号%00H或%02H对应。再有,曾是目标块的物理块#00H或#02H被分别做成对应于逻辑块%10H或%11H,并成为更新块。
就是说,访问指向第二区的指针区目标块的指针列的第1字节得知,其中给出对应于逻辑块%00H和%02H的数据区物理块的物理块号的那个指针区物理块是物理块#1BH,而访问物理块#1BH的第1字节和第3字节得知,对应于逻辑块%00H和%02H的数据区物理块分别为物理块#10H和#11H。访问指向第二区的指针区目标块的指针列的第3字节得知,其中给出对应于逻辑块%10H和%11H的数据区物理块的物理块号的那个指针区物理块是物理块#1CH,而访问物理块#1CH的第1字节和第2字节得知,对应于逻辑块%10H和%11H的数据区物理块(即数据区的更新块)是物理块#00H和#02H。
再有,指针区中物理块的物理块号#18H(该块中曾存储本应写入数据的物理块的物理块号#00H和#02H)及物理块的物理块号#1AH(该块中曾存储实际写入数据的物理块的物理块号#10H和#11H)被写入指向第二区(它曾是无效的)的指针更新块的指针列中。就是说,指向第一区中指针区更新块的指针列被复制到第二区,而块中所存内容已被更新的指针区物理块的物理块号#1BH或#1CH被分别重写为物理块号#18H(其中曾存放的物理块号对应于逻辑地址%00H至%07H)或物理块号#1AH(该块中曾存放的物理块号对应于逻辑地址%10H至%17H)(如图13所示)。
结果,观察第二区,物理块#18H、#1AH和#1DH是指针区的更新块。
在如上述更新第二区之后,与单指针系统的情况类似,在第二区中相继写入新旧程度信息和有效性信息。
所以在这种情况中,除非在数据区和指针区的写操作都已完成,否则有效性信息不能被写入。就是说,在上述情况中,除非已完成了向两个逻辑块%00H和%02H的写数据操作,否则指明有效性的有效性信息不能被写入第二区。
结果,如果在向两个逻辑块%00H和%02H写数据期间发生了存储器讹误,只有第一区处于有效状态,通过访问有效的第一区,则从逻辑块%00H和%02H中读出存储在物理块#00H和#02H(它们分别被做成对应于逻辑块%00H和%02H)中的旧数据。
另一方面,当向两个逻辑块%00H和%02H的写数据操作已经完成而且第二区中的有效性信息已被更新时,通过访问有效的而且是最新的第二区,则从逻辑块%00H和%02H中读出存储在物理块#10H和#11H(它们分别被做成对应于逻辑块%00H和%02H)中的新数据。
因此,当多个数据是存储在逻辑块%00H和%02H中的两个相关联数据时,即使在引起存储器讹误的情况下,也能象在单指针系统的情况中那样保持这两个数据之间的兼容性。
再有,在指向第一和第二区的指针区目标块的指针列中能存储3个物理块的物理块号,而在指针区的一个物理块中能存储8个物理块的物理块号,所以最多能控制数据区的24(=3×8)个物理块。因此,最多有12块(这是24块的一半)能作为数据区的更新块,而且能对这么多块保持数据兼容性,这个数目大于单指针系统中的数目。
再有,在图12和图13中,24块中的8块是更新块,因而最多能保持8块的数据兼容性。
这里,上文中参考图12和图13所描述的存储器读、写系统可以说是关于数据区的两级指针,所以在下文中恰当地把该系统称作双指针系统。
下面将参考图14和图15的流程图更详细地描述根据双指针系统的读、写处理过程。
首先,将参考图14的流程图描述读处理过程。
在这种情况中,首先在步骤S61,完成与图6的步骤S1类似的确定处理。
当只有第一区有效时,例程进入步骤S62,而当只有第二区有效时,例程进入步骤S65。
在步骤S62,通过访问指向第一区中指针区目标块的指针列,识别出指针区一个物理块(其中存有对应于要读数据逻辑块号的物理块号)的物理块号,然后例程进入步骤S63。就是说,例如当存储器有参考图11所描述的结构时,在逻辑块号落入%00H至%07H或%08H至%0FH区间的情况中,存储在指向指针区目标块的指针列的第一或第二字节中的物理块号被分别识别出来。
在步骤S63,通过访问对应于步骤S62中识别出的物理块号的那个指针区物理块,对应于要读数据的逻辑块号的物理块号被识别出来,于是例程进入步骤S64。就是说,当要读数据的逻辑块号是以某一参考值(在图12的情况中是%00H或%08H)为基值加上0至7的偏移值所得到的值,从与步骤S63中识别出的物理块号相对应的物理块的左侧按这个偏移值移动得到一个位置,在这个位置中存储的物理块号被识别出来作为对应于要读数据逻辑块号的物理块号。
在步骤S64,从对应于步骤S63中识别出的物理块号的那个物理块中读出数据,然后过程终止。
另一方面,在步骤S65,通过访问指向第二区中指针区目标块的指针列,识别出指针区一个物理块(其中存有对应于要读数据逻辑块号的物理块号)的物理块号,然后例程依次进入步骤S66和S67,那里完成的处理分别对应于步骤S63和S64,然后处理过程终止。
接下来将参考图15的流程图来描述写处理过程。
在这种情况中,在步骤S71,也是完成与图7的步骤S11类似的确定处理。
当第一区是有效的,例程进入步骤S72,并确定第二区中的数据是否被抹掉。当确定它未被抹掉时,例程进入步骤S88,而当确定它已被抹掉时,例程进入步骤S73。在步骤S88,第二区(它是无效块)中的数据被抹掉,例程进入步骤S73。在步骤S73,通过访问指向第一区中指针区目标块的指针列,识别出指针区一个物理块(其中曾存入物理块号)的物理块号,例程进入步骤S74。就是说,例如,当存储器有图12所示结构时,指向第一区中指针区目标块的指针列的第3字节中存储的物理块号#1AH被识别出来。
在步骤S74,通过访问数据区更新块的物理块号(它存储在由步骤S73识别出的物理块号所对应的物理块中),数据区更新块被识别出来,然后例程进入步骤S75,于是由外部或其他类似方式提供的要写入数据被写到数据区的更新块。
再有,当从外部提供的数据要写入多个逻辑块时,在步骤S74,通过相继查寻(例如从左到右查询)对应于步骤S73中识别出的物理块号的那些物理块(在指针区中的物理块),识别出了数据区中更新块的物理块号,这些更新块的个数等于多个逻辑块的个数。再有,在这种情况中,在步骤S75,从外部提供的数据被相继写入数据区的更新块,这些更新块分别对应于这样识别出的多个物理块号。
然后,例程进入步骤S76,在其中存有物理块号并曾被更新(这些物理块号被做成对应于要被写入数据的逻辑块的逻辑块号)的物理块被复制到指针区的更新块。就是说,例如参考图12和图13来描述这一点,那么存储物理块号#00H和#02H(它们被做成与写入数据用的逻辑块的逻辑块号%00H和%02H相对应)的物理块#18H被更新,物理块号#00H和#02H(它们已被变成#10H和#11H)被复制到指针区的更新块#1BH。
再有,在步骤S76,存储数据区更新块指针(数据区更新块的物理块号)的物理块(它们已被更新)被复制到指针区的更新块。例如参考图12和图13来描述这一点,那么存储数据区更新块的物理块号#10H至#17H的物理块#1AH被更新,而且物理块号#10H和#11H分别被改变成#00H和#02H,这被复制到指针区的更新块#1C。
接下来,例程进入步骤S77,指向第一区中指针区目标块的指针列和指向第一区中指针区更新块的指针列被更新,而且被更新的新旧程度信息和有效性信息被复制到第二区。
这是以图12和图13的情况为例,关于指向第一区中指针区目标块的指针列,在第1字节中存储的含有指向数据区物理块#00H和#02H(它们被做成对应于写外部提供数据的逻辑块)的指针的物理块号#18H被更新为含有指向数据区物理块#10H和#11H(这是数据曾实际写入区)的指针的物理块号#1BH,而含有指向数据区物理块#10H和#11H(这是数据曾实际写入区)的指针的物理块号#1AH被更新为含有指向数据区的物理块#00H和#02H(它们被做成对应于数据写入的逻辑块)的指针的物理块号#1CH。
关于指向第一区的指针区更新块的指针列,作为更新块的指针区物理块(其中的物理块号曾被更新)的物理块号#1BH和#1CH分别被更新为已成为指针区更新块的物理块的物理块号#18H和#1AH。
再有,在第一区中的新旧程度信息和有效性信息被更新,前述更新结果被写入第二区,然后例程进入步骤S78。在步骤S78,在第一区中的所有数据被抹掉。
另一方面,在步骤S71,当确定第二区是有效区时,在步骤S79至S85以及S90完成与步骤S72至S78以及步骤S88相同的处理,只是对第一或第二区完成的处理反过来分别变成对第二或第一区的处理。
当发生存储器讹误时,在步骤S71,确定第一和第二区的有效性。在这种情况中,例程进入步骤S86,并确定第一和第二区的块的新旧程度。在步骤S86,当确定第二比第一区新时,例程进入步骤S89,指向第一区中指针区的指针被更新到第二区的一个新块,被更新的新旧程度和有效性信息被重写,然后例程进入步骤S90。接下来,在步骤S90和S80至S85,完成如前一情况中相同的处理。
当在步骤S86中确定第一区比第二区新时,在步骤S87以及步骤S88、S73和S78中完成与步骤S89、S90、S80及S85相同的处理,只是对第一或第二区完成的处理反过来分别变成对第二或第一区的处理。
在双指针系统的情况中,如同在单指针系统的情况中一样,能保持兼容性的物理块的个数是受限制的,然而,如果与单指针系统扩展成双指针系统的情况相类似地扩展双指针系统,而对数据区的指针含有3级、4级、…,则能够保持兼容性的物理块的个数能进一步增加。因此,通过考虑一块的长度和恰当地设置数据区指针的级数,可以把能保持兼容性的物理块个数的上限安排成一个所希望的值。
实际上,如图3所示由IC卡2的序列发生器91对EEPROM 66MUCK进行数据读、写是根据上述双指针系统来实现的,在这种情况中对EEPROM63的存储器进行分配的举例示于图16。
在图16中,对EEPROM 66提供了256个物理块。每个物理块含有总数40个字节,其中32个数据单元字节(D00至D1f)和8个奇偶检验单元字节(P0至P5)。
再有,在图16中,物理块号#00H至#FFH被分别分配给这256个物理块,其中物理块#00H至#EFH构成数据区,物理块#F0H至#FDH构成指针区,而物理块#FEH和#FFH构成分别构成第一和第二区。
再有,关于数据区,在240个物理块#00H至#FEH中,224个物理块是目标块(下文中也称作数据块),而其余的16个物理块是更新块。因此,最多能保持16块的数据兼容性。
再有,在图16所示状态中,物理块#00H至#DFH是数据块,而物理块#E0H至#FEH是更新块。
关于指针区,14个物理块#F0H至#FDH中7个是目标块(下文中称作指针块),这14个物理块中另7个是更新块。再有,在图16所示状态中,物理块#F0H至#F6H是指针块,物理块#F7H至#FDH是更新块。
再有,在图16中,第一和第二区被图示为有效性确定块。
图17显示出有效性确定块(第一和第二区)的结构举例。如图17A所示,新旧程度信息(确定新旧程度信息)被安排在有效性块的数据单元的第1字节(D00)中,指针区目标块(指针块)的物理块号被安排在第2至第8字节(D01至D07)。
在数据区中的更新块的物理块号被安排在有效性确定块的数据区的第9至第24字节(D08至D17)。就是说在上述情况中,在第一和第二区中,存储的是存储数据区更新块的物理块号的指针区物理块的物理块号(指向数据区更新块的指针的指针),然而在这一情况中,数据区更新块的物理块号(指向数据区更新块的指针)被直接安排在有效性确定块。
因此,在这一情况中,在指针区中没有物理块用于存储数据区更新块的物理块号。
指针区更新块的物理块号被安排在有效性确定块的数据单元的第25至第31字节(D18至D1e),而其第32字节(D1f)被放在一边作为保留字节。
再有,对应于上述有效性确定确定信息的RS代码或类似代码被安排在有效性确定块的奇偶检验单元中。
这里,当EEPROM 66有图16所示结构时,图17显示出此时有效性确定块中数据部分的典型初始值。
接下来,图18显示组成指针区的物理块(指针块和更新块)的结构举例。
如图18A所示,数据区物理块的物理块号被安排在数据部分中的32个单元(D00-D1f)中。构成指针区的物理块的奇偶检验部分没有被用作为前述有效性信息,而是作为通常的奇偶检验值,因此,最好向奇偶检验部分中安排的信息提供纠错能力。这是因为在双指针系统中,“在组成指针区的物理块的数据部分中安排的信息中是否有错”这一判定的有效性最终不是由安排在奇偶检验部分中的信息来确定,而是根据作为有效性确定块中的有效性信息的奇偶检验部分来判定。
这里,当EEPROM 66有图16所示结构时,图18B显示出此时构成指针区的物理块的数据部分的典型初始值。
再有,构成数据区的物理块(数据区的数据块和更新块)与构成指针区的物理块类似,只是其中安排的不是物理块指针,而是供读、写的数据,所以略去对它们的描述。
如前所述,在向数据区写入之后和向指针区(那里存储构成数据区的物理块的指针)写入之后,有效性确定性(第一或第二区,用于存储指向构成指针区的物理块的指针)的存储内容被更新,所以能解决在一个或多个物理块中的物理存储器讹误问题。就是说,不仅能解决组成数据区的一个物理块的存储器讹误问题,而且还能解决多个物理块的存储器讹误问题。
再有,如前所述,有效性确定块和存储在指针区的信息作为一个转换表用于把数据区中的逻辑块号转换成物理块号,因此,当关于有效性确定块或指针区的写例程进行过程中发生故障时,虽然引起了逻辑存储器讹误,但这种逻辑存储器讹误能被解决。
结果,即使在写多个相关联数据时发生故障而且存储器讹误,该存储器讹误能被有效地解决,保持多个数据的兼容性。
如前所述,虽然所给出的描述是针对把本发明应用于非接触卡系统的情况,但本发明可应用于存储器之类或任何数据写入装置的存储单元。然而,本发明对这样的系统特别有用,即在这种系统中进行的数据发送与接收是在所谓不稳定状态中进行的,例如在上述非接触卡系统或者甚至是接触型系统,其中用户能自由地插入或拔出一块IC卡或类似装置。
再有,根据本发明的这一形式,虽然指针区的更新块的物理块号或数据区的更新块的物理块号被存储在作为所谓指针区或数据区的空闲区的有效性确定块或指针区,但并不一定需要存储更新块的物理块号。然而,当更新区的物理块号未被存储时,在写数据时,必须通过查寻EEPROM66的存储内容来检测出构成更新块的物理块,所以最好是存储更新块的物理块号,以达到高速处理。
再有,根据本发明的这一形式,虽然存储有效性确定块的区、指针区以及数据区被分配在EEPORM66上的预定位置,但分配这些区所用的位置并不特别限定。
再有,这些区不需要是EEPROM66上的连续范围内的区。就是说,分别存储有效性确定块、指针区或数据区的各区能被分配在EEPROM66上的非连续位置。
再有,根据本发明的这一形式,在EEPROM66中只保留立即前一个场合的存储内容,否则,可保留立即前一个场合和在它之前的场合的存储内容。然而,在这种情况中需要更大的存储容量。
将会理解,在本发明的范围和精神内能预期各种修改和应用,所以,本发明不限于这里所描述的发明形式。
权利要求
1.一种数据处理方法,使用一个存储器来把信息存储在块单元中,这里,当所述存储器包括用于把数据存储在块单元中的数据区以及用于存储多个块号,它们是赋予所述数据区中各块的数,的第一和第二区时,数据被写入所述数据区的一块,该块对应于存储在所述第一和第二区当中的一个区中的所述块号,被写入数据的所述块的块号被存储在所述第一和第二区当中的另一个区中,以及在所述第一和第二区当中的所述一个区中的数据被抹掉。
2.根据权利要求1中所述的数据处理方法,所述第一和所述第二区除了存储所述多个块号外,还存储关于存储内容新旧程度或有效性的新旧程度信息或有效性信息,以及基于所述新旧程度信息和有效性信息当中的至少一个,来选择所述第一或第二区当中的一个区。
3.根据权利要求2所述的数据处理方法,这里,当所述有效性信息表明所述第一和第二区二者都有效时,根据所述新旧程度信息被认为最新的一个区中的数据被更新,而被认为不是最新的那另一个区中的数据被抹掉,而数据被写入所述数据区的一块,该块对应于所述区的所述一个中存储的块号。
4.根据权利要求2所述的数据处理方法,这里,被写入数据的块的块号被存储在所述区的所述另一个中,在所述区的另一个中的所述新旧程度信息和有效性信息被更新,在所述区的所述一个中的数据被抹掉。
5.根据权利要求2所述的数据处理方法,这里,当基于所述有效性信息选定所述第一和第二区中任何一个而在所述区的所述另一个中的数据尚未被抹掉时,所述区的所述另一个中的数据被抹掉,数据被写入与所述区的所述一个中存储的所述块号相对应的块。
6.一种完成数据处理所用的数据处理装置,使用一个存储器把信息存入块单元,这里所述存储器包括用于把数据存入所述块单元的数据区,以及用于存储多个数的第一和第二区,这些数是构成所述数据区的各块的块号,所述存储器还包括数据写单元,用于向所述数据区的块写入数据,该块对应于存储在所述第一或第二区当中一个区的块号,块号写单元,用于在所述第一或第二区的另一区中存储写入数据的所述块的所述块号,以及抹掉单元,用于抹掉所述第一或第二区当中所述一个区中存储的数据。
7.一种完成数据处理所用的数据处理装置,使用一个存储器把信息存入块单元,这里,所述存储器包括用于把数据存入所述块单元的数据区,用于存储赋予所述数据区中各块的多个块号的指针区,以及用于存储赋予所述指针区中各块的多个块号的第一和第二区,访问所述指针区中的一块,该块对应于所述第一和第二区之一中存储的块号,并将数据写到所述数据区的一个对应块中,该块对应于所述指针区的所述块中存储的块号,被写数据的所述块的块号存储在所述指针区中的一块,而被存储的所述指针区中该块的块号被存储在所述第一和第二区当中的另一个区中,以及在所述第一和第二区当中的所述一个区中存储的数据被抹掉。
8.根据权利要求7所述的数据处理方法,这里所述第一和所述第二区除了存储所述多个块号外,还存储关于存储内容新旧程度或有效性的新旧程度信息或有效性信息,以及对所述第一或第二区中一个区的选取是基于所述新旧程度信息和有效性信息中的至少一个。
9.根据权利要求8所述的数据处理方法,这里,当所述有效性信息表明所述第一和第二区两者都有效时,根据所述新旧程度信息被认定为最新的一个区中的数据被更新,而被认定不是最新的另一个区中的数据被抹掉,而数据被写到所述指针区中一块的一个块号,该块号对应于存储在所述第一和第二区当中的所述一个中存储的所述块号。
10.根据权利要求8所述的数据处理方法,这里被写数据的块的块号被存储在所述指针区的一块中,在所述指针区中该块的块号被存储在所述第一和第二区当中的所述另一个区中,在所述区当中的另一个区中的新旧程度信息和有效性信息被更新,而在所述区当中所述一个区中的数据被抹掉。
11.根据权利要求8所述的数据处理方法,这里,当根据所述有效性信息选定所述第一和第二区当中的某一个,而在所述区当中的所述另一个区中的数据未被抹掉时,在所述区当中的所述另一个中的数据被抹掉,而数据被写到所述指针区中一块的块号,该块号对应于存储在所述第一和第二区当中所述一个中的所述块号,并写到所述数据区中的一个对应块。
12.一种用于完成数据处理的数据处理装置,使用一个存储器把信息存储在块单元中,这里,所述存储器包括用于把数据存储在所述块单元中的数据区,用于存储赋予所述数据区中各块的多个块号的指针区,以及用于存储赋予所述指针区中各块的多个块号的第一和第二区,数据写单元,访问所述指针区中的一块,该块对应于所述第一和第二区之一中存储的一个块号,并将数据写到所述数据区中一个相应块中,该块对应于所述指针区的所述块中存储的块号,块号写单元,用于把被写入数据的所述块的块号存储到所述指针区的一块中,并把所述指针区中该块的块号存储到所述第一和第二区当中的另一个区中,以及抹掉单元,用于抹掉存储在所述第一和第二区当中所述一个区中的数据。
全文摘要
本发明涉及一种数据处理方法和装置。用于把信息存入块单元的存储器包括一个数据区用于把数据存储到块单元中,以及一个第一区和一个第二区用于存储多个块号,它们是赋予数据区中各块的块号。数据被写入数据区中的一块,该块对应于存储在第一和第二区之一中的块号,被写入数据的块的块号被存储在第一和第二区的另一个中,而在第一和第二区之一中的数据被抹掉。这样,存储器讹误的危险比较小了,数据能被稳定地读出。
文档编号G07F7/10GK1208905SQ9811546
公开日1999年2月24日 申请日期1998年7月9日 优先权日1997年7月9日
发明者日下部进, 高田昌幸 申请人:索尼株式会社