控制系统中管理线程的方法和装置转让专利

申请号 : CN201910228811.X

文献号 : CN110032435A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王新忠朱爱华廖亮邢佳

申请人 : 北京和利时系统工程有限公司

摘要 :

本申请公开了一种控制系统中管理线程的方法和装置。所述方法包括:获取控制系统中当前的运行周期T内运行的周期线程;确定每个周期线程在运行周期T内运行的最大超时时刻Tdead,所述最大超时时刻Tdead是确定的时刻;根据所述每个周期线程在运行周期T对应的最大超时时刻Tdead,管理所述运行周期T内运行的周期线程。

权利要求 :

1.一种控制系统中管理线程的方法,其特征在于,包括:获取控制系统中当前的运行周期T内运行的周期线程;

确定每个周期线程在运行周期T内运行的最大超时时刻Tdead,所述最大超时时刻Tdead是确定的时刻;

根据所述每个周期线程在运行周期T对应的最大超时时刻Tdead,管理所述运行周期T内运行的周期线程。

2.根据权利要求1所述的方法,其特征在于,所述获取控制系统中当前的运行周期T内运行的周期线程之前,所述方法还包括:创建一个周期监控线程,设置所述周期监控线程在整个控制系统中的优先级为最高,执行周期为最小。

3.根据权利要求1所述的方法,其特征在于,所述确定每个周期线程在运行周期T内运行的最大超时时刻Tdead,包括:根据每个周期线程被执行的周期的时长以及被执行的累计次数,确定在运行周期T内所述控制系统中每个周期线程对应的执行时刻Tschedul;

根据所述执行时刻Tschedul以及预先设置的最大超时时长Δt,计算所述每个周期线程在运行周期T对应的最大超时时刻Tdead。

4.根据权利要求3所述的方法,其特征在于,所述根据所述每个周期线程在运行周期T对应的最大超时时刻Tdead,管理所述运行周期T内运行的周期线程,包括:在运行周期T内,将当前时刻Tn与所述运行周期T内运行的每个周期线程的最大超时时刻Tdead进行比较,得到比较结果;

从所述比较结果中,选择当前时刻Tn大于最大超时时刻Tdead的目标周期线程;

对所述目标周期线程进行异常处理。

5.根据权利要求1所述的方法,其特征在于,所述获取控制系统中当前的运行周期T内运行的周期线程之前,所述方法还包括:判断所述控制系统的时钟源当前输出的运行周期是否准确;

如果时钟源当前输出的运行周期准确,则允许获取控制系统中当前的运行周期T内运行的周期线程。

6.根据权利要求5所述的方法,其特征在于,所述判断所述控制系统的时钟源当前输出的运行周期是否准确,包括:获取所述控制系统中CPU当前输出的时钟节拍的第一时长;

计算所述第一时长与预先获取的基准时钟节拍的第二时长的差值;

判断所述差值是否符合预先设置的差值判断策略;

如果所述差值符合所述差值判断策略,则确定所述控制系统的时钟源输出的运行周期准确,否则确定所述控制系统的时钟源输出的运行周期不准确。

7.根据权利要求6所述的方法,其特征在于,所述基准时钟节拍是独立于CPU的独立晶振模块输出的,所述基准时钟节拍的第二时长是根据CPU处于正常工作状态下输出的时钟节拍确定的。

8.根据权利要求2所述的方法,其特征在于,所述根据所述每个周期线程在运行周期T对应的最大超时时刻Tdead,管理所述运行周期T内运行的周期线程之后,所述方法还包括:按照预先设置的检测周期,对所述周期监控线程的工作状态进行检测;

如果在检测周期内未收到周期监控线程的检测信号,则继续等待预先设置的等待时长,如果仍未收到检测信号,则停止所述控制系统内周期线程的运行。

9.根据权利要求8所述的方法,其特征在于:

所述按照预先设置的检测周期,对周期监控线程的工作状态进行检测,包括:按照所述周期监控线程的执行周期,从控制系统的CPU获取所述周期监控线程的工作状态;

所述停止所述控制系统内周期线程的运行,包括:

发送控制信号,其中所述控制信号用于停止所述控制系统中CPU的运行。

10.一种控制系统中管理线程的装置,其特征在于,包括处理器和存储器,其中所述存储器存储计算机程序,所述处理器用于调用所述存储器中的计算机程序以实现如权利要求

1至9任一所述的方法。

说明书 :

控制系统中管理线程的方法和装置

