首页> 中国专利> 用于降低共享存储器的数据讹误的方法和设备

用于降低共享存储器的数据讹误的方法和设备

摘要

本发明公开了一种用于降低共享存储器的数据讹误的方法和设备。共享存储器包括一个头部段和一个数据段,其中所述头部段包括存储有控制信息的至少两个头部,该方法包括步骤:判断所述至少两个头部中的一个头部中是否有数据讹误;以及如果所述一个头部中有数据讹误,则将其他头部中的任意一个头部中的控制信息拷贝到所述一个头部中。本发明还公开了一种用于共享存储器访问控制的方法。

著录项

  • 公开/公告号CN101295274A

    专利类型发明专利

  • 公开/公告日2008-10-29

    原文格式PDF

  • 申请/专利权人 国际商业机器公司;

    申请/专利号CN200710107758.5

  • 发明设计人 刘新华;R·梅利;冉晓松;

    申请日2007-04-29

  • 分类号G06F11/14;

  • 代理机构北京市金杜律师事务所;

  • 代理人王茂华

  • 地址 美国纽约阿芒克

  • 入库时间 2023-12-17 20:58:06

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2011-03-23

    授权

    授权

  • 2008-12-24

    实质审查的生效

    实质审查的生效

  • 2008-10-29

    公开

    公开

说明书

技术领域

本发明一般涉及共享存储器领域。更具体地,本发明涉及一种用于减少共享存储器的数据讹误的方法和设备以及一种用于共享存储器访问控制的方法。

背景技术

众所周知,共享存储器是在多任务环境下在两个或两个以上进程(或线程)之间可以共享的存储器区域,它通常用来支持高速数据传输。通常使用共享存储器的各个进程遵循一组规则,其中该组规则禁止两个或者两个以上进程同时访问(写入或者读取)同一存储器区域。

具体地,可以采用互斥体(mutex)来防止两个或两个以上进程同时访问共享存储器。正如本领域技术人员所熟知的,互斥体是进程间的一种同步机制,其中拥有互斥体的进程享有对共享存储器的独占访问,而其它进程只有等到该互斥体被释放后才能使用该互斥体来对共享存储器进行独占访问。

在现有技术中,共享存储器包含有头部段和数据段,其中头部段存储有关键的控制数据,例如信号量、存储器块的大小、可利用位置的指针等等;以及数据段是进程在访问共享存储器时进行数据操作(例如读取/写入数据)的区域。通常,拥有互斥体的进程根据头部段中的控制数据在数据段上进行数据操作。这样,头部段中的控制数据对于使用共享存储器的系统的正确操作是十分关键的。如果头部段存在数据讹误(corrupt),使用该共享存储器区域的系统可能会停止工作。通常,“数据讹误”是指共享存储器的头部段中控制数据块被破坏或者丢失或者与数据段中的数据状态不一致,即头部段中的控制数据不能正确反映数据段中的数据状态。

在共享存储器的头部段存在数据讹误的情况下,通常通过提供消除问题(删除和重新创建共享存储器)的支持脚本(SCRIPT),或者通过重新启动使用共享存储器的所有应用,或者重新启动机器,来采取错误补救操作。但是,在上述任何情况下,这些应用都将会受到停机时间(down time)的影响。由于共享存储器通常用于作为高速机制的进程间通信,所以出现任何停机时间都是非常不希望的,并且是不可接受的。

如上所述,当多个线程或者多个进程都要求使用共享存储器时,通常使用互斥体来控制对共享存储器段(包括头部段)的独占访问,即只有拥有互斥体的线程或者进程才能对共享存储器区域进行操作。典型地,进程或线程通过互斥体独占地访问共享存储器的过程包括以下步骤:

(1)锁定互斥体,以得到对共享存储器的独占访问,其中在完成锁定后,只有当前进程或线程可以对共享存储器进行访问,而其它进程或线程需要保持等候状态,直到该互斥体被释放;

(2)读取共享存储器的“头部段”中的控制数据,以知道多少字节可用于写入(或者读取),以及写入(或者读取)位置等等;

(3)如果共享存储器可以用于写入(或者读取),则开始共享存储器的“数据段”内的数据操作;

