一种多核操作系统容错管理方法与流程

文档序号:13891332阅读:655来源:国知局

本发明涉及嵌入式系统多核处理器的操作系统管理方法领域,特别是一种多核操作系统容错管理方法。



背景技术:

在嵌入式系统中使用多核处理器是一种有效提高系统计算能力和可靠性的途径。通过将计算任务被划分为多个可并行执行的线程并将其分布在不同的处理器核上运行,可大幅提高计算速度。通过使多个处理器核同步执行相同的任务并将运算结果表决后输出,可以提高系统的可靠性。

在多核系统运行过程中,当有一个处理器核发生非瞬时故障时,系统需要能够感知到该故障,并将故障核上的线程重新调度到其他处理器核上运行。其中,如何使系统感知到该故障(即故障的检测)以及在发现故障后如何恢复是问题的核心。

目前,国内外已针对多核、众核系统中的容错机制开展了一些研究,如专利“一种众核环境下基于动态感知的系统容错机制”(专利公开号:CN102323900A)提出为每个进程分配一个心跳计数器,通过在处理器运行额外的检测进程或监控进程来感知发生异常的进程,并通过额外的管理进程重启异常进程。

总的来讲,目前已有的多核系统容错方法需要系统中额外维护一个监测进程/线程,负责系统中其他线程状态的监听及故障的检测。但是,如果该监测线程出现故障,尤其是监测线程所在的处理器核出现故障,系统将无法继续进行容错管理。



技术实现要素:

本发明要解决的技术问题为:提供一种能够在任意一处理器核故障时快速检测出故障并恢复故障核上进程运行的多核操作系统容错管理方法。以避免现有技术中运行监测线程所在的处理器核出现故障导致系统无法进行容错管理的问题,提高系统的容错能力。

本发明的技术方案为:一种多核操作系统容错管理方法,包括,S1,构建全局任务列表和一个n×n的核间故障检测矩阵,其中n为处理器核数;S2,在系统正常运行期间,每个处理器核利用核间故障检测矩阵定期检测系统中其他处理器核是否发生故障;S3,如果某一个处理器核连续的故障计数超过预设故障计数最大值M,则判断该处理器核发生故障,此时将该发生故障的处理器核上的任务和中断转移到其他处理器核上;其中,步骤S2中的每个处理器核的故障检测包括:S21,通过定时器设置定时监测周期,保证每个处理器核在同一时刻对其他处理器核进行状态监测;S22,在每个定时监测周期起始,各个处理器核在核间故障检测矩阵中各自对应的一列k中的元素设置为TRUE;S23,在每个定时监测周期末尾,各个处理器核查看矩阵中各自对应的一行j中的元素,如果其中某一个元素ejk不为TRUE,则认为与该列对应的处理器核k发生了故障,并将其故障计数加1,最后将行j中的元素全部清零;其中,j为核间故障检测矩阵的行数,取1、2、3……n,k为核间故障检测矩阵的列数,取1、2、3……n,ejk为核间故障检测矩阵中的元素。

进一步地,包括,S12,使每个处理器核上运行一个调度器实例,每个调度器实例的功能是在发生中断或本地有任务状态发生变化时,按照任务调度算法从全局任务列表中挑选一个就绪态任务调度运行。

进一步地,调度器实例为固定优先级调度算法或动态优先级调度算法。

进一步地,包括,S10,在操作系统内核中构建一个全局任务列表,全局任务列表中包括任务ID、任务优先级、任务状态、任务堆栈地址、任务寄存器、任务所运行于的处理器核。

进一步地,包括,S41,通过全局任务列表,根据任务控制块中任务所运行于的处理器核信息,找到故障处理器核上当前正在运行的任务,将该任务恢复为就绪状态,使之能够被其他的处理器核调度运行,并利用核间中断使所有处理器核进行一次任务调度。

进一步地,通过修改中断屏蔽寄存器等方式,使运行正常的处理器核响应故障处理器核上的中断。

进一步地,根据对应功能的不同,故障处理器核的中断为所有处理器核均响应的中断或单个处理器核负责响应的中断;只需转移仅故障处理器核负责响应的中断。

本发明与现有技术相比的优点在于:

1.系统故障检测能力不依赖于某一个处理器核,每个处理器核均具备对处理器中其他核进行故障检测的能力,大大提高了系统容错能力。

2.每个核仅对矩阵中自身核所对应的行进行查询和清零操作,避免了多个核同时操作同一地址所引起的数据访问冲突问题,因此也不需要使用多核操作系统中常用的信号量、自旋锁等进行资源互斥,减少了算法开销,提高了系统效率。

3.基于共享内存实现多核系统容错管理,不依赖于多核处理器的核间中断的能力,具备良好的通用性,并且避免了中断带来的异步事件的不确定性和数据访问冲突的可能。

附图说明

图1示出了本发明的多核操作系统容错管理方法中的核间故障检测矩阵示意图。

具体实施方式