技术领域

[0001] 本申请涉及信息处理领域,尤指一种控制系统中管理线程的方法和装置。

背景技术

[0002] 在高速铁路和城市轨道交通等列车控制系统中,随着列车控制系统功能的日益庞大,列车控制系统逐步开始基于实时操作系统实现。实时操作系统是基于优先级对线程进行调度的,存在低优先级线程无法及时调度和线程阻塞等问题。由于列车控制系统对安全性和实时性要求高,需采取有效措施及时发现系统中周期线程的调度是否存在问题,以保证周期线程在未及时调度情况下,列车控制系统可采取必要手段保障安全。
[0003] 基于实时操作系统实现的列车控制系统通常包含多个不同的周期线程,分别用于实现不同功能,每个线程的周期和优先级均不相同。图1为相关技术中列车控制系统中周期线程的示例图。图1所示的线程包括IO线程、通信线程和诊断线程,他们的周期和优先级均不同,其中,IO线程周期小、优先级高;通信线程周期中等、优先级中等;诊断检测线程周期长,优先级最低。
[0004] 在相关技术中,对于周期线程调度的监控采用的是通过一个普通周期监控线程对所有线程进行点名的方式,只要被周期监控的线程在一定时间内应答,就认为该周期线程调度正常,应答延时每周期都可能引入误差,因此会产生累积误差,长时间运行时系统运行不可靠。且该方法在线程调度故障恢复后可以对故障计数清零,重新监控周期线程调度是否正常。该方法如用使用在实时性要求高的列车控制系统中会存在较大的安全风险。

发明内容

[0005] 为了解决上述技术问题,本申请提供了一种控制系统中管理线程的方法和装置,能够提高线程管理的安全性。
[0006] 为了达到本申请目的,本申请提供了一种控制系统中管理线程的方法,包括:
[0007] 获取控制系统中当前的运行周期T内运行的周期线程;
[0008] 确定每个周期线程在运行周期T内运行的最大超时时刻Tdead,所述最大超时时刻Tdead是确定的时刻;
[0009] 根据所述每个周期线程在运行周期T对应的最大超时时刻Tdead,管理所述运行周期T内运行的周期线程。
[0010] 在一个示例性实施例中,所述获取控制系统中当前的运行周期T内运行的周期线程之前,所述方法还包括:
[0011] 创建一个周期监控线程,设置所述周期监控线程在整个控制系统中的优先级为最高,执行周期为最小。
[0012] 在一个示例性实施例中,所述确定每个周期线程在运行周期T内运行的最大超时时刻Tdead,包括:
[0013] 根据每个周期线程被执行的周期的时长以及被执行的累计次数,确定在运行周期T内所述控制系统中每个周期线程对应的执行时刻Tschedul;
[0014] 根据所述执行时刻Tschedul以及预先设置的最大超时时长Δt,计算所述每个周期线程在运行周期T对应的最大超时时刻Tdead。
[0015] 在一个示例性实施例中,所述根据所述每个周期线程在运行周期T对应的最大超时时刻Tdead,管理所述运行周期T内运行的周期线程,包括:
[0016] 在运行周期T内,将当前时刻Tn与所述运行周期T内运行的每个周期线程的最大超时时刻Tdead进行比较,得到比较结果;
[0017] 从所述比较结果中,选择当前时刻Tn大于最大超时时刻Tdead的目标周期线程;
[0018] 对所述目标周期线程进行异常处理。
[0019] 在一个示例性实施例中,所述获取控制系统中当前的运行周期T内运行的周期线程之前,所述方法还包括:
[0020] 判断所述控制系统的时钟源当前输出的运行周期是否准确;
[0021] 如果时钟源当前输出的运行周期准确,则允许获取控制系统中当前的运行周期T内运行的周期线程。
[0022] 在一个示例性实施例中,所述判断所述控制系统的时钟源当前输出的运行周期是否准确,包括:
[0023] 获取所述控制系统中CPU当前输出的时钟节拍的第一时长;
[0024] 计算所述第一时长与预先获取的基准时钟节拍的第二时长的差值;
[0025] 判断所述差值是否符合预先设置的差值判断策略;
[0026] 如果所述差值符合所述差值判断策略,则确定所述控制系统的时钟源输出的运行周期准确,否则确定所述控制系统的时钟源输出的运行周期不准确。
[0027] 在一个示例性实施例中,所述基准时钟节拍是独立于CPU的独立晶振模块输出的,所述基准时钟节拍的第二时长是根据CPU处于正常工作状态下输出的时钟节拍确定的。
[0028] 在一个示例性实施例中,所述根据所述每个周期线程在运行周期T对应的最大超时时刻Tdead,管理所述运行周期T内运行的周期线程之后,所述方法还包括:
[0029] 按照预先设置的检测周期,对所述周期监控线程的工作状态进行检测;
[0030] 如果在检测周期内未收到周期监控线程的检测信号,则继续等待预先设置的等待时长,如果仍未收到检测信号,则停止所述控制系统内周期线程的运行。
[0031] 在一个示例性实施例中,所述按照预先设置的检测周期,对周期监控线程的工作状态进行检测,包括:
[0032] 按照所述周期监控线程的执行周期,从控制系统的CPU获取所述周期监控线程的工作状态;
[0033] 所述停止所述控制系统内周期线程的运行,包括:
[0034] 发送控制信号,其中所述控制信号用于停止所述控制系统中CPU的运行。
[0035] 为了解决上述技术问题,本申请提供了一种控制系统中管理线程的装置,包括处理器和存储器,其中所述存储器存储计算机程序,所述处理器用于调用所述存储器中的计算机程序以实现上文任一所述的方法。
[0036] 本申请实施例提供的技术方案,获取控制系统中当前的运行周期T内运行的周期线程,并确定每个周期线程在运行周期T内运行的最大超时时刻Tdead,再根据所述每个周期线程在运行周期T对应的最大超时时刻Tdead,管理所述运行周期T内运行的周期线程,实现以周期线程为时间单位,根据最大超时时刻对该周期线程的运行状态的检测,提高对周期线程的检测准确度,达到提高线程管理的安全性的目的。
[0037] 本申请的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请而了解。本申请的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。