(4)在完成数据操作之后,利用“数据段”的新状态更新“头部段”,即写入(或者读取)的新位置,新的可用于写入(或者读取)的空间,等等;以及

(5)在完成步骤(3)到步骤(4)之后,释放互斥体锁定。

一旦拥有互斥体的当前进程在对共享存储器进行访问时崩溃,例如在步骤(4)中正在更新共享存储器的头部段时发生进程崩溃,则很可能会引起更新的中断,从而使得共享存储器的头部段中的控制数据与数据段中的数据状态不再一致。这样就会出现共享存储器的头部段中的控制数据讹误。如上所述,这种数据讹误将导致共享存储器不能正常工作,甚至引起数据完全丢失。

另外,在诸如Windows操作系统的操作系统环境下,在一个进锁定互斥体期间因为某些原因而崩溃时,它尚未释放它对其所拥有的互斥体的所有权。此时,该互斥体被认为处于遗弃状态。随后在其它进程通过Windows操作系统调用“WaitForSingleObject()”来试图得到该互斥体时,会使得这些其它进程得到WAIT_ABANDONED返回代码。

这意味着,虽然该互斥体处于空闲状态,但是它不能被其它进程所拥有来对共享存储器进行独占访问。这样,由于不能得到可用的互斥体,其它进程将不能对共享存储器进行访问。

因此,需要一种能够解决现有技术中所存在的共享存储器的数据讹误的技术方案。另外,也需要一种诸如在Windows操作系统的操作系统环境下保证进程在互斥体处于遗弃状态时可以得到其它可用的互斥体的技术方案。

发明内容

本发明的目的之一在于提供一种降低共享存储器的数据讹误的方法和设备。

本发明的另一目的在于提供一种共享存储器访问控制的方法,其能够在检测到当前互斥体为遗弃状态时自动切换到另一个可用的互斥体。

根据本发明的第一方面,提供一种用于降低共享存储器的数据讹误的方法。所述共享存储器包括一个头部段和一个数据段,其中所述头部段包括存储有控制信息的至少两个头部。该方法包括步骤:判断所述至少两个头部中的一个头部中是否有数据讹误;以及如果所述一个头部中有数据讹误,则将其他头部中的任意一个头部中的控制信息拷贝到所述一个头部中。

在根据本发明的第一方面中,共享存储器的头部段包括存储有控制信息的至少两个头部。这样,根据本发明的第一方面的方法,如果进程对所述至少两个头部中的一个头部进行更新时突然崩溃而引起该头部段出现数据讹误,则随后访问该共享存储器的进程可以检测到该讹误,并通过将其他头部段拷贝到该头部段,来自动将该头部段恢复为一致。

根据本发明的第二方面,提供一种用于降低共享存储器的数据讹误的设备。所述共享存储器包括一个头部段和一个数据段,其中所述头部段包括存储有控制信息的至少两个头部。该设备包括:判断装置,用于判断所述至少两个头部中的一个头部中是否有数据讹误;以及第一拷贝装置,用于如果所述一个头部中有数据讹误,则将其他头部中的任意一个头部中的控制信息拷贝到所述一个头部中。

根据本发明的第三方面,提供一种用于共享存储器访问控制的方法,其中包含多个互斥体的互斥体阵列被创建,该方法包括步骤:当一个应用试图访问所述共享存储器时,确定当前互斥体是否处于遗弃状态;以及如果确定所述当前互斥体处于遗弃状态,则选择锁定所述互斥体阵列中下一个可用的互斥体,用以对所述共享存储器进行独占访问。

在本发明的第三方面中,在初始化共享存储器时提前创建包括多个互斥体的一个互斥体阵列,代替现有技术中对于一个共享存储器仅仅存在一个互斥体。根据本发明的第三方面的方法,一旦阵列中的一个互斥体由于应用崩溃而处于遗弃状态时,随后访问共享存储器的进程能处理该异常,并且自动切换到另一个可用的互斥体,使得继续正常过程而没有任何中断和影响。可以定制互斥体阵列的尺寸,例如为8、16、32。

本发明提供了用于最小化共享存储器数据讹误的可能性的机制,该机制可以完全防止共享存储器的数据讹误,同时没有对系统性能产生任何可觉察的影响。本发明可容易地应用到使用共享存储器的现有技术方案中,以增强有关产品的可靠性。

