支持多核控制器上的相干数据访问的服务和系统的制作方法
【技术领域】
[0001]本发明大体涉及用于支持在多核控制器上的相干数据访问的系统和方法,并且更具体地涉及提供两个缓冲区、指示符和同步协议的系统和方法,该同步协议允许从一个缓冲区读取而写入另一缓冲区,并且其中读和写任务在这两个缓冲区之间切换。
【背景技术】
[0002]现代车辆使用各种嵌入式电子控制器来改善车辆的性能、舒适性、安全性等等。这样的控制器包括发动机控制器、悬挂控制器、转向控制器、动力系控制器、气候控制控制器、信息娱乐系统控制器、底盘系统控制器等等。这些控制器通常需要执行其控制功能的专用软件和算法。
[0003]车辆电子控制器的当前趋势是针对在公共控制器上操作的不同功能提供多个软件应用。例如,适应性巡航控制(ACC)系统、车道定中系统、稳定性控制系统等等均是本领域公知的并且全部以某种方式自动地控制车辆转向和/或制动。这些系统经常使用相同的传感器输入和其他变量(有时被称为全球变量),当其被存储在存储器中时能够被多于一个的软件应用使用。例如,ACC系统在其在处理器上操作期间可以读取传感器数据并且将传感器数据写入到控制器存储器中,并且车道定中系统和其他软件应用当它们在处理器上运行时可以读取该数据。因此,这在许多情况下是有意义的,例如在同一处理器上运行多个软件应用的这些情况。
[0004]提供在公共控制器上运行的多个相关软件应用对于减少系统硬件和成本具有明显优势。然而,在同一处理器上操作不同软件应用增加控制器的复杂性,这是因为运行不同软件应用且防止软件应用彼此干涉所需的调度。当车辆OEM在已经具有由供应商提供的软件的控制器上提供额外软件时,这样的在单个处理器上操作的混合使用的应用进一步增加了复杂性。
[0005]在多个相关软件应用和/或多核计算机环境中,如果执行的一个或更多个软件应用试图在相同的关键资源上同时操作,则会产生问题。例如当软件应用试图同时访问需要被原子化地更新的共享数据记录时,其会导致竞态条件,进而会导致程序错误。同步程序被用于防止这些条件发生。公知的同步方法使用锁定机制或无锁机制来提供对关键资源的软件应用访问以便防止竞态条件和类似问题的发生。
[0006]锁定机制使用的方法是一次仅允许一个软件应用来获取锁以及随后在关键资源上进行处理操作。当软件应用持有至关键资源的锁时,试图访问该关键资源的其他软件应用将被暂停并被置于等待队列中。一旦锁被释放,则在等待队列开头处的下一软件应用将得到锁并被允许前进到处理操作。虽然上文讨论的锁定同步方法防止了竞态条件,但是软件应用的必要暂停减慢了处理。此外,如果持有锁的软件应用无法完成处理,则程序会变得无响应。
[0007]另一公知方法(通常被称为无锁同步)确保仅一个软件应用能够更新关键资源。如果在第一个软件应用正在更新关键资源的同时第二个软件应用试图更新,则第二个软件应用的企图将失败。如果第二个软件应用失败,则在第一个软件应用完成对关键资源的更新之后第二个软件应用将重新起动更新企图。虽然无锁同步相比于锁定同步能够产生更好的执行性能,但是它并不总是有可能执行用于一些关键资源。其它公知方法(例如那些无等待的方法)需要过多的存储器并且需要数据组的最少三个副本。
【发明内容】
[0008]下述公开内容描述了用于访问控制器上的相干数据的系统和方法。该系统和方法包括每个均可以被读取或写入的第一缓冲区和第二缓冲区以及指示出第一或第二缓冲区中的哪个被读取而第一或第二缓冲区中的另一个被写入的指示符。该系统和方法也包括读同步协议和写同步协议,该读同步协议允许从指示符指示出是读缓冲区的缓冲区读取相干数据,该写同步协议允许向指示符指示出是写缓冲区的缓冲区写入相干数据。
[0009]方案1.一种用于访问控制器上的相干数据的方法,所述方法包括:
提供第一缓冲区和第二缓冲区,每个缓冲区都可以被读取或写入;
提供指示符,所述指示符指示所述第一或第二缓冲区中的哪个被读取而所述第一或第二缓冲区中的另一个被写入;
执行读同步协议,所述读同步协议允许从所述指示符指示是所述读缓冲区的缓冲区读取所述相干数据;以及
执行写同步协议,所述写同步协议允许向所述指示符指示是所述写缓冲区的缓冲区写入所述相干数据。
[0010]方案2.根据方案I所述的方法,其中,必须被一起写入的所述相干数据被归类成数据组。
[0011]方案3.根据方案I所述的方法,其中,所述相干数据是可执行程序的原子级元素。
[0012]方案4.根据方案I所述的方法,其中,一旦完成写过程,所述指示符从指示所述写缓冲区切换成指示所述写缓冲区作为所述读缓冲区。
[0013]方案5.根据方案I所述的方法,其中,执行所述读同步协议进一步包括将所述指示符本地地存储在读线程中以便防止发生由于所述指示符改变了哪个缓冲区是所述读缓冲区且哪个缓冲区是所述写缓冲区的指示而导致的讹误。
[0014]方案6.根据方案5所述的方法,其中,执行所述读同步协议进一步包括确定在所述读期间所述指示符是否改变哪个缓冲区是所述读缓冲区且哪个缓冲区是所述写缓冲区的指示,并且如果是,则再次本地存储所述指示符并且再次读取以便获得最新更新的相干数据。
[0015]方案7.根据方案I所述的方法,其中,执行所述写同步协议进一步包括锁定主核的操作系统调度程序,使得所述相干数据可以被写入到所述写缓冲区而不会有更高优先级任务的先占,从而使得尽可能快地执行所述相干数据的写入。
[0016]方案8.—种用于访问车辆控制器上的相干数据的方法,所述方法包括:
提供第一缓冲区和第二缓冲区,每个缓冲区都可以被读取或写入;
提供指示符,所述指示符指示所述第一或第二缓冲区中的哪个被读取而所述第一或第二缓冲区中的另一个被写入,其中,在完成到所述写缓冲区的写入之后所述指示符切换所述指示;
执行读同步协议,所述读同步协议允许从所述指示符指示是所述读缓冲区的缓冲区读取相干数据;以及
执行写同步协议,所述写同步协议允许向所述指示符指示是所述写缓冲区的缓冲区写入相干数据。
[0017]方案9.根据方案8所述的方法,其中,必须被一起写入的所述相干数据被归类成数据组。
[0018]方案10.根据方案8所述的方法,其中,所述相干数据是可执行程序的原子级元素。
[0019]方案11.根据方案8所述的方法,其中,多个软件应用控制车辆功能。
[0020]方案12.根据方案8所述的方法,其中,执行所述读同步协议进一步包括锁定主核的操作系统调度程序以便确保在所述读同步协议期间不发生任务先占,以及将所述指示符本地地存储在读线程中以便防止发生由于所述指示符改变哪个缓冲区是所述读缓冲区且哪个缓冲区是所述写缓冲区的指示而导致的讹误。
[0021]方案13.根据方案12所述的方法,其中,所述读同步协议进一步包括确定在所述读期间所述指示符是否改变哪个缓冲区是所述读缓冲区且哪个缓冲区是所述写缓冲区的指示,并且如果是,则再次本地地存储所述指示符并且再次读取以便获得最新更新的相干数据。
[0022]方案14.根据方案8所述的方法,其中,所述写同步协议进一步包括锁定主核的所述OS调度程序使得所述相干数据可以尽可能快地被写入到所述写缓冲区而不会被更高优先级的OS任务先占,以及在完成写入且所述指示符已经切换之后释放所述主核的所述调度。
[0023]方案15.—种用于访问控制器上的相干数据的系统,所述系统包括:
第一和第二缓冲区,每个缓冲区都可以被读取或写入;
指示符,所述指示符指示所述第一或第二