附图说明

[0038] 附图用来提供对本申请技术方案的进一步理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本申请的技术方案,并不构成对本申请技术方案的限制。
[0039] 图1为相关技术中列车控制系统中周期线程的示例图;
[0040] 图2为本申请提供的控制系统中管理线程的方法的流程图;
[0041] 图3为本申请提供的实施例提供的三级监控系统的示意图;
[0042] 图4为本申请实施例提供的外部独立晶振模块产生tick中断的示意图;
[0043] 图5为本申请实施例提供的CPU的tick中断处理函数处理的流程图;
[0044] 图6为本申请实施例提供的周期监控线程方法的流程图;
[0045] 图7为本申请实施例提供的周期监控线程对3个周期线程监控的示例图;
[0046] 图8为本申请实施例提供的协处理器软看门狗模块与周期监控线程间的交互示意图。

具体实施方式

[0047] 为使本申请的目的、技术方案和优点更加清楚明白,下文中将结合附图对本申请的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
[0048] 在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
[0049] 图2为本申请提供的控制系统中管理线程的方法的流程图。图2所示方法包括:
[0050] 步骤201、获取控制系统中当前的运行周期T内运行的周期线程;
[0051] 所述控制系统可以为包括一个或至少两个周期性执行的线程的系统;例如,列车控制系统等。
[0052] 每个周期线程的周期不同,根据控制系统中周期线程被执行的周期的长度,确定在当前的运行周期内运行的周期线程。
[0053] 在一个示例性实施例中,对周期线程的监控的时间颗粒为运行周期,该运行周期为系统输出的时钟周期,其中整个控制系统中周期线程的执行周期都是该运行周期的N倍,其中N为大于0的实数;因此,以运行周期为检测周期获取周期线程的运行状态,实现基于固定的周期对周期线程管理的目的。
[0054] 步骤202、确定每个周期线程在运行周期T内运行的最大超时时刻Tdead,所述最大超时时刻Tdead是确定的时刻;
[0055] 每个周期线程在运行周期T内的Tdead是确定的时刻,不会受其他周期线程打断而影响,也不受本周期线程的上周期执行延时而影响,即不会引入累积误差,保证周期线程在当前运行周期T内被执行时刻是不受外界影响的特定的时刻,为周期线程运行异常的判断提供精确的判断依据。
[0056] 在一个示例性实施例中,所述确定每个周期线程在运行周期T内运行的最大超时时刻Tdead,包括:
[0057] 根据每个周期线程被执行的周期的时长以及被执行的累计次数,确定在运行周期T内所述控制系统中每个周期线程对应的执行时刻Tschedul;
[0058] 根据所述执行时刻Tschedul以及预先设置的最大超时时长Δt,计算所述每个周期线程在运行周期T对应的最大超时时刻Tdead。
[0059] 在本示例性实施例中,对于每个周期线程,被执行的周期时长是固定的,被执行的累积次数可以通过由控制系统对该周期线程的记录得到;利用上述两个参数的数值执行乘法运算,可以得到在运行周期T内所述控制系统中每个周期线程对应的执行时刻Tschedul,该数值是相对于系统上电时刻的时间值,为绝对数值,即不受上周期执行延时而影响,因此不会引入累积误差。
[0060] 执行时刻Tschedul是在该运行周期中周期线程正常应执行的时间信息;最大超时时长Δt是系统在综合考虑处理性能等多因素后可容忍的等待时长,根据上述时间信息,可以计算出在当前周期内系统可容忍的最大超时时刻,所述最大超时时刻Tdead可以通过计算所述执行时刻Tschedul在经过所述超时时长Δt后对应的时刻得到的。
[0061] 步骤203、根据所述周期线程在运行周期T对应的最大超时时刻Tdead,管理所述运行周期T内运行的周期线程。
[0062] 对于每个周期线程,最大超时时刻Tdead在每个运行周期中均为确定的时刻,即所有周期线程的任意周期都是在确定的时刻进行调度的,实现基于绝对时间进行监控的。
[0063] 在一个示例性实施例中,所述获取控制系统中当前的运行周期T内运行的周期线程之前,所述方法还包括:
[0064] 创建一个周期监控线程,设置所述周期监控线程在整个控制系统中的优先级为最高,执行周期为最小
[0065] 在本示例性实施例中,周期监控线程的优先级最高且周期最小,从而保证该周期监控线程在控制系统优先于其他所有周期线程,能够及时有效的被执行,从而实现监控其他周期线程的目的。
[0066] 周期监控线程基于这个确定的调度时刻进行监控,而不是采用查询应答方式,不会产生延迟;同时,在周期线程发生故障后,并不会对该周期线程的运行时间进行清零操作,从而保证每个周期线程在对应的被执行时刻均是绝对时刻,保证后续的管理中不会引入累积误差。
[0067] 在管理周期线程过程中,可以通过对每个周期线程进行轮询的方法,根据每个周期线程在当前运行周期的最大超时时刻,对周期线程的运行状态进行监控和管理。
[0068] 在一个示例性实施例中,所述根据所述每个周期线程在运行周期T对应的最大超时时刻Tdead,管理所述运行周期T内运行的周期线程,包括:
[0069] 在运行周期T内,将当前时刻Tn与所述运行周期T内运行的每个周期线程的最大超时时刻Tdead进行比较,得到比较结果;
[0070] 从所述比较结果中,选择当前时刻Tn大于最大超时时刻Tdead的目标周期线程;
[0071] 对所述目标周期线程进行异常处理。
[0072] 在本示例性实施例中,在获取到的每个周期线程的最大超时时刻后,通过判断当前时刻是否达到上述获取到的最大超时时刻,来确定周期线程是否发生异常,并对发生异常的目标周期线程处理,例如,可以停止该线程,或者,发出告警提示等。
[0073] 本申请实施例提供的方法,获取控制系统中当前的运行周期T内运行的周期线程,并确定每个周期线程在运行周期T内运行的最大超时时刻Tdead,再根据所述每个周期线程在运行周期T对应的最大超时时刻Tdead,管理所述运行周期T内运行的周期线程,实现以周期线程为时间单位,根据最大超时时刻对该周期线程的运行状态的检测,提高对周期线程的检测准确度,达到提高线程管理的安全性的目的。
[0074] 下面对本申请提供的方法作进一步说明:
[0075] 在一个示例性实施例中,所述获取控制系统中当前的运行周期T内运行的周期线程之前,所述方法还包括:
[0076] 判断所述控制系统的时钟源当前输出的运行周期的时长是否准确;
[0077] 如果钟源当前输出的运行周期的时长准确,则允许获取控制系统中当前的运行周期T内运行的周期线程。
[0078] 在一个示例性实施例中,通过判断控制系统中当前输出的运行周期是否准确,可以保证计算的最大超时时刻Tdead的准确性,减少因控制系统时钟故障而造成对监测结果的误判,提高判断的精确度,提高线程管理的安全性。
[0079] 在一个示例性实施例中,所述判断所述控制系统的时钟源输出的运行周期是否准确,包括:
[0080] 获取所述控制系统中CPU当前输出的时钟节拍的第一时长;
[0081] 计算所述第一时长与预先获取的基准时钟节拍的第二时长的差值;
[0082] 判断所述差值是否符合预先设置的差值判断策略;
[0083] 如果所述差值符合所述差值判断策略,则确定所述控制系统的时钟源输出的运行周期准确,否则确定所述控制系统的时钟源输出的运行周期不准确。
[0084] 本示例性实施例中,运行周期是根据CPU自身定时器的时间的中断产生的,通过该时钟检测方法采用的是CPU自身定时器的时间与基准时钟节拍进行对比,通过判断差值是否在预先设置的允许误差允许范围内,来确定当前的时钟源输出的运行周期是否准确。
[0085] 在一个示例性实施例中,所述基准时钟节拍是独立于CPU的独立晶振模块输出的,所述基准时钟节拍的第二时长是根据CPU处于正常工作状态下输出的时钟节拍确定的。
[0086] 在本示例性实施例中,利用外部独立的晶振模块产生的时钟节拍tick对CPU自身定时器的时间进行检测,可有效判断系统中断源是否准确。
[0087] 在一个示例性实施例中,所述根据所述每个周期线程在运行周期T对应的最大超时时刻Tdead,管理所述运行周期T内运行的周期线程之后,所述方法还包括:
[0088] 按照预先设置的检测周期,对周期监控线程的工作状态进行检测;
[0089] 如果在检测周期内未收到周期监控线程的检测信号,则继续等待预先设置的等待时长,如果仍未收到检测信号,则停止所述控制系统内周期线程的运行。
[0090] 在本示例性实施例中,周期监控线程为控制系统中优先级最高的线程,可以管理控制系统中周期线程,本身也是个周期线程。通过对该周期监控线程的运行状态的检测,可以有效判断控制系统中的周期线程是否处于被监控状态,提高线程管理的安全性。在周期监控线程处于异常工作状态时,表示该控制系统中的周期线程未处于监控状态,存在安全风险,需及时停止控制系统内周期线程的运行,提高线程管理的安全性。
[0091] 在一个示例性实施例中,所述按照预先设置的检测周期,对周期监控线程的工作状态进行检测,包括:按照所述周期监控线程的执行周期,从控制系统的CPU获取CPU内运行的周期监控线程的工作状态;
[0092] 所述停止所述控制系统内周期线程的运行,包括:发送控制信号,其中所述控制信号用于停止所述控制系统中CPU的运行。
[0093] 在本示例性实施例中,通过从CPU获取该周期监控线程的工作状态,可以快速准确地获知该周期监控线程的工作状态;在检测到周期监控线程处于异常工作状态,通过停止该CPU的运行,可以有效的停止周期监控线程及其监控的周期线程的运行,实现方式快速准确,提供线程管理的安全性。
[0094] 下面对本申请实施例提供的方法进行说明:
[0095] 就相关技术中在列车控制系统中采用点名的方式进行线程管理的实现,发明人经过技术研发发现,该方法存在安全风险主要体现在如下四个方面,包括:
[0096] 第一,在周期监控线程不是最高优先级时,不能及时调度去执行监控;
[0097] 第二,该监控方法是基于查询应答式进行监控,在线程间通信存在错误的时钟周期时,应答必然会产生延迟,可能会导致从故障发生到识别到故障的反应时间过长;
[0098] 第三,由于查询应答方式采用的是握手机制,存在因多次延迟造成的累积误差或累积延时的情况;
[0099] 第四,该方法没有考虑操作系统外部时钟的故障。
[0100] 基于发明人分析得到的技术原因,本申请提供如下实施例基于上述技术原因提供技术实现方案,来提升列车控制系统的安全性,说明如下:
[0101] 列车控制系统中所有的周期线程均与系统安全相关,因此需对所有周期线程的执行状态进行及时监控并采取必要措施,以保障系统运行的安全。
[0102] 图3为本申请提供的实施例提供的三级监控系统的示意图。
[0103] 如图3所示,第一级子系统对操作系统调度的时钟节拍(tick)进行检测,时钟节拍是指周期性中断,通过第一级子系统的检测可以确定调度操作系统的时钟源是否准确;第二级子系统由最高优先级的周期监控线程基于绝对时间对其他所有周期线程进行监控;第三级子系统由协处理器的软看门狗模块对周期监控线程进行检查。这三级子系统监控关注点不同,第一级子系统监控了产生系统线程调度中断的时钟tick,第二级子系统和第三级子系统则组合在一起对周期线程调度进行监控,增加了线程调度的可靠性。
[0104] 下面对每一级子系统进行说明:
[0105] 第一级子系统
[0106] 时钟节拍(tick)是对操作系统进行调度的周期性中断,通常设置为1ms-100ms,又可以称为系统心脏的脉搏。如果时钟节拍不准确,则整个操作系统的调度就会受严重影响。
[0107] 图4为本申请实施例提供的外部独立晶振模块产生tick中断的示意图。如图4所示,时钟节拍中断通过外部的独立晶振模块产生,实时对安全系统的时钟节拍进行检查。
[0108] 图5为本申请实施例提供的CPU的tick中断处理函数处理的流程图。如图5所示,CPU首先读取CPU自身定时器的时间,然后减去上个中断函数中读取的CPU自身定时器的时间,用该差值与时钟节拍的时间值tick进行对比,如果两者差别大于误差值,则中断处理函数将上报时钟节拍检测故障。
[0109] 该时钟检测方法采用的是CPU自身定时器的时间对外部独立晶振模块产生的时钟节拍tick进行检测,可有效判断系统中断源(例如,外部独立晶振模块)是否准确。
[0110] 第二级子系统
[0111] 列车控制系统中的周期线程调度是由操作系统实现的,线程应被调度的绝对时刻为Tschedul,其中每个线程均需设置一个最大超时时间Δt,Tschedule+Δt即为最大超时时刻,可以定义为Tdead。任何周期线程执行时均不得超过该线程最大超时时刻Tdead,否则就会影响线程的正常调度执行,并影响系统的反应时间,影响安全,因此我们需对每个周期线程的最大超时时刻进行监控。
[0112] 1)绝对时刻:是指相对于系统上电时刻的时间值;
[0113] 2)Tschedul:被监控的周期线程当前周期所对应的应执行的绝对时刻,即操作系统调度该线程开始执行的时刻,随周期的执行次数而增大,Tschedule是确定的值,不受其他周期线程打断和本周期线程的上个周期执行延时而影响。
[0114] 3)Δt为周期线程运行可接受的最大延迟时间,也叫最大超时时间,最大超时时间可以根据线程功能的不同进行灵活配置,通常对于线程中功能的响应时间要求高的,该超时时间设置较小;对线程中功能的响应时间要求低的,则该超时时间可适当放宽。
[0115] 4)Tdead为被周期监控线程当前周期的最大超时时刻,需每周期根据Tschedul进行计算。计算方法是根据Tschedul加上一个最大超时时间Δt获得。
[0116] 第二级子系统监控的实现方法是创建一个周期监控线程,该周期监控线程在系统中的执行周期最小、优先级最高。由于该周期监控线程周期最小,优先级最高,可保证该线程总是优先于其他所有周期线程及时有效的执行。周期线程是基于绝对时间进行监控的,即所有周期线程的任意周期都应是确定的时刻进行调度,周期监控线程也是基于这个确定的调度时刻进行监控,而不是采用查询应答方式,不会产生延迟;同时不允许对故障清零,因此对于周期线程的监控不会引入累积误差。该周期监控线程执行时将检查其他所有周期线程的运行状态,判断被周期监控线程的当前执行时刻是否超过了其最大超时时刻Tdead,若超时,则采取上报故障、切断该线程的输出等措施保障系统安全运行。
[0117] 图6为本申请实施例提供的第二级系统的监控方法的流程图。如图6所示,所述方法的步骤如下:
[0118] (1)定义两个以线程id号为标识的数组,一个用于存储被监控周期线程的运行周期(以T[id]表示),一个数组用于存储被监控周期线程执行的周期累计次数(以Count[id]表示)。所有被监控的周期线程在执行时,均对执行的周期次数进行累计,同时将其运行周期和执行的累计次数填入到上述两个数组中。其中,T[id]为id号线程的周期;Count[id]为线程id号线程当前执行的周期累计次数;
[0119] (2)周期监控线程每个周期读取系统当前时刻Tn,,其中Tn为第n个周期;
[0120] (3)轮询所有线程id号,计算每个id号对应的线程的当前执行周期应执行时刻Tschedul[id](由周期T[id]*执行次数Count[id]计算得出)。
[0121] (4)计算每个id号对应线程当前周期的最大超时时刻Tdead[id],其中Tdead[id]为该线程Tschedul[id]加上一个最大超时时间Δt,Δt可灵活配置,通常设置为对应周期线程的一个周期,即Tdead[id]=Tschedul[id]+T[id];
[0122] (5)轮询每个线程id号,对比当前时刻Tn与该线程当前的最大超时时刻Tdead[id],若当前时刻Tn大于Tdead[id],则表示当前id号的线程未能及时执行,该线程执行处于异常状态。周期监控线程需该线程采取处理措施,包括上报故障、关断输出等。
[0123] 第二级监控方法示例如图6所示,周期监控线程的id=0,为最高优先级且周期最小。每个周期线程的最大超时时间Δt设置为该线程的执行周期T,则该线程最大超时时刻Tdead=Tschedul+T,其中T为该线程的执行周期。
[0124] 系统中被监控的线程包括IO线程、通信线程和诊断线程3个线程,周期监控线程周期性检查这3个线程是否均及时有效的执行。其中IO线程的id=i、周期为T[i],通信线程的id=j、周期为T[j],诊断线程的id=k、周期为T[k]。系统执行情况如图6所示。
[0125] 周期监控线程按周期运行,每周期检测其他三个周期线程执行是否正常,当运行到第n个周期时,周期监控线程首先读取当前的时刻Tn,然后轮询所有这3个线程,此时IO线程执行到第x周期,通信线程执行到第y-1个周期,诊断线程执行到第z个周期,如图7所示。
[0126] 周期监控线程获取IO线程的当前执行周期为第x个周期,计算得出IO线程当前的最大超时时刻为Tdead[i]=(x+1)T[i],当前时刻Tn
[0127] 周期监控线程获取通信线程的当前执行周期为第y-1个周期,计算得出通信线程当前的最大超时时刻为Tdead[j]=y*T[j],由于当前时刻Tn>Tdead[j],因此周期监控线程判定通信线程执行异常,周期监控线程将上报通信线程的故障状态,并关断对外通信。
[0128] 周期监控线程获取诊断线程的当前执行周期为第z个周期,计算得出诊断线程当前的最大超时时刻Tdead[k]=(z+1)*T[k],当前时刻Tn
[0129] 第三级子系统
[0130] 图8为本申请实施例提供的协处理器软看门狗模块与周期监控线程间的交互示意图。如图8所示,周期监控线程负责监控系统内其他被监控的周期线程执行是否正常,而对于周期监控线程自身是否正常执行,则需由外部的协处理器(如FPGA等,需与运行列车控制系统的CPU独立)进行监控,协处理器提供软看门狗模块,软看门狗模块由周期监控线程执行喂狗操作,周期为T。软看门狗模块在持续超过2*T的时间都没有喂狗时,看门狗模块将会把CPU锁死,使系统导向安全。
[0131] 本申请实施例提供的方法,利用三级子系统对控制系统中的周期线程进行监控,配置该周期监控线程能够对当前运行周期内的周期线程进行管理,保证周期监控线程有最高优先级,能够及时调度去执行监控;以当前运行周期的为时间点进行检测,有效减少基于查询应答式进行监控存在的线程间通信存在错周期情况,及时识别故障的发生;利用最大超时时刻进行判断,可以避免因采用握手机制的应答存在的累积误差或累积延时的情况,提高判断短的精确度;另外,对系统时钟源输出的运行周期的准确性的判断,可以有效提高检测的精准度,提高判断的精确性。基于上述优势,本申请实施例提供的方法有效提高了线程管理的安全性。
[0132] 本申请实施例提供一种控制系统中管理线程的装置,包括处理器和存储器,其中所述存储器存储计算机程序,所述处理器用于调用所述存储器中的计算机程序以实现如下步骤,包括:
[0133] 获取控制系统中当前的运行周期T内运行的周期线程;
[0134] 确定每个周期线程在运行周期T内运行的最大超时时刻Tdead,所述最大超时时刻Tdead是确定的时刻;
[0135] 根据所述每个周期线程在运行周期T对应的最大超时时刻Tdead,管理所述运行周期T内运行的周期线程。
[0136] 在一个示例性实施例中,所述处理器用于调用所述存储器中的计算机程序以实现获取控制系统中当前的运行周期T内运行的周期线程之前,所述方法还包括:
[0137] 创建一个周期监控线程,设置所述周期监控线程在整个控制系统中的优先级为最高,执行周期为最小。
[0138] 在一个示例性实施例中,所述处理器用于调用所述存储器中的计算机程序以实现确定每个周期线程在运行周期T内运行的最大超时时刻Tdead的步骤,包括:
[0139] 根据每个周期线程被执行的周期的时长以及被执行的累计次数,确定在运行周期T内所述控制系统中每个周期线程对应的执行时刻Tschedul;
[0140] 根据所述执行时刻Tschedul以及预先设置的最大超时时长Δt,计算所述每个周期线程在运行周期T对应的最大超时时刻Tdead。
[0141] 在一个示例性实施例中,所述处理器用于调用所述存储器中的计算机程序以实现确定所述最大超时时刻Tdead的步骤是通过计算所述执行时刻Tschedul在经过所述超时时长Δt后对应的时刻得到的实现的。
[0142] 在一个示例性实施例中,所述处理器用于调用所述存储器中的计算机程序以实现根据所述每个周期线程在运行周期T对应的最大超时时刻Tdead,管理所述运行周期T内运行的周期线程的步骤,包括:
[0143] 在运行周期T内,将当前时刻Tn与所述运行周期T内运行的每个周期线程的最大超时时刻Tdead进行比较,得到比较结果;
[0144] 从所述比较结果中,选择当前时刻Tn大于最大超时时刻Tdead的目标周期线程;
[0145] 对所述目标周期线程进行异常处理。
[0146] 在一个示例性实施例中,所述处理器用于调用所述存储器中的计算机程序以实现获取控制系统中当前的运行周期T内运行的周期线程之前的步骤之前,所述处理器用于调用所述存储器中的计算机程序还实现如下步骤,包括:
[0147] 判断所述控制系统的时钟源输出的运行周期是否准确;
[0148] 如果所述时钟源输出的运行周期准确,则允许获取控制系统中当前的运行周期T内运行的周期线程。
[0149] 在一个示例性实施例中,所述处理器用于调用所述存储器中的计算机程序以实现判断所述控制系统的时钟源输出的运行周期是否准确的步骤,包括:
[0150] 获取所述控制系统中CPU当前输出的时钟节拍的第一时长;
[0151] 计算所述第一时长与预先获取的基准时钟节拍的第二时长的差值;
[0152] 判断所述差值是否符合预先设置的差值判断策略;
[0153] 如果所述差值符合所述差值判断策略,则确定所述控制系统的时钟源输出的运行周期准确,否则确定所述控制系统的时钟源输出的运行周期不准确。
[0154] 在一个示例性实施例中,所述处理器用于调用所述存储器中的计算机程序以实现确定的基准时钟节拍是独立于CPU的独立晶振模块输出的,所述基准时钟节拍的第二时长是根据CPU处于正常工作状态下输出的时钟节拍确定的。
[0155] 在一个示例性实施例中,所述处理器用于调用所述存储器中的计算机程序以实现根据所述每个周期线程在运行周期T对应的最大超时时刻Tdead,管理所述运行周期T内运行的周期线程之后,所述处理器用于调用所述存储器中的计算机程序还实现如下步骤,包括:
[0156] 按照预先设置的检测周期,对所述周期监控线程的工作状态进行检测;
[0157] 如果在检测周期内未收到周期监控线程的检测信号,则继续等待预先设置的等待时长,如果仍未收到检测信号,则停止所述控制系统内周期线程的运行。
[0158] 在一个示例性实施例中,所述处理器用于调用所述存储器中的计算机程序以实现所述按照预先设置的检测周期,对周期监控线程的工作状态进行检测的步骤,包括:
[0159] 按照所述周期监控线程的执行周期,从控制系统的CPU获取CPU内运行的周期监控线程的工作状态;
[0160] 所述处理器用于调用所述存储器中的计算机程序以实现所述停止所述控制系统内周期线程的运行的步骤,包括:
[0161] 发送控制信号,其中所述控制信号用于停止所述控制系统中CPU的运行。
[0162] 本申请提供的装置实施例,获取控制系统中当前的运行周期T内运行的周期线程,并确定每个周期线程在运行周期T内运行的最大超时时刻Tdead,再根据所述每个周期线程在运行周期T对应的最大超时时刻Tdead,管理所述运行周期T内运行的周期线程,实现以周期线程为时间单位,根据最大超时时刻对该周期线程的运行状态的检测,提高对周期线程的检测准确度,达到提高线程管理的安全性的目的。
[0163] 本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些组件或所有组件可以被实施为由处理器,如数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。