附图说明

参考以下结合附图的详细说明,本发明的特征、优点以及其它方面将变得更加明显,在附图中:

图1示出了其中可以应用本发明的示例性共享存储器应用环境;

图2示出了根据本发明的第一实施例的共享存储器的数据结构;

图3示意性示出了根据本发明的第一实施例的用于降低共享存储器的数据讹误的方法的流程图;

图4示意性地示出了根据本发明第一实施例地用于降低共享存储器的数据讹误的设备的方框图;

图5示出了根据本发明的第二实施例的共享存储器的数据结构;

图6示出了根据本发明的第二实施例的共享存储器中的“MutexMap(互斥体位图)”字段的一个例子;以及

图7示意性地示出了根据本发明的第二实施例的用于共享存储器访问控制的方法的流程图。

具体实施方式

现在参考以下附图,将详细描述本发明的示例性实施例。

图1是其中可以应用本发明的共享存储器应用环境的示意图。作为最快速的进程间通信(Inter-Process Communication,IPC)机制,共享存储器支持高速数据传送。通常可以有多个进程同时要求对共享存储器进行访问。如图1所示,在多任务环境下,多个进程,例如进程1、进程2……、进程n可以要求访问共享存储器10。

在多个进程1、进程2、……进程n都要求访问共享存储器10时,需要一种进程间的同步机制,来防止多个进程1、进程2、……进程n同时访问共享存储器10。这些进程间的同步机制例如包括临界区、互斥体、信号量、事件、互锁函数和消息队列等等。作为一个实施例,下面采用互斥体作为进程间的同步机制的例子,来描述本发明的实施例。然而,本领域技术人员应该理解,其它的进程间同步机制也可以应用在本发明中。

在本发明的实施例中,用互斥体来保证一个进程对共享存储器的独占访问。具体来说,当一个进程拥有互斥体时,它享有对共享存储器的独占访问,而其它的进程只有等到该进程完成对共享存储器的独占访问并且释放该互斥体后才能拥有该互斥体来对共享存储器进行访问。这样能够确保在同一时刻只有一个进程独占地访问共享存储器。

另外,虽然在本发明的实施例中以进程对共享存储器的访问为例进行描述,但是本领域技术人员应该理解,本发明也可以应用在多个线程或者应用要求访问共享存储器的情况下。因此,在以下的描述中,将不加区分地使用“进程”、“线程”和“应用”,对于本发明来说它们是等效的。

(第一实施例)

在根据本发明的第一实施例中,提供了一种用于降低共享存储器的数据讹误的机制。根据本发明的第一实施例的基本原理在于:当对共享存储器进行初始化时,使得共享存储器的头部段包含存储有相同控制信息的至少两个头部。这样,在至少两个头部中的任何一个头部中出现数据讹误时,可以利用不存在数据讹误的其他头部中的控制信息来修复该出现数据讹误的头部中的控制信息。

具体地,根据本发明的第一实施例,提供一种用于降低共享存储器的数据讹误的方法。所述共享存储器包括一个头部段和一个数据段,其中所述头部段包括存储有控制信息的至少两个头部。该方法包括步骤:判断所述至少两个头部中的一个头部中是否有数据讹误;以及如果所述一个头部中有数据讹误,则将其他头部中的任意一个头部中的控制信息拷贝到所述一个头部中。优选地,该方法包括还步骤:如果所述一个头部中没有数据讹误,则将所述一个头部中的控制信息拷贝到其它头部中。

优选地,该方法还包括步骤:根据所述至少两个头部中的任意一个头部中的控制信息对所述共享存储器的数据段进行访问。更优选地,该方法还包括步骤:在完成对所述共享存储器的数据段的访问之后,对所述至少两个头部中的任意一个头部中的控制信息进行更新;以及将更新的所述控制信息拷贝到除所述已更新的头部之外的其它头部中。

下面参考图2和图3对本发明的第一实施例进行详细描述。

图2示出了根据本发明的第一实施例的共享存储器布局的数据结构的示意图。