本发明提供一种基于共享内存的多核操作系统容错管理方法,该方法通过核间故障检测矩阵,使处理器核间互相监视各自的状态,在发现故障后自主将运行在故障处理器核上的工作(包括任务和中断)迁移到工作正常的处理器核上并继续运行。该方法能够快速检测到发生故障的处理器核,在只有一个核能够正常工作的极端情况下,也可保证系统正常运行。其步骤如下:

(1)在系统中构建一个全局任务列表和一个n×n的核间故障检测矩阵(n为处理器核数)。

(2)使每个处理器核上运行一个调度器实例,每个调度器实例的基本功能是在发生中断或本地(本处理器核)有任务状态发生变化时,按照任务调度算法从全局任务列表中挑选一个就绪态任务调度运行。

(3)在系统正常运行期间,每个处理核利用n×n的核间故障检测矩阵定期检测系统中其他核是否发生故障,故障检测算法如下。

a)通过定时器设置定时监测周期,保证每个核在同一时刻对其他n-1个核进行状态监测。

b)在每个定时监测周期起始,各个处理器核将向量表中各自对应的列i中的元素设置为TRUE。

c)在每个定时监测周期末尾,各个处理器核查看矩阵中各自对应的行j中的元素,如果其中某一个元素ejk不为TRUE,则认为处理器核k发生了故障,并将其故障计数加1,最后将行j中的元素全部清零。

(4)如果某一个处理器核连续的故障计数超过预设故障计数最大值M,则认为该处理器核发生故障,此时将该故障处理器核上的任务和中断转移到其他处理器核上:

a)将故障处理器核上当前正在运行的任务恢复为就绪状态,并使所有处理器核进行一次任务调度;

b)通过修改中断屏蔽寄存器等方式,使运行正常的处理器核响应故障处理器核上的中断。

参见图1所示,本发明一个实施例的多核操作系统容错管理方法,其具体步骤如下:

(1)在操作系统内核中构建一个全局任务列表和一个n×n的核间故障检测矩阵(n为处理器核数),在本实施例中假定n为4;全局任务列表中包含系统中的全部任务的基本信息,主要包括任务ID、任务优先级、任务状态、任务堆栈地址、任务寄存器、任务所运行于的处理器核等。

(2)使每个处理器核上运行一个调度器实例,每个调度器实例的基本功能是在发生中断或本地(本处理器核)有任务状态发生变化时,按照任务调度算法从全局任务列表中挑选一个就绪态任务调度运行;可根据系统应用的需要选择适合的调度器及调度算法,既可选择固定优先级调度算法(例如RM算法和DM算法),也可选择动态优先级调度算法(例如ELF算法和EDF算法)。

(3)如图1所示,在系统正常运行期间,每个处理核利用n×n(本实施例中为4×4)的核间故障检测矩阵定期检测系统中其他核是否发生故障:

a)通过定时器设置定时监测周期,保证每个核在同一时刻对其他n-1个(本实施例中为3个)核进行状态监测;定时器应为各处理器核共享,使各处理器核的定时监测周期保持同步;定时监测周期的大小应根据系统所期望的故障检测实时性进行设定。

b)在每个定时监测周期起始,各个处理器核将向量表中各自对应列i中的元素(e0i,e1i,…,eni)(本实施例中核0将e00,e10,e20,e30,核1将e01,e11,e21,e31、核2、核3以此类推)设置为TRUE。

c)在每个定时监测周期末尾,各个处理器核查看矩阵中各自对应行j中的元素(ej0,ej1,…,ejn)(本实施例中为核0核查e00,e01,e02,e03,核1核查e10,e11,e12,e13,核2、核3以此类推),如果其中某一个元素ejk不为TRUE,则认为处理器核k发生了故障,并将其故障计数加1(例如核0检查出e01不为TRUE,则认为核1可能发生了故障),最后将行j中的元素(ej0,ej1,…,ejn)全部清零。

需要注意的是,应通过时序保证对矩阵元素的全部读写操作不发生冲突,即将矩阵元素设置为TRUE的时机与读取矩阵元素的时机之间应保证足够的间隔,将矩阵元素清零的时机与将矩阵元素设置为TRUE的时机之间应保证足够的间隔;其中,足够间隔是指远大于处理器核之间的同步偏差的时间间隔。

(4)如果某一个处理器核的连续故障计数超过预设故障计数最大值M,则认为该处理器核发生故障,此时将该故障处理器核上的任务和中断转移到其他处理器核上:

a)通过全局任务列表,根据任务控制块中任务所运行于的处理器核信息,找到故障处理器核上当前正在运行的任务,将该任务恢复为就绪状态,使之能够被其他的处理器核调度运行,并利用核间中断使所有处理器核进行一次任务调度;

b)通过修改中断屏蔽寄存器等方式,使运行正常的处理器核响应故障处理器核上的中断。根据中断对应功能的不同,系统中有些中断为所有处理器核均响应的中断,有些中断为单个处理器核负责响应的中断;只需转移仅故障处理器核负责响应的中断。

发明未详细说明部分属本领域技术人员公知常识。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1