用于永久存储实时数据流的具有原子事务的双重缓冲的制作方法
【专利摘要】本公开涉及用于永久存储实时数据流的具有原子事务的双重缓冲。本发明提供了一种方法,所述方法包括:在存储器中,配置第一缓冲区以存储第一缓冲区数据,配置第二缓冲区以存储第二缓冲区数据,以及配置指示永久存储至存储设备的实时数据的永久存储大小的变量。在所述存储设备上,文件被配置成存储所述实时数据,并且字段被配置成存储所述变量。接收所述实时数据的流,并且所述流被附加至所述第一缓冲区数据。在满足写入准则时,将所述第一缓冲区数据与所述第二缓冲区数据进行交换,将所述第二缓冲区数据的缓冲区大小添加至所述变量,以及将所述第二缓冲区数据从所述第二缓冲区传递至写入高速缓存。在满足提交准则时,将存储在所述写入高速缓存中的所述流附加至所述文件,以及将所述变量永久存储至所述字段。
【专利说明】用于永久存储实时数据流的具有原子事务的双重缓冲
【技术领域】
[0001]本申请大体涉及处理实时数据,并且具体涉及使用具有原子事务的双重缓冲处理实时电生理数据。
【背景技术】
[0002]许多各种不同医疗规程涉及将物体(诸如传感器、管、导管、分配设备以及植入物)置于患者体内。实时成像方法通常用于这些手术期间协助医生将对象和其周围的事物可视化。然而,在大多数的情况下,实时三维成像是不可能的或不可取的。相反,通常利用被配置成获取内部对象的实时空间坐标的医疗系统。
[0003]医疗规程期间,医疗系统可以收集包括模拟EP数据和/或数字EP数据的实时电生理(EP)数据。模拟EP数据的实例包括但不限于电极的电压和电流、患者体温以及从其他传感器收集到的数据。数字EP数据的实例包括但不限于其他系统所提供的数字数据和信号处理计算的结果,诸如导管的空间位置和患者呼吸状态。
[0004]以上描述给出了本领域中相关技术的总体概述,不应当被理解为承认了其包含的任何信息构成对抗本专利申请的现有技术。
【发明内容】
[0005]在此根据本发明的实施例来提供一种用于存储实时数据的方法,包括:在存储器中,配置第一缓冲区以存储第一缓冲区数据,配置第二缓冲区以存储第二缓冲区数据,以及配置指示永久存储至存储设备的实时数据的永久存储大小的变量;在存储设备上,配置用以存储实时数据的文件并且配置用以存储变量的字段;由处理器接收实时数据的流;以及将实时数据的流附加至第一缓冲区数据。该方法还包括:在满足写入准则时,将第一缓冲区中的第一缓冲区数据与第二缓冲区中的第二缓冲区数据进行交换;将第二缓冲区中的第二缓冲区数据的缓冲区大小添加至变量;以及调用写入函数以将第二缓冲区数据从第二缓冲区传递至写入高速缓存。该方法还包括:在满足提交准则时,调用提交函数以将存储在写入高速缓存中的实时数据的流附加至文件,以及将变量永久存储至字段。
[0006]在一些实施例中,实时数据可以包括在执行医疗规程时收集到的电生理(EP)数据。在另外的实施例中,EP数据可以选自模拟数据和数字数据。在另外的实施例中,模拟数据可以选自包括电压、电流以及温度的列表。在补充的实施例中,数字数据可以选自包括图像数据、位点测量、力测量以及呼吸状态的列表。
[0007]在另外的实施例中,第一缓冲区可存储在存储器中的第一地址,并且第二缓冲区可存储在存储器中的第二地址,并且其中将第一缓冲区中的第一缓冲区数据与第二缓冲区中的第二缓冲区数据进行交换包括使缓冲区指针中存储的缓冲区地址在第一地址和第二地址之间切换,由此切换第一缓冲区和第二缓冲区的角色。
[0008]在另外的实施例中,该方法可包括配置用以保护第一缓冲区的第一读出器-写入器锁定和用以保护第二缓冲区和变量的第二读出器-写入器锁定。在包括第一读出器锁定和第二读出器锁定的一些实施例中,该方法可包括:在附加实时数据的流之前,获取用于第一读出器-写入器锁定的写入器锁定;以及在附加实时数据的流之后,将写入器锁定从第一读出器-写入器锁定释放。在包括第一读出器锁定和第二读出器锁定的另外的实施例中,该方法可包括:在满足写入准则时并在交换第一缓冲区和第二缓冲区之前,获取用于第一读出器-写入器锁定的第一写入器锁定和用于第二读出器-写入器锁定的第二写入器锁定;以及在将第一缓冲区中的第一缓冲区数据与第二缓冲区中的第二缓冲区数据进行交换时,释放第一写入器锁定和第二写入器锁定。
[0009]在包括第一读出器锁定和第二读出器锁定的另外的实施例中,该方法可包括:在调用写入函数之后并在将缓冲区大小添加至变量之前,获取用于第二读出器-写入器锁定的写入器锁定;清空第二缓冲区;以及在清空第二缓冲区时,释放写入器锁定。在包括第一读出器锁定和第二读出器锁定的补充的实施例中,将变量永久存储至字段可包括:获取用于第二读出器-写入器锁定的读出器锁定;将变量复制至另外变量;释放读出器锁定;以及将另外变量存储至字段。
[0010]在包括第一读出器锁定和第二读出器锁定的另外的实施例中,在接收到检索实时数据的范围的请求时,该方法可包括:计算该范围的范围大小;在存储器中,配置响应缓冲区;获取用于第一读出器-写入器锁定的第一读出器锁定和用于第二读出器-写入器锁定的第二读出器锁定;将包括范围和第一缓冲区的交集的第一数据复制至响应缓冲区,第一数据具有第一大小;将包括范围和第二缓冲区的交集的第二数据预先附加至响应缓冲区,第二数据具有第二大小;释放第一读出器锁定和第二读出器锁定;以及在范围大小大于第一大小和第二大小的总和时:从写入高速缓存和存储设备,检索包括范围的互补范围的第三数据和包括第一数据和第二数据的第四数据;以及将第三数据预先附加至响应缓冲区。
[0011]在另外的实施例中,该方法可包括配置用以保护第一缓冲区的第一读出器-写入器锁定、用以保护第二缓冲区的第二读出器-写入器锁定以及用以保护变量的第三读出器-写入器锁定。在包括第一读出器锁定、第二读出器锁定以及第三读出器锁定的一些实施例中,该方法可包括:在附加实时数据的流之前,获取用于第一读出器-写入器锁定的写入器锁定;以及在附加实时数据的流之后,将写入器锁定从第一读出器-写入器锁定释放。在包括第一读出器锁定、第二读出器锁定以及第三读出器锁定的另外的实施例中,该方法可包括:在满足写入准则时,并且在将第一缓冲区中的第一缓冲区数据与第二缓冲区中的第二缓冲区数据进交换之前,获取用于第一读出器-写入器锁定的第一写入器锁定和用于第二读出器-写入器锁定的第二写入器锁定;以及在将第一缓冲区中的第一缓冲区数据与第二缓冲区中的第二缓冲区数据进行交换时,释放第一写入器锁定和第二写入器锁定。
[0012]在包括第一读出器锁定、第二读出器锁定以及第三读出器锁定的另外的实施例中,该方法可包括:在调用写入函数之后,并且在将缓冲区大小添加至变量之前,获取用于第二读出器-写入器锁定的第一写入器锁定和用于第三读出器-写入器锁定的第二写入器锁定;清空第二缓冲区;以及在清空第二缓冲区时,释放第一写入器锁定和第二写入器锁定。在包括第一读出器锁定、第二读出器锁定以及第三读出器锁定的补充的实施例中,将变量永久存储至字段可包括:获取用于第三读出器-写入器锁定的读出器锁定;将变量复制至另外变量;释放读出器锁定;以及将另外变量存储至字段。
[0013]在包括第一读出器锁定、第二读出器锁定以及第三读出器锁定的另外的实施例中,在接收到检索实时数据的范围的请求时,该方法可包括:计算该范围的范围大小;在存储器中,配置响应缓冲区;获取用于第一读出器-写入器锁定的第一读出器锁定和用于第二读出器-写入器锁定的第二读出器锁定;将包括范围和第一缓冲区的交集的第一数据复制至响应缓冲区,第一数据具有第一大小;将包括范围和第二缓冲区的交集的第二数据预先附加至响应缓冲区,第二数据具有第二大小;释放第一读出器锁定和第二读出器锁定;以及在范围大小大于第一大小和第二大小的总和时:从写入高速缓存和存储设备,检索包括范围的互补范围的第三数据和包括第一数据和第二数据的第四数据;以及将第三数据预先附加至响应缓冲区。
[0014]在此根据本发明的实施例还提供了一种用于存储实时数据的装置,该装置包括:存储设备,该存储设备被配置成存储文件以及存储指示永久存储至文件的实时数据的永久存储大小的字段;存储器,该存储器被布置成存储被配置成存储第一缓冲区数据的第一缓冲区、被配置成存储第二缓冲区数据的第二缓冲区,以及存储指示永久存储大小的变量;以及处理器,该处理器被配置成接收实时数据的流,并将实时数据的流附加至第一缓冲区数据。在满足写入准则时,处理器还被配置成,将第一缓冲区中的第一缓冲区数据与第二缓冲区中的第二缓冲区数据进行交换;将第二缓冲区中的第二缓冲区数据的缓冲区大小添加至变量;以及调用被配置成将第二缓冲区数据从第二缓冲区传递至写入高速缓存的写入函数。在满足提交准则时,处理器还被配置成:调用被配置成将存储在写入高速缓存中的实时数据的流附加至文件的提交函数;以及将变量永久存储至字段。
[0015]在此根据本发明的实施例还提供了一种计算机软件产品,该产品包括其中存储程序指令的非暂态计算机可读介质,这些指令在被计算机读出时致使该计算机执行以下操作:在存储器中,配置第一缓冲区以存储第一缓冲区数据,配置第二缓冲区以存储第二缓冲区数据,并且配置指示永久存储至存储设备的实时数据的永久存储大小的变量;在存储设备上,配置用以存储实时数据的文件并且配置用以存储变量的字段;接收实时数据的流;以及将实时数据的流附加至第一缓冲区数据。在满足写入准则时,指令还致使计算机将第一缓冲区中的第一缓冲区数据与第二缓冲区中的第二缓冲区数据进行交换、将第二缓冲区中的第二缓冲区数据的缓冲区大小添加至变量,并且调用写入函数以将第二缓冲区数据从第二缓冲区传递至写入高速缓存。在满足提交准则时,指令另外致使该计算机调用提交函数以将存储在写入高速缓存中的实时数据的流附加至文件并且将变量永久存储至字段。
【专利附图】
【附图说明】
[0016]本文参照附图,仅以举例的方式描述本公开,在附图中:
[0017]图1是根据本发明的实施例的具有控制台的医疗系统的示意绘图,该控制台被配置成实现用于永久存储实时电生理(EP)数据的具有原子事务的双重缓冲;
[0018]图2是根据本发明的实施例的控制台的框图;和
[0019]图3A至图3D (统称图3)是根据本发明的实施例的示意性地示出一种处理实时EP数据的方法的流程图。
【具体实施方式】
[0020]
[0021]医疗规程(诸如心脏消融)期间,可能存在需要永久存储至永久存储介质(本文也被称为存储设备)(诸如硬盘)的实时电生理(EP)数据的连续流。实时EP数据大体以恒定的速率流动,但是该速率也可在手术期间改变。由于医疗数据性质,实时EP数据能以事务方式永久存储至该存储设备,使得如果发生系统故障或停电,系统应当能够识别永久存储的数据流中的最后一个可靠字节。
[0022]本发明的实施例提供了用于实现具有原子事务的双重缓冲以将实时EP数据永久存储至永久存储介质上的文件的方法。在一些实施例中,随机存取存储器(RAM)被配置成存储两个数据缓冲区并进行变量存储,并且永久存储介质被配置成存储文件和字段。如在以下解释,字段可以存储永久存储至存储介质的第一大小的实时数据,并且变量可以存储永久存储至存储介质的第一大小的实时数据加上存储在被调度成将离台至存储介质的其中一个缓冲区中的第二大小的实时数据。另外,第一读出器-写入器(RW)锁定可以被配置成保护第一缓冲区,并且第二 RW锁定可以被配置成保护第二缓冲区和变量。
[0023]在接收实时EP数据的流时,可将该流附加至第一缓冲区。周期性地,如在下文解释,第一缓冲区中累积的实时EP数据的流可以通过以下方式来传输至写入高速缓存:首先交换第一缓冲区和第二缓冲区,更新变量,然后调用写入函数以将数据从第二缓冲区传递至写入高速缓存。为将存储在写入高速缓存中的数据永久存储至永久存储介质,可以调用提交函数以将实时EP数据从高速缓存离台至永久存储介质,可将变量中的值传递至写入高速缓存,并且可以二次调用提交函数以将值从写入高速缓存离台至在存储设备上的字段。
[0024]本发明的实施例使实时EP数据的流能在没有遇到由保护系统资源的任何锁定所造成的任何延迟的情况下进行连续处理。另外,本发明的实施例对读出请求在没有遇到由正在等待的任何锁定所造成的任何延迟的情况下进行处理,只要实时EP数据仍存储在任何缓冲区中。此外,实现本发明的实施例的系统可以确保实时EP数据“块”在原子事务中提交,即使这些块以不同于将数据传递至写入高速缓存的次序的次序离台至存储设备。
[0025]系统描沭
[0026]图1是包括控制台22的医疗系统20的示意绘图,该控制台实现用于永久存储实时电生理(EP)数据的具有原子事务的双重缓冲,并且图2是根据本发明的实施例的控制台的框图。系统20包括控制台22和探头24(诸如心内导管)。在以下所述实施例中,假设探头24用于诊断或治疗处理,诸如对患者28的心脏26中的电势进行标测。作为另外一种选择,加上必要的变更,可以将探头24用于心脏中或其他身体器官中的其他治疗和/或诊断目的。
[0027]操作者30穿过患者28的血管系统插入探头24,使得探头24的远端32进入心脏26的腔室。在图1和图2所示实例中,控制台22使用磁性位点感测来确定进入心脏26内的远端32的位点坐标。为了确定位点坐标,控制台22中的驱动电路34驱动场发生器36以在患者28的体内产生磁场。通常,场发生器36包括线圈,所述线圈在患者28体外已知位点被放置在患者躯干下方。这些线圈在包含心脏26的预定工作空间内产生磁场。探头24的远端32内的磁场传感器38 (本文也被称为方位传感器38)响应于这些磁场而生成电信号。信号处理器40处理这些信号以确定远端32的位点坐标,通常包括位置和取向坐标。上文所述位点感测方法是在B1sense Webster Inc., of Diamond Bar, CA.所生产的CARTO?标测系统中实现的,并在以下引用的专利和专利申请中详细地描述。
[0028]方位传感器38将指示远端32的位点的信号传输到控制台22。方位传感器38可包括一个或多个微型线圈,并且通常包括多个沿不同的轴取向的线圈。作为另外一种选择,方位传感器38可包括任一类型的磁传感器、或其他类型的位点转换器,诸如基于阻抗的方位传感器或超声方位传感器。虽然图1示出了具有单个方位传感器的探头,但是本发明的实施例可采用具有多于一个方位传感器的探头。
[0029]虽然在本实例中,系统20利用基于磁的传感器来测量远端32的位点,但可使用其他位点跟踪技术(例如,基于阻抗的传感器)。磁性位点跟踪技术在例如美国专利5,391,199,5, 443,489,6, 788,967,6, 690,963,5, 558,091,6, 172,499,6, 177,792 中有所描述,它们的公开内容以引用方式并入本文中。基于阻抗的位点跟踪技术在例如美国专利5,983,126,6, 456,864和5,944,022中有所描述,它们的公开内容以引用方式并入本文中。
[0030]以引用方式并入本专利申请的文献将视为本专利申请的整体部分,但不包括在这些并入的文献中以与本说明书中明确或隐含地给出的定义相冲突的方式定义的任何术语,而只应考虑本说明书中的定义。
[0031]探头24还包括了包含在远端32内的力传感器42、和联接至远端的电极44。力传感器42通过向控制台生成指示远侧末端施加在心内膜组织上的力的信号来测量由探头24的远侧末端46施加至心脏26的心内膜组织的力。在一个实施例中,力传感器可包括通过远端32中的弹簧连接的磁场发射器和接收器,并且可以基于测量弹簧的挠度而生成力的指示。这类探头和力传感器的另外细节在美国专利申请公开2009/0093806和2009/0138007中有所描述,它们的公开内容以引用的方式并入本文中。作为另外一种选择,远端32可包括另一种类型的力传感器。
[0032]在一些实施例中,电极44可以被配置成用作基于阻抗的位点转换器。除此之外或作为另外一种选择,电极44可以被配置成测量在心内膜组织上的多个位置处的某个生理性质(例如,局部表面电势),和/或在消融手术期间将射频(RF)能量递送至心内膜组织。
[0033]在本文所述实施例中,处理器40被配置成收集实时电生理(EP)数据48,实时EP数据包括经由模拟/数字(A/D)转换器54接收的数字EP数据50和模拟EP数据52。数字EP数据50的实例包括但不限于来自探头24的位点测量和力测量、患者28呼吸状态以及来自诸如磁共振成像(MRI)系统或计算机断层摄影(CT)系统的医学成像系统(未示出)的图像数据。模拟EP数据52的实例包括但不限于电压、电流以及温度。
[0034]处理器40驱动显示器56向操作者30呈现示出远端32在患者体内的位点的图像58、以及关于正在进行的手术的状态信息和指导。诊断处理期间,图像58可以包括心脏26的模拟表面。在一些实施例中,操作者30可以使用一个或多个输入设备60来调控图像58。
[0035]控制台22还包括随机存取存储器(RAM) 62和存储设备64 (诸如硬盘驱动器或固态磁盘驱动器)。存储设备64可以包括多于一个物理设备。为了实现双重缓冲,存储器62包括缓冲区66和缓冲区指针68。在本文描述中,缓冲区66和缓冲区指针68可以通过将字母附加至标识数字进行区分,使得缓冲区包括缓冲区66A和66B,并且缓冲区指针包括缓冲区指针68A和68B。如在下文解释,在接收实时EP数据48时,处理器40将接收到的数据存储至由缓冲区指针68A指示的给定缓冲区66。
[0036]存储器62还包括被配置成将实时EP数据48从缓冲区66传递至写入高速缓存72的写入函数70,以及被配置成将实时EP数据从写入高速缓存离台至存储设备64上的文件76的提交函数74。存储器62另外包括指示存储在存储设备64上的实时EP数据的永久存储大小的uncommitted_size变量78、temp_committed_size变量80以及响应缓冲区82,该响应缓冲区操作将在下文描述。
[0037]存储器62还包括读出器-写入器(RW)锁定84。在本文描述中,RW锁定84可以通过将字母附加至标识数字来区分,这样,RW锁定包括读出器-写入器锁定84A、84B和84C。在本发明的实施例中,系统20可以通过利用两个或三个RW锁定84来执行具有原子事务的双重缓冲。RW锁定84被配置成控制客户端(例如,在处理器40上执行的应用程序)对存储器62中的资源(诸如缓冲区66和uncommitted_size78)的访问,从而允许同时访问用于进行读出的多个线程,但是限制访问用于对资源进行写入(或其他改变)的单个线程。在操作中,处理器40可以获取用于给定RW锁定84的读出器锁定或写入器锁定。
[0038]写入器锁定允许第一客户端从写入器锁定所保护的资源读出并对资源写入。在处理器40获取用于被配置成保护给定资源的给定RW锁定84的写入器锁定时,无法获取用于给定资源的另外的读出器锁定或写入器锁定,并且其他客户端的所有后续的读出和写入请求受阻,直到第一客户端将写入器锁定释放。
[0039]读出器锁定授予第一客户端对读出器锁定所保护的资源的只读访问权限。在处理器40获取用于被配置成保护给定资源的给定RW锁定84的读出器锁定时,可以获取用于给定资源的另外读出器锁定,并且可以处理来自在给定资源上具有读出器锁定的其他客户端的读出请求。虽然可以针对给定资源获取多于一个读出器锁定,但是将写入器锁定(并且因此任何写请求)与给定资源阻断,直到所有客户端释放它们的读出器锁定。
[0040]文件76包括永久存储的实时EP数据86和committed_size字段88。永久存储的实时EP数据86包括确认数据90和未确认数据92。如由箭头94所示,根据在下文所述实施例,committed_size88指向永久性由原子事务的完成来确认的确认数据90的最后一个字节。在通过更新committed_size88完成给定原子事务之前,未确认数据92包括已从写入高速缓存72离台至文件76的实时数据48。因此,如果发生系统故障或停电,committed,size88指向能被可靠读出的永久存储的实时EP数据86中的最后一个字节。换句话说,未确认数据92中存储的任何永久存储的实时EP数据86包括可以或可以不从写入高速缓存72完全永久存储(即,离台)至存储设备64上的文件76的实时EP数据48。
[0041]处理器40通常包括通用计算机,该计算机具有合适前端和接口电路以用于从探头24接收信号并控制控制台22的其他组件。处理器40可以在软件中编程以执行本文所述的功能。例如,可经由网络将软件以电子形式下载到控制台22,或可将软件保存在非临时性有形介质(诸如,光学、磁或电子存储介质)上。作为另外一种选择,可以通过专用或可编程数字硬件组件来实现处理器40的一些或全部功能。
[0042]实时EP数据处理
[0043]图3A是根据本发明的实施例的示意性地示出一种处理实时EP数据48的流程图。虽然本文所述实施例是使用双重缓冲和原子事务来处理在执行医疗规程时收集到的实时EP数据48,但是使用双重缓冲和原子事务来处理任何其他类型实时数据也被认为是在本发明的精神和范围内。
[0044]在第一配置步骤100中,处理器40配置用以存储文件76和committed_size88的存储设备64。虽然在图2所示实例中,永久存储的EP数据86和COmmitted_Size88被存储在文件76中,但是实时EP数据和committecLsize字段可以被存储在存储设备64上的单独文件中。
[0045]在初始步骤102 中,处理器 40 初始化 uncommitted_size78 和 temp_committed_size80,并且配置用以存储实时EP数据48的缓冲区66。为了存储实时EP数据48,处理器40配置用以存储第一缓冲区数据的第一缓冲区和用以存储第二缓冲区数据的第二缓冲区。最初,uncommitted_size78和committed_size88存储指示包括数据48的数据流的初始大小的相同的值。通常,数据流的初始大小为零,但如果数据流具有任何标头信息,那么初始大小可大于零。
[0046]在处理实时EP数据48时,缓冲区66是空的或对应于文件76中的特定范围。在本文所述实施例中,无论何时使用术语缓冲区66或给定缓冲区66,两个术语都指存储在缓冲区和文件76中的对应范围中的实时EP数据。
[0047]如下文在图3B中所述,处理器40将实时EP数据48存储至缓冲区指针68A所指示的给定缓冲区66。因此,当前由缓冲区指针68A指示的给定缓冲区包括在本文中称为第一缓冲区的“活动”缓冲区,并且当前未由缓冲区指针指示的缓冲区包括在本文中称为第二缓冲区的“失活”缓冲区。
[0048]在本文的实施例中,缓冲区指针68A始终指向第一缓冲区,并且指针68B始终指向第二缓冲区。因此,如果第一缓冲区包括缓冲区66A并且第二缓冲区包括缓冲区66B,那么缓冲区指针66A指向缓冲区66A并且缓冲区指针68B指向缓冲区66B。同样,如果第一缓冲区包括缓冲区66B并且第二缓冲区包括缓冲区66A,那么缓冲区指针66A指向缓冲区66B并且缓冲区指针68B指向缓冲区66A。如在下文解释,处理器40可以通过将缓冲区指针68A中存储的第一地址与缓冲区指针68B中存储的第二地址进行交换来将第一缓冲区和第二缓冲区交换。
[0049]在第二配置步骤104中,处理器40配置用以保护第一缓冲区的锁定84A并且配置用以保护第二缓冲区和uncommitted_size78的锁定84B。在另选的实施例中,处理器40可以配置用以保护第一缓冲区的锁定84A,配置用以保护第二缓冲区的锁定84B,并且配置用以保护 uncommitted_size78 的锁定 84C。
[0050]在完成第二配置步骤104时,处理器40可以同时执行第一执行步骤106(如在下文在图3B中所述)中的一个或多个实时数据接收线程、第二执行步骤108中的单个实时数据写入和提交线程(如下文在图3C中所述)以及第三执行步骤110中的一个或多个实时数据读出线程(如下文在图3D中所述)。
[0051]图3B是根据本发明的实施例的示意性地示出实时数据接收线程中执行的步骤的流程图。在第一比较步骤120中,处理器40等待接收实时EP数据48。在接收实时EP数据48的流时,在获取步骤122中,处理器40获取用于RW锁定84A的写入器锁定(S卩,以便保护第一缓冲区)。在附加步骤124中,处理器40将接收到的实时EP数据48的流附加至第一缓冲区数据。最后,在释放步骤126中,处理器40将写入器锁定从RW锁定84A释放,并且方法继续步骤120。
[0052]图3C是根据本发明的实施例的示意性地示出实时数据写入和提交线程中执行的步骤的流程图。在第一比较步骤130中,处理器40等待,直至写入准则得到满足。写入准则可以包括:包括第一特定量(例如,I兆字节)的数据的第一缓冲区;或者自从处理器40最后调用写入函数70起的第一特定的时间段(例如,20秒)。
[0053]在标识已满足的写入标准时,处理器40在第一获取步骤132中获取用于RW锁定84A的第一写入器锁定和用于RW锁定84B的第二写入器锁定,并且在交换步骤134中,处理器通过将第一缓冲区中的第一缓冲区数据与第二缓冲区中的第二缓冲区数据进行交换来将第一缓冲区和第二缓冲区交换。在一些实施例中,第一缓冲区存储在由缓冲区指针68A指示的存储器62中的第一地址,并且第二缓冲区存储在由缓冲区指针68B指示的存储器中的第二地址,并且将第一缓冲区中的第一缓冲区数据与第二缓冲区中的第二缓冲区数据进行交换,处理器40使得存储在缓冲区指针68A中的地址在第一地址和第二地址之间“切换”(即,交换存储在缓冲区指针68A和68B中的地址),由此切换第一缓冲区和第二缓冲区的角色。
[0054]例如,如果缓冲区指针68A当前指向缓冲区66A,处理器40将缓冲区66B的地址存储至缓冲区指针68A以便将第一缓冲区中的第一缓冲区数据与第二缓冲区中的第二缓冲区数据进行交换。同样,如果缓冲区指针68A当前指向缓冲区66B,处理器40将缓冲区66A的地址存储至缓冲区指针68A以便将第一缓冲区中的第一缓冲区数据与第二缓冲区中的第二缓冲区数据进行交换。
[0055]在将第一缓冲区中的第一缓冲区数据与第二缓冲区中的第二缓冲区数据进行交换时,以上所述实施例中接收到的实时EP数据的流被存储在第二缓冲区中,并且处理器40可以执行实时数据接收线程以将实时EP数据48的另外流存储至第一缓冲区。在第一释放步骤136中,处理器40将第一写入器锁定从RW锁定84A释放,并将第二写入器锁定从RW锁定84B释放,并且在写入步骤138中,处理器调用写入函数70以将第二缓冲区数据从第二缓冲区传递至写入高速缓存72。
[0056]在第二获取步骤140中,处理器40获取用于RW锁定84B的第三写入器锁定,并且在递增步骤142中,该处理器使得uncommitted_size78按第二缓冲区中存储的第二缓冲区数据的大小递增。在清空步骤144中,处理器40清空第二缓冲区,并且在第二释放步骤146中,该处理器将第三写入器锁定从RW锁定84B释放。
[0057]在其中RW锁定84C保护uncommitted_size78的出处同时所述另选的实施例中,处理器40在步骤140中获取用于RW锁定84C的第四写入器锁定,并且该处理器在步骤146中将第四写入器锁定从RW锁定84C释放。在另选的实施例中,在步骤140中获取用于RW锁定84B的第三写入器锁定保护第二缓冲区。
[0058]在第二比较步骤148中,处理器40进行检查,看看提交准则是否已被满足。提交准则可以包括:包括第二特定量(例如,2兆字节)的数据的第一缓冲区;或者自从处理器40最后调用提交函数74起的第二特定的时间段(例如,40秒)。
[0059]如果已经满足提交准则,那么处理器40在第三获取步骤150中获取用于RW锁定84B的读出器锁定,在复制步骤152中将uncommitted_size78中存储的值复制至temp_committed_size80,并且在第三释放步骤154中将读出器锁定从RW锁定84B释放。在其中RW锁定84C保护uncommitted_size78的出处同时所述另选的实施例中,处理器40在步骤150中获取用于RW锁定84C的读出器锁定,并且在步骤154中将读出器锁定从RW锁定84C释放。
[0060]在提交步骤156中,处理器40调用提交函数74以将当前存储在写入高速缓存72中的实时EP数据的流永久存储(即,离台)至存储设备64上的文件76。可以存在这种情况:处理器40上执行的操作系统(未示出)以将实时EP数据从写入高速缓存72离台至文件76。在这些情况下,处理器40可以跳过步骤156。
[0061]最终,在永久存储步骤158中,处理器40将存储在emp_committed_size80中的值永久存储至committed_size88,并且方法继续步骤130。为了将存储在temp_committed_size80中的值永久存储至committed_size88,处理器40可以调用写入函数70以将值传递至写入高速缓存72,并且可以调用提交函数74以将值离台至committed_size88。返回步骤148,如果提交准则尚未满足,那么方法继续步骤130。
[0062]图3D是根据本发明的实施例的示意性地示出实时数据读出线程中执行的步骤的流程图。在本文所述实施例中,实时数据线程被配置成处理对当前存储在以下项中的实时EP数据48的范围的读出请求:
[0063]?第一缓冲区。
[0064]?第一缓冲区和第二缓冲区。
[0065].第一缓冲区、第二缓冲区以及写入高速缓存72和/或文件76。
[0066]?第二缓冲区。
[0067].第二缓冲区和写入高速缓存72和/或文件76。
[0068].高速缓存72和/或文件76
[0069]在第一比较步骤160中,处理器40等待接收读出请求,并且在处理器40接收读出请求以检索实时EP数据48的范围时,该处理器在计算步骤162中计算所请求的数据的范围的范围大小,并且在配置步骤164中配置存储器62中的响应缓冲区82。为了配置响应缓冲区82,处理器40将大小是根据计算出的范围大小的存储器62块分配至响应缓冲区。
[0070]在获取步骤166中,处理器40获取用于RW锁定84A的第一读出器锁定,并且获取用于RW锁定84B的第二读出器锁定。在复制步骤168中,处理器40将包括所请求的范围和第一缓冲区的第一交集的第一数据复制至响应缓冲区82,第一数据具有第一大小。在其中第一缓冲区未存储所请求的范围中的任何实时EP数据的情况下,第一数据则包括空子集,并且第一大小为零。
[0071]在第一预先附加步骤170中,处理器40将包括所请求的范围和第二缓冲区的第二交集的第二数据预先附加至响应缓冲区82,第二数据具有第二大小。在其中第二缓冲区未存储所请求的范围中的任何实时EP数据的情况下,第二数据则包括空子集,并且第二大小为零。
[0072]在释放步骤172中,处理器40将第一读出器锁定从RW锁定84A释放,并且将第二读出器锁定从RW锁定84B释放。在比较步骤174中,如果范围大小大于第一大小和第二大小的总和,那么在检索步骤176中,处理器40检索包括所请求的范围的互补范围的第三数据和包括第一数据和第二数据的第四数据。
[0073]在第二预先附加步骤178中,处理器40将第三数据预先附加至响应缓冲区82,并且方法继续步骤160。在一些实施例中,在完成填充响应缓冲区82(在步骤170或步骤176中),处理器40可以传递对指示响应缓冲区82的地址的读出请求的响应。在另选的实施例中,响应可以包括响应缓冲区82。返回步骤174,如果范围大小小于或等于第一大小和第二大小的总和,那么方法继续步骤160。
[0074]如出处同时所述,本发明的实施例使用原子事务接收实时EP数据并将该数据永久存储至存储设备64。在以上所述的实施例中,给定原子事务是以图3B中的步骤120开始,并以图3D中的步骤178结束。
[0075]应当理解,上述实施例仅以举例的方式进行引用,并且本发明并不限于上面具体示出和描述的内容。相反,本发明的范围包括上述各种特征的组合和子组合以及它们的变型和修改,本领域技术人员在阅读上述说明时将会想到所述变型和修改,并且所述变型和修改并未在现有技术中公开。
【权利要求】
1.一种用于存储实时数据的方法,包括: 在存储器中,配置第一缓冲区以存储第一缓冲区数据,配置第二缓冲区以存储第二缓冲区数据,以及配置指示永久存储至存储设备的所述实时数据的永久存储大小的变量; 在所述存储设备上,配置用以存储所述实时数据的文件以及配置用以存储所述变量的字段; 由处理器接收所述实时数据的流; 将所述实时数据的所述流附加至所述第一缓冲区数据; 在满足写入准则时: 将所述第一缓冲区中的所述第一缓冲区数据与所述第二缓冲区中的所述第二缓冲区数据进行交换; 将所述第二缓冲区中的所述第二缓冲区数据的缓冲区大小添加至所述变量;以及 调用写入函数以将所述第二缓冲区数据从所述第二缓冲区传递至写入高速缓存;以及 在满足提交准则时: 调用提交函数以将存储在所述写入高速缓存中的所述实时数据的所述流附加至所述文件;以及 将所述变量永久存储至所述字段。
2.根据权利要求1所述的方法,其中所述实时数据包括在执行医疗规程时收集到的电生理伍?)数据。
3.根据权利要求2所述的方法,其中所述数据选自模拟数据和数字数据。
4.根据权利要求3所述的方法,其中所述模拟数据选自包括电压、电流和温度的列表。
5.根据权利要求3所述的方法,其中所述数字数据选自包括图像数据、位点测量、力测量和呼吸状态的列表。
6.根据权利要求1所述的方法,其中所述第一缓冲区存储在所述存储器中的第一地址,并且所述第二缓冲区存储在所述存储器中的第二地址,并且其中将所述第一缓冲区中的所述第一缓冲区数据与所述第二缓冲区中的所述第二缓冲区数据进行交换包括使缓冲区指针中存储的缓冲区地址在所述第一地址和所述第二地址之间切换,由此切换所述第一缓冲区和所述第二缓冲区的角色。
7.根据权利要求1所述的方法,包括配置用以保护所述第一缓冲区的第一读出器-写入器锁定和用以保护所述第二缓冲区和所述变量的第二读出器-写入器锁定。
8.根据权利要求7所述的方法,包括: 在附加所述实时数据的所述流之前,获取用于所述第一读出器-写入器锁定的写入器锁定;以及 在附加所述实时数据的所述流之后,将所述写入器锁定从所述第一读出器-写入器锁定释放。
9.根据权利要求7所述的方法,包括: 在满足所述写入准则时并在交换所述第一缓冲区和所述第二缓冲区之前,获取用于所述第一读出器-写入器锁定的第一写入器锁定和用于所述第二读出器-写入器锁定的第二写入器锁定;以及 在将所述第一缓冲区中的所述第一缓冲区数据与所述第二缓冲区中的所述第二缓冲区数据进行交换时,释放所述第一写入器锁定和所述第二写入器锁定。
10.根据权利要求7所述的方法,包括: 在调用所述写入函数之后并在将所述缓冲区大小添加至所述变量之前,获取用于所述第二读出器-写入器锁定的写入器锁定; 清空所述第二缓冲区;以及 在清空所述第二缓冲区时释放所述写入器锁定。
11.根据权利要求7所述的方法,其中将所述变量永久存储至所述字段包括: 获取用于所述第二读出器-写入器锁定的读出器锁定; 将所述变量复制至另外变量; 释放所述读出器锁定;以及 将所述另外变量存储至所述字段。
12.根据权利要求7所述的方法,包括在接收到检索所述实时数据的范围的请求时: 计算所述范围的范围大小; 在所述存储器中,配置响应缓冲区; 获取用于所述第一读出器-写入器锁定的第一读出器锁定和用于所述第二读出器-写入器锁定的第二读出器锁定; 将包括所述范围和所述第一缓冲区的交集的第一数据复制至所述响应缓冲区,所述第一数据具有第一大小; 将包括所述范围和所述第二缓冲区的交集的第二数据预先附加至所述响应缓冲区,所述第二数据具有第二大小; 释放所述第一读出器锁定和所述第二读出器锁定;以及 在所述范围大小大于所述第一大小和所述第二大小的总和时: 从所述写入高速缓存和所述存储设备,检索包括所述范围的互补范围的第三数据和包括所述第一数据和所述第二数据的第四数据;以及将所述第三数据预先附加至所述响应缓冲区。
13.根据权利要求1所述的方法,包括配置用以保护所述第一缓冲区的第一读出器-写入器锁定、用以保护所述第二缓冲区的第二读出器-写入器锁定、以及用以保护所述变量的第三读出器-写入器锁定。
14.根据权利要求13所述的方法,包括: 在附加所述实时数据的所述流之前,获取用于所述第一读出器-写入器锁定的写入器锁定;以及 在附加所述实时数据的所述流之后,将所述写入器锁定从所述第一读出器-写入器锁定释放。
15.根据权利要求13所述的方法,包括: 在满足所述写入准则时并在将所述第一缓冲区中的所述第一缓冲区数据与所述第二缓冲区中的所述第二缓冲区数据进行交换之前,获取用于所述第一读出器-写入器锁定的第一写入器锁定和用于所述第二读出器-写入器锁定的第二写入器锁定;以及 在将所述第一缓冲区中的所述第一缓冲区数据与所述第二缓冲区中的所述第二缓冲区数据进行交换时,释放所述第一写入器锁定和所述第二写入器锁定。
16.根据权利要求13所述的方法,包括: 在调用所述写入函数之后并在将所述缓冲区大小添加至所述变量之前,获取用于所述第二读出器-写入器锁定的第一写入器锁定和用于所述第三读出器-写入器锁定的第二写入器锁定; 清空所述第二缓冲区;以及 在清空所述第二缓冲区时,释放所述第一写入器锁定和所述第二写入器锁定。
17.根据权利要求13所述的方法,其中将所述变量永久存储至所述字段包括: 获取用于第三读出器-写入器锁定的读出器锁定; 将所述变量复制至另外变量; 释放所述读出器锁定;以及 将所述另外变量存储至所述字段。
18.根据权利要求13所述的方法,包括在接收到检索所述实时数据的范围的请求时: 计算所述范围的范围大小; 在所述存储器中,配置响应缓冲区; 获取用于所述第一读出器-写入器锁定的第一读出器锁定和用于所述第二读出器-写入器锁定的第二读出器锁定; 将包括所述范围和所述第一缓冲区的交集的第一数据复制至所述响应缓冲区,所述第一数据具有第一大小; 将包括所述范围和所述第二缓冲区的交集的第二数据预先附加至所述响应缓冲区,所述第二数据具有第二大小; 释放所述第一读出器锁定和所述第二读出器锁定;以及 在所述范围大小大于所述第一大小和所述第二大小的总和时: 从所述写入高速缓存和所述存储设备,检索包括所述范围的互补范围的第三数据和包括所述第一数据和所述第二数据的第四数据;以及将所述第三数据预先附加至所述响应缓冲区。
19.一种用于存储实时数据的装置,包括: 存储设备,所述存储设备被配置成存储文件以及存储指示永久存储至所述文件的所述实时数据的永久存储大小的字段; 存储器,所述存储器被布置成存储被配置成存储第一缓冲区数据的第一缓冲区、被配置成存储第二缓冲区数据的第二缓冲区、以及存储指示所述永久存储大小的变量;以及处理器,所述处理器被配置成: 接收所述实时数据的流, 将所述实时数据的所述流附加至所述第一缓冲区数据, 在满足写入准则时: 将所述第一缓冲区中的所述第一缓冲区数据与所述第二缓冲区中的所述第二缓冲区数据进行交换, 将所述第二缓冲区中的所述第二缓冲区数据的缓冲区大小添加至所述变量,以及调用被配置成将所述第二缓冲区数据从所述第二缓冲区传递至写入高速缓存的写入函数,以及 在满足提交准则时: 调用被配置成将存储在所述写入高速缓存中的所述实时数据的所述流附加至所述文件的提交函数,以及 将所述变量永久存储至所述字段。
20.根据权利要求19所述的装置,其中所述实时数据包括在执行医疗规程时收集到的电生理伍?)数据。
21.根据权利要求19所述的装置,其中所述数据选自模拟数据和数字数据。
22.根据权利要求21所述的装置,其中所述模拟数据选自包括电压、电流和温度的列表。
23.根据权利要求21所述的装置,其中所述数字数据选自包括图像数据、位点测量、力测量和呼吸状态的列表。
24.根据权利要求19所述的装置,其中所述处理器被配置成:将所述第一缓冲区存储在所述存储器中的第一地址,将所述第二缓冲区存储在所述存储器中的第二地址,并且通过使缓冲区指针中存储的缓冲区地址在所述第一地址和所述第二地址之间切换来将所述第一缓冲区中的所述第一缓冲区数据与所述第二缓冲区中的所述第二缓冲区数据进行交换,由此切换所述第一缓冲区和所述第二缓冲区的角色。
25.根据权利要求19所述的装置,其中所述处理器被布置成配置用以保护所述第一缓冲区的第一读出器-写入器锁定,以及配置用以保护所述第二缓冲区和所述变量的所述第二读出器-写入器锁定。
26.根据权利要求25所述的装置,其中所述处理器被配置成: 在附加所述实时数据的所述流之前,获取用于所述第一读出器-写入器锁定的写入器锁定;以及 在附加所述实时数据的所述流之后,将所述写入器锁定从所述第一读出器-写入器锁定释放。
27.根据权利要求25所述的装置,其中所述处理器被配置成: 在满足所述写入准则时并在交换所述第一缓冲区和所述第二缓冲区之前,获取用于所述第一读出器-写入器锁定的第一写入器锁定和用于所述第二读出器-写入器锁定的第二写入器锁定;以及 在将所述第一缓冲区中的所述第一缓冲区数据与所述第二缓冲区中的所述第二缓冲区数据进行交换时,释放所述第一写入器锁定和所述第二写入器锁定。
28.根据权利要求25所述的装置,其中所述处理器被配置成: 在调用所述写入函数之后并在将所述缓冲区大小添加至所述变量之前,获取用于所述第二读出器-写入器锁定的写入器锁定; 清空所述第二缓冲区;以及 在清空所述第二缓冲区时,释放所述写入器锁定。
29.根据权利要求25所述的装置,其中所述处理器被配置成通过以下操作将所述变量永久存储至所述字段: 获取用于所述第二读出器-写入器锁定的读出器锁定; 将所述变量复制至另外变量; 释放所述读出器锁定;以及 将所述另外变量存储至所述字段。
30.根据权利要求25所述的装置,其中在接收到检索所述实时数据的范围的请求时,所述处理器被布置成: 计算所述范围的范围大小; 在所述存储器中,配置响应缓冲区; 获取用于所述第一读出器-写入器锁定的第一读出器锁定和用于所述第二读出器-写入器锁定的第二读出器锁定; 将包括所述范围和所述第一缓冲区的交集的第一数据复制至所述响应缓冲区,所述第一数据具有第一大小; 将包括所述范围和所述第二缓冲区的交集的第二数据预先附加至所述响应缓冲区,所述第二数据具有第二大小; 释放所述第一读出器锁定和所述第二读出器锁定;以及 在所述范围大小大于所述第一大小和所述第二大小的总和时: 从所述写入高速缓存和所述存储设备,检索包括所述范围的互补范围的第三数据和包括所述第一数据和所述第二数据的第四数据;以及将所述第三数据预先附加至所述响应缓冲区。
31.根据权利要求19所述的装置,其中所述处理器被布置成配置用以保护所述第一缓冲区的第一读出器-写入器锁定、配置用以保护所述第二缓冲区的所述第二读出器-写入器锁定、以及配置用以保护所述变量的第三读出器-写入器锁定。
32.根据权利要求31所述的装置,其中所述处理器被配置成: 在附加所述实时数据的所述流之前,获取用于所述第一读出器-写入器锁定的写入器锁定;以及 在附加所述实时数据的所述流之后,将所述写入器锁定从所述第一读出器-写入器锁定释放。
33.根据权利要求31所述的装置,其中所述处理器被配置成: 在满足所述写入准则时并在将所述第一缓冲区中的所述第一缓冲区数据与所述第二缓冲区中的所述第二缓冲区数据进行交换之前,获取用于所述第一读出器-写入器锁定的第一写入器锁定和用于所述第二读出器-写入器锁定的第二写入器锁定;以及 在将所述第一缓冲区中的所述第一缓冲区数据与所述第二缓冲区中的所述第二缓冲区数据进行交换时,释放所述第一写入器锁定和所述第二写入器锁定。
34.根据权利要求31所述的装置,其中所述处理器被配置成: 在调用所述写入函数之后并在将所述缓冲区大小添加至所述变量之前,获取用于所述第二读出器-写入器锁定的第一写入器锁定和用于所述第三读出器-写入器锁定的第二写入器锁定; 清空所述第二缓冲区;以及 在清空所述第二缓冲区时,释放所述第一写入器锁定和所述第二写入器锁定。
35.根据权利要求31所述的装置,其中所述处理器被配置成通过以下操作将所述变量永久存储至所述字段: 获取用于第三读出器-写入器锁定的读出器锁定; 将所述变量复制至另外变量; 释放所述读出器锁定;以及 将所述另外变量存储至所述字段。
36.根据权利要求31所述的装置,其中在接收到检索所述实时数据的范围的请求时,所述处理器被配置成: 计算所述范围的范围大小; 在所述存储器中,配置响应缓冲区; 获取用于所述第一读出器-写入器锁定的第一读出器锁定和用于所述第二读出器-写入器锁定的第二读出器锁定; 将包括所述范围和所述第一缓冲区的交集的第一数据复制至所述响应缓冲区,所述第一数据具有第一大小; 将包括所述范围和所述第二缓冲区的交集的第二数据预先附加至所述响应缓冲区,所述第二数据具有第二大小; 释放所述第一读出器锁定和所述第二读出器锁定;以及 在所述范围大小大于所述第一大小和所述第二大小的总和时: 从所述写入高速缓存和所述存储设备,检索包括所述范围的互补范围的第三数据和包括所述第一数据和所述第二数据的第四数据;以及将所述第三数据预先附加至所述响应缓冲区。
37.一种计算机软件产品,所述产品包括其中存储有程序指令的非暂态计算机可读介质,所述指令在被计算机读出时致使所述计算机执行以下操作: 在存储器中,配置第一缓冲区以存储第一缓冲区数据,配置第二缓冲区以存储第二缓冲区数据,以及配置指示永久存储至存储设备的实时数据的永久存储大小的变量; 在所述存储设备上,配置用以存储所述实时数据的文件并配置用以存储所述变量的字段; 接收所述实时数据的流, 将所述实时数据的所述流附加至所述第一缓冲区数据, 在满足写入准则时: 将所述第一缓冲区中的所述第一缓冲区数据与所述第二缓冲区中的所述第二缓冲区数据进行交换, 将所述第二缓冲区中的所述第二缓冲区数据的缓冲区大小添加至所述变量,以及 调用写入函数以将所述第二缓冲区数据从所述第二缓冲区传递至写入高速缓存,以及 在满足提交准则时: 调用提交函数以将存储在所述写入高速缓存中的所述实时数据的所述流附加至所述文件,以及 将所述变量永久存储至所述字段。
【文档编号】G06F12/08GK104424133SQ201410432688
【公开日】2015年3月18日 申请日期:2014年8月28日 优先权日:2013年8月28日
【发明者】E.拉沃纳, G.科恩, R.勒曼, Y.A.蒂梅 申请人:韦伯斯特生物官能(以色列)有限公司