如图2所示,根据本发明的第一实施例的共享存储器10包括头部段11和数据段12,其中头部段11存储有关键的控制数据,例如信号量、存储器块大小、可用位置的指针等等;数据段12存储有与应用程序相关的数据。通常,一个进程在获得互斥量之后根据头部段11中的控制数据来执行针对数据段12读取或写入操作,并且在完成针对数据段12的读取或写入操作之后更新头部段11中的控制数据,使得头部段11中的控制数据正确地反映数据段12中的数据状态。

根据本发明的第一实施例的共享存储器10的头部段11进一步包括第一头部111和第二头部112。在初始化之后,第一头部111和第二头部112存储有相同的控制信息。具体地说,第一头部111包括一个控制数据字段111A,以及一个校验值字段111B,用于分别存储控制数据和该控制数据的校验值。同样地,第二头部112包括一个控制数据字段112A,以及一个校验值字段112B,用于分别存储控制数据和该控制数据的校验值。优选地,校验值字段111B和校验值字段112B中存储的校验值可以分别是控制数据字段111A和112A中存储的控制数据的校验和。

本领域技术人员应该理解,在刚刚创建和初始化共享存储器之后以及在正常情况下,第一头部111和第二头部112中的控制信息是完全相同的。本领域技术人员也应该理解,图2所示的共享存储器布局仅仅是示意性的,本发明的共享存储器布局并不局限于图2所示的布局。在本发明的第一实施例中,只要共享存储器包括至少两个头部即可。

通常,在创建和初始化共享存储器10之后,马上产生第一头部111的控制字段111A中存储的控制数据的校验值,然后将第一头部111中的控制信息复制到第二头部112,即将控制数据字段111A和校验值字段111B的内容对应地复制到控制数据字段112A和校验值字段112B中,使得第一头部111和第二头部112中的内容完全相同。

参考图3,现在详细描述根据本发明的第一实施例的用于降低共享存储器的数据讹误的方法。

首先,在该方法的处理开始之后,在步骤S101,一个进程获取并锁定互斥体,从而开始对共享存储器10进行独占访问。

在步骤S102,对于存储在第一头部111的控制数据字段111A中的控制数据产生一个当前校验值,其中产生的当前校验值用于与先前存储在校验值字段111B中的先前校验值相比较。优选地,该当前校验值是第一头部111中的控制数据字段111A中的控制数据的校验和。

正如本领域技术人员都能理解的,校验值验证方法是指从数据存储器读出数据,通过校验值算法产生当前校验值,并将产生的当前校验值与先前校验值进行比较。如果比较结果是当前校验值与先前校验值相同,则表明存储器中的数据没有被破坏;反之,如果比较结果是当前校验值与先前校验值不相同,则表明存储器中的数据被破坏。本发明可以采用任何合适的算法来执行校验值验证,例如,奇偶校验等等。校验值的计算和比较是本领域技术人员都熟知的,在此不再赘述。

在步骤S103,将在步骤S102中产生的当前校验值与先前存储在校验值字段111B中的先前校验值相比较,以确定这两个校验值是否匹配。

如果在步骤S103中判断这两个校验值不相匹配,表明第一头部111中的控制数据字段111A中存在数据讹误。在这种情况下,处理前进到步骤S104。正如前面所述的,在共享存储器中,“数据讹误”是指控制数据字段的控制数据已被破坏或者丢失或者与数据段中的操作数据状态不相一致,即控制数据字段中的控制数据不能正确反映数据段中的数据状态。通常,当一个进程正在对第一头部111的控制数据字段中的控制数据进行更新时,如果该进程突然发生崩溃,则会在控制数据字段中出现控制数据讹误。这样,在下一个进程访问共享存储器时,就可能出现上述校验值不相匹配的情况。

如果在步骤S103中判断这两个校验值相匹配,表明第一头部111中的控制数据字段111A中不存在数据讹误。在这种情况下,处理前进到步骤S105。

在步骤S104,将第二头部112中的控制信息(包括控制数据和校验值)对应地拷贝到第一头部111中,以修复第一头部111中的控制信息。之后,处理前进到步骤S106。

在步骤S105,将第一头部111中的控制信息对应地拷贝到第二头部112中,以使第一头部111中的控制信息与第二头部112中的控制信息完全相同。然后,处理前进到步骤S106。通过执行步骤S105,可以防止第二头部112中出现数据讹误的情况。

在步骤S106,根据第二头部112中的控制数据来对共享存储器10的数据段12进行读取和写入,并且在完成读取和写入之后,更新第二头部112中的控制数据字段112A中的控制数据。由于这一步骤与现有技术中的处理一样,所以省略对其详细说明。之后,处理前进到步骤S107。

在步骤S107,对于更新后的第二头部112的控制数据字段112A中的控制数据产生当前校验值,并将其存储在校验值字段112B中,用以代替先前存储在校验值字段112B中的先前校验值。该步骤S107中产生校验值的方法可以与在步骤S102中产生校验值的方法相同。然后,处理前进到步骤S108。

在步骤S108,将第二头部112中的控制信息拷贝到第一头部111中,以使第一头部111与第二头部112中的控制信息完全相同。

最后,在步骤S109,释放该进程对互斥体的锁定,从而完成该进程对共享存储器的访问。当该进程释放对互斥体的锁定后,下一个进程就可以获得对该互斥体的锁定。下一个进程可以与上述步骤S101至S109相同的步骤,执行对共享存储器的访问。

本领域技术人员都能理解的是,作为对图3所示的流程的替换,以下处理流程对于本发明也是可行的:

在步骤S102,代替对第一头部产生校验值,可以对第二头部产生校验值。接着在步骤S103,确定校验值是否匹配。如果在步骤S103中的判定结果为“否”,则在步骤S104中将第一头部111中的控制信息拷贝到第二头部112中,然后处理前进到步骤S106。如果在步骤S103中的判定结果为“是”,则处理前进到步骤S105。在步骤S105,将第二头部112中的控制信息拷贝到第一头部111中,使得第一头部111与第二头部112中的控制信息完全相同。

同样地,在步骤S106,也可以根据第一头部111中的控制数据来对数据段进行操作,并且在完成数据段操作之后,更新第一头部111中的控制数据。之后,在步骤S107,可以对更新后的第一头部111中的控制数据产生校验值。接着在步骤S108,将第一头部111中的控制信息拷贝到第二头部112中,使得第一头部111和第二头部112中的控制信息完全相同。

可以看出,在本发明中,可以基于第一头部111和第二头部112中的任何一个来执行如步骤S103中的匹配步骤和步骤S106中的更新步骤。

与现有技术相比,本发明第一实施例的共享存储器的头部段包括第一头部和第二头部。另外第一头部和第二头部中均包括一个校验值字段。这样,根据本发明的第一实施例的方法,如果进程对第一头部和第二头部中任意一个进行更新时突然崩溃而引起该头部段出现数据讹误,则随后访问该共享存储器的进程可以通过校验值匹配来检测到该讹误,并通过将第一头部和第二头部中的另一个的控制信息完全拷贝到发生数据讹误的头部,来自动将该头部恢复为一致。这样,根据本发明的第一实施例的方法可以确保总是存在至少一个一致的头部段。因此,采用根据本发明的第一实施例的方法,至少不会因为某一进程的崩溃而引起先前任何数据的丢失。

另外,根据本发明第一实施例的方法可以使用在任何操作系统环境下,而不局限于任何特定环境。

在上面的详细说明中,仅描述了头部段包括第一头部和第二头部的情况。但本发明并不局限于此,头部段包括三个甚至更多头部的方案也在本发明的范围内。头部段包括三个甚至更多头步的方案的操作处理与上述包含两个相同头部的实施例类似。

另外,如图4所示,根据本发明的实施例,还提供一种用于降低共享存储器的数据讹误的设备100,其中共享存储器包括一个头部段和一个数据段,以及所述头部段包括存储有控制信息的至少两个头部。该设备100包括:判断装置110,用于判断所述至少两个头部中的一个头部中是否有数据讹误;以及第一拷贝装置120,用于如果所述一个头部中有数据讹误,则将其他头部中的任意一个头部中的控制信息拷贝到所述一个头部中。优选地,该设备100还包括:第二拷贝装置130,用于如果所述一个头部中没有数据讹误,则将所述一个头部中的控制信息拷贝到其它头部中。

优选地,该设备100还包括:数据段访问装置140,用于根据所述至少两个头部中的任意一个头部中的控制数据对所述共享存储器的数据段进行访问。更优选地,该设备100还包括:控制信息更新装置150,用于在由所述数据段访问装置140执行的对所述共享存储器的数据段的访问之后,对所述至少两个头部中的任意一个头部中的控制信息进行更新;以及第三拷贝装置160,用于将所述更新的控制信息拷贝到除所述已更新的头部之外的其它头部中。

根据本发明第一实施例的设备100中各个装置的具体操作细节对应于根据本发明第一实施例的方法的步骤,在此不作赘述。

(第二实施例)

通常,在初始化共享存储器时,针对该共享存储器仅仅创建一个互斥体。但是,在例如Window的某些操作系统环境下,如果当前访问共享存储器的进程由于某些原因而突然崩溃,则在可能引起共享存储器中的数据讹误的同时会出现互斥体变为遗弃状态。也就是说,对于下一个进程来说,该互斥体呈现为空闲状态但不可用。本发明的第二实施例旨在克服上述缺陷。

根据本发明的第二实施例的原理在于:在创建共享存储器时提前创建包括多个互斥体的一个互斥体阵列。一旦进程崩溃使得阵列中当前正在被使用的互斥体变为遗弃状态,则即将访问该互斥体的另一个进程将自动地切换到互斥体阵列中下一个可锁定的互斥体。在本发明的第二实施例中,可以定制互斥体阵列的大小,例如根据需要,该互斥体阵列包括8个互斥体、16个互斥体或者32个互斥体等等。在实际应用中,包括8个互斥体的阵列足够使用。

下面结合附图5到7,详细说明本发明的第二实施例。

图5示出了根据本发明的第二实施例的共享存储器的数据结构。

根据本发明的第二实施例的共享存储器10’不同于根据本发明的第一实施例的共享存储器布局10之处在于:增加了两个新的字段,即互斥体索引(Mutexindex)字段113和互斥体位图(Mutexmap)字段114。所增加的两个字段可以位于共享存储器的头部内,也可以位于共享存储器的头部外。在图5所示的布局中,这两个字段位于共享存储器的头部之外。

在本发明的第二实施例中,互斥体索引字段113用于存储正在访问共享存储器的进程所拥有的互斥体的索引。互斥体索引字段113为数据类型,其中在32位和64位平台上,对其的读取/写入操作是不可分的,例如符号/无符号短型,符号/无符号整数型。

在本发明的第二实施例中,互斥体位图字段114用于标识阵列中各个互斥体是否是第一次被使用。图6示出了互斥体位图字段114的一个例子,其中“1”表示对应的互斥体被使用过,而“0”表示对应的互斥体没有被使用过。

通常在创建/初始化共享存储器之后,“互斥体索引”字段和“互斥体位图”字段被设置为零,这意味着在开始时,互斥体[0]将被使用,并且至今没有互斥体被访问。在本发明的第二实施例中,重要的是,在创建共享存储器的同时提前创建阵列中的所有互斥体,并且确保在运行期间两个或更多个进程同时要求获得互斥体时不发生冲突。本领域技术人员都能理解,图5和6所示的例子仅仅是示例性的,并非限定性的。

下面结合图7描述根据本发明的第二实施例的用于共享存储器访问控制的方法。

首先在步骤S201,判断当前互斥体的状态。

如果在步骤S201中判定当前互斥体处于正在被使用状态,则处理返回步骤S201,直到当前的互斥体被释放并且可使用。

如果在步骤S201中的判定结果为该互斥体处于可用状态,则在步骤S202,利用该互斥体对共享存储器进行独占访问。在步骤S203,在完成对共享存储器的独占访问之后,释放该互斥体,以便于下一个进程所用。

如果在步骤S201中的判定结果为该互斥体为处于遗弃状态,则处理前进到步骤S204。

在步骤S204,判定阵列中的下一个互斥体的状态。

具体地,首先将当前索引值加一以得到新的索引值。然后判定所得到的新索引值是否大于存储器阵列的尺寸。

如果新索引值大于互斥体阵列的尺寸,则这表明不存在可用的互斥体。在这种情况下,处理以当前互斥体处于遗弃状态而结束。实际上,正如上面所述的,如果互斥体阵列的尺寸被设置为足够大(例如包括8个互斥体),则一般情况下不会出现上述以当前互斥体处于遗弃状态而结束的情况。

另外,当所得到的新索引值小于存储器阵列的尺寸时,判定与新的索引值对应的下一个互斥体的状态。

如果在步骤S204中判定该下一个互斥体处于遗弃状态,则重复步骤S204,查看再下一个互斥体的状态。

如果在步骤S204中判定该下一个互斥体处于正在被使用状态,则处理返回到步骤S201。

如果在步骤S204,判定该下一个互斥体处于可用状态,则处理前进到步骤S205。

在步骤S205中,判定该下一个互斥体是否是第一次被使用。优选地,通过查看与下一个互斥体对应的“互斥体位图”字段中的数值,来确定该下一个互斥体是否是第一次被使用。例如,如果该数值为“0”,则表示其是第一次被使用;如果该数值为“1”,则表示其已经被使用过。

如果在步骤S205判定该下一个互斥体是第一次被使用,则处理前进到步骤S206。在此,请注意,由于该下一个互斥体是第一次被使用,所以存在上一次进程对共享存储器的访问出现崩溃并且共享存储器的头部出现数据讹误的可能性。在这种情况下,需要执行如下步骤S206到S209的处理,即需要执行本发明第一实施例的处理。

在步骤S206中,为第一头部111产生一个当前校验值,用于与已存储在第一头部111的校验值字段111B中的先前校验值相比较。

在步骤S207中,将在步骤206中产生的当前校验值和与已存储的先前校验值进行比较。如果比较结果是两者不相同,则处理前进到步骤S208。如果比较结果是两者相同,则处理前进到步骤S209。

在步骤S208,将第二头部112中的控制信息拷贝到第一头部111中,以修复第一头部111中的控制信息,然后处理前进到步骤S209,

在步骤S209,利用当前的互斥体索引值更新“互斥体索引”字段中的数值,并且更新“互斥体位图”字段,以标识与该互斥体索引值对应的互斥体被使用。然后处理前进到步骤S202进行正常的共享存储器访问处理,并在步骤S203中释放互斥体,然后结束该处理。

另外,如果在步骤S205确定该下一个互斥体以前曾经被使用过,则表明上一个进程没有出现崩溃情况,并且共享存储器10的第一头部不存在数据讹误。在这种情况下,不需要步骤S206到S209的处理。处理直接前进到步骤S202进行正常的共享存储器访问处理,并在步骤S203中释放互斥体,然后结束该处理。

与根据本发明的第一实施例相比,在根据本发明的第二实施例中设置了包括多个互斥体的互斥体阵列,并且在共享存储器中增加了互斥体索引字段和互斥体位图字段。这样,在根据本发明的第二实施例中,即使在共享存储器的整个生命周期期间,一些互斥体处于遗弃状态,也总是存在另一个待用的互斥体,除非用尽了整个互斥体阵列。正如上文所述的,在实践中,如果将互斥体阵列定义为“≥8”,则可以达到100%的可用性。

上文参考附图对本发明的第一和第二实施例做了详细说明。但是,应该理解是,在实际环境中,可以对第一和第二实施例中各个特征和步骤进行任意组合。

本发明可通过多种编程语言来实现,包括但不限于C、C++、Dephi、Visual Basic等等。

本发明可以以硬件、软件、固件以及它们的组合来实现。本领域技术人员应该认识到,也可以在供任何合适数据处理系统使用的信号承载介质上所设置的计算机程序产品中体现本发明。这种信号承载介质可以是传输介质或用于机器可读信息的可记录介质,包括磁介质、光介质或其它合适介质。可记录介质的例子包括:硬盘驱动器中的磁盘或软盘、用于光驱的光盘、磁带,以及本领域技术人员所能想到的其它介质。本领域技术人员应该认识到,具有合适编程装置的任何通信终端都将能够执行如程序产品中体现的本发明方法的步骤。

从上述描述应该理解,在不脱离本发明真实精神的情况下,可以对本发明各实施例进行修改和变更。本说明书中的描述仅仅是用于说明性的,而不应被认为是限制性的。本发明的范围仅受所附权利要求书的限制。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号