CN109840137B - 一种跨核调度方法和装置 - Google Patents
一种跨核调度方法和装置 Download PDFInfo
- Publication number
- CN109840137B CN109840137B CN201711215743.0A CN201711215743A CN109840137B CN 109840137 B CN109840137 B CN 109840137B CN 201711215743 A CN201711215743 A CN 201711215743A CN 109840137 B CN109840137 B CN 109840137B
- Authority
- CN
- China
- Prior art keywords
- thread
- task
- operating system
- scheduler
- parasitic
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Executing Machine-Instructions (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明实施例涉及计算机技术领域,尤其涉及一种跨核调度方法和装置,包括:在第一操作系统上创建一个单进程,在单进程上运行第二操作系统;在第一操作系统的用户态设置第二操作系统的寄生调度器;在第一操作系统内还设置中断线程,中断线程由第一操作系统的宿主调度器调度且宿主调度器工作在第一操作系统的内核态。可以看出,通过在第一系统上创建一个单进程,并在该进程上运行第二操作系统,能够降低移植操作系统的工作量,在不需要跨核调度的时候,不需要再采用内核态的宿主调度器,从而能够保证第二操作系统的实时性,最后通过通过在第一操作系统内设置中断线程以实现跨核调度,从而使得移植后的操作系统能够跨平台复用。
Description
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种跨核调度方法和装置。
背景技术
目前移植操作系统主要指基于裸机实现操作系统,主要需要做三部分工作:芯片引导程序开发、OS(Operating System,操作系统)调度器开发、外围驱动开发。而芯片引导程序需要初始化芯片状态、内存初始化、外部设备扫描等,专业性极强,需要经过培训的专业技术人员方可,实现难度大。
因此,若要基于裸机进行操作系统移植,首先需要对硬件平台进行熟悉,了解其核心寄存器,学习其引导流程,学习硬件相关的底层语言(一般为汇编),熟悉外设寄存器,以上每一项都是少则几百页,多则几千页的文档。而只有熟悉以上内容才能够进行相应的三部分(芯片引导程序开发、OS调度器开发及外围驱动开发)移植工作;
此外,调度器为操作系统的核心,藉此实现任务切换,主要工作包括当前任务寄存器状态保存,待执行新任务寄存器状态恢复,即所谓的入栈和出栈,而此部分工作由于与硬件平台强相关,往往需要汇编指令编码实现,需要对硬件平台足够熟悉。
因此,基于裸机移植操作系统的开发工作量大,产品周期长,又由于移植工作的三部分核心工作(芯片引导程序开发、OS调度器开发及外围驱动开发)均与硬件强相关,换硬件平台需要完全重新开发,导致无法跨平台复用等问题。
发明内容
本发明实施例提供一种跨核调度方法和装置,用以降低移植操作系统的工作量以及移植后的操作系统能够跨平台服用。
本发明实施例提供一种跨核调度方法,包括:
在第一操作系统上创建一个单进程,在所述单进程上运行第二操作系统,所述第二操作系统的实时性要求高于所述第一操作系统;
在所述第一操作系统的用户态设置所述第二操作系统的寄生调度器,所述寄生调度器用于调度承载在所述第二操作系统上的任务集;
在所述第一操作系统内还设置中断线程,所述中断线程由所述第一操作系统的宿主调度器调度且所述宿主调度器工作在所述第一操作系统的内核态。
较佳的,
所述单进程包括多个线程,所述多个线程分别处理所述第二操作系统对应的各任务集;
在所述第一操作系统的用户态设置所述第二操作系统的寄生调度器,包括:
针对所述多个线程中任一线程,分别创建对应的寄生调度器,每个寄生调度器用于调度所述线程的任务集内的各任务。
较佳的,
为每个线程设置各自的虚拟处理器,所述虚拟处理器根据物理处理器的数量确定。
较佳的,
在第二线程向第一线程发送中断请求的情况下,触发所述中断线程,以使所述寄生调度器通过所述中断线程实现跨核调度。
较佳的,所述寄生调度器通过所述中断线程实现跨核调度,包括:
启动所述宿主调度器运行所述中断线程的中断任务并将第一任务的断点状态保存至所述第一线程的内存栈中;所述第一任务为所述第一线程正在执行的任务;
在运行所述中断线程的过程中执行第一线程的寄生调度器并将所述中断任务的断点状态保存至所述第一线程的第一任务的内存栈中,并触发第一线程的第二任务执行;在所述第一线程的第二任务执行完成后,执行所述寄生调度器从所述第一线程的第一任务的内存栈调度所述中断任务;
在所述中断任务执行完成后,启动所述宿主调度器从所述第一线程的内存栈调度所述第一任务。
较佳的,所述执行第一线程的寄生调度器并将所述中断任务的断点状态保存至所述第一线程的第一任务的内存栈中,包括:
所述第一线程的寄生调度器通过第一跳转函数将所述中断任务的断点状态保存至所述第一线程的第一任务的内存栈中,所述第一跳转函数工作在用户态;
所述启动所述寄生调度器从所述第一线程的第一任务的内存栈调度所述中断任务,包括:
所述寄生调度器通过第二跳转函数从所述第一线程的第一任务的内存栈调度所述中断任务,所述第二跳转函数也工作在用户态。
较佳的,所述第一跳转函数为长跳转压栈函数setjmp,所述第二跳转函数为长跳转出栈函数longjmp,且所述长跳转压栈函数setjmp和长跳转出栈函数longjmp成对使用以实现所述寄生调度器的调度功能。
本发明实施例还提供一种跨核调度装置,包括:
创建模块,用于在第一操作系统上创建一个单进程,在所述单进程上运行第二操作系统,所述第二操作系统的实时性要求高于所述第一操作系统;
处理模块,用于在所述第一操作系统的用户态设置所述第二操作系统的寄生调度器,所述寄生调度器用于调度承载在所述第二操作系统上的任务集;
还用于在所述第一操作系统内还设置中断线程,所述中断线程由所述第一操作系统的宿主调度器调度且所述宿主调度器工作在所述第一操作系统的内核态。
较佳的,
所述单进程包括多个线程,所述多个线程分别处理所述第二操作系统对应的各任务集;
所述处理模块,具体用于:
针对所述多个线程中任一线程,分别创建对应的寄生调度器,每个寄生调度器用于调度所述线程的任务集内的各任务。
较佳的,
为每个线程设置各自的虚拟处理器,所述虚拟处理器根据物理处理器的数量确定。
较佳的,还包括:触发模块;
所述触发模块,用于在第二线程向第一线程发送中断请求的情况下,触发所述中断线程,以使所述寄生调度器通过所述中断线程实现跨核调度。
较佳的,所述触发模块,具体用于:
启动所述宿主调度器运行所述中断线程的中断任务并将第一任务的断点状态保存至所述第一线程的内存栈中;所述第一任务为所述第一线程正在执行的任务;
在运行所述中断线程的过程中执行第一线程的寄生调度器并将所述中断任务的断点状态保存至所述第一线程的第一任务的内存栈中,并触发第一线程的第二任务执行;
在所述第一线程的第二任务执行完成后,执行所述寄生调度器从所述第一线程的第一任务的内存栈调度所述中断任务;
在所述中断任务执行完成后,启动所述宿主调度器从所述第一线程的内存栈调度所述第一任务。
较佳的,所述触发模块,具体用于:
所述第一线程的寄生调度器通过第一跳转函数将所述中断任务的断点状态保存至所述第一线程的第一任务的内存栈中,所述第一跳转函数工作在用户态;以及
所述寄生调度器通过第二跳转函数从所述第一线程的第一任务的内存栈调度所述中断任务,所述第二跳转函数也工作在用户态。
较佳的,所述第一跳转函数为长跳转压栈函数setjmp,所述第二跳转函数为长跳转出栈函数longjmp,且所述长跳转压栈函数setjmp和长跳转出栈函数longjmp成对使用以实现所述寄生调度器的调度功能。
本发明另一实施例提供了一种计算设备,其包括存储器和处理器,其中,所述存储器用于存储程序指令,所述处理器用于调用所述存储器中存储的程序指令,按照获得的程序执行上述任一种方法。
本发明另一实施例提供了一种计算机存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使所述计算机执行上述任一种方法。上述实施例提供的一种跨核调度方法,包括:在第一操作系统上创建一个单进程,在所述单进程上运行第二操作系统,所述第二操作系统的实时性要求高于所述第一操作系统;在所述第一操作系统的用户态设置所述第二操作系统的寄生调度器,所述寄生调度器用于调度承载在所述第二操作系统上的任务集;在所述第一操作系统内还设置中断线程,所述中断线程由所述第一操作系统的宿主调度器调度且所述宿主调度器工作在所述第一操作系统的内核态。可以看出,通过在第一系统上创建一个单进程,并在该进程上运行第二操作系统,从而能够降低移植操作系统的工作量,又通过第一操作系统的用户态设置第二操作系统的寄生调度器,在不需要跨核调度的时候,不需要再采用内核态的宿主调度器,从而能够保证第二操作系统的实时性,最后通过在第一操作系统内设置中断线程以实现跨核调度,从而使得移植后的操作系统能够跨平台复用,不仅能够减少开发工作量,还能够降低开发难度。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍。
图1为本发明实施例提供的一种跨核调度方法的流程示意图;
图2为本发明实施例提供的在Linux上移植RTOS以后的系统结构示意图;
图3为本发明实施例提供的寄生调度器采用setjmp及longjmp调度任务的方法流程示意图;
图4为本发明另一实施例提供的在Linux上移植RTOS以后的系统结构示意图;
图5A~图5B为本发明实施例提供的跨核任务切换的方法流程示意图;
图6为本发明实施例提供的一种跨核调度装置的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
图1示例性示出了本发明实施例提供的一种跨核调度方法的流程示意图,如图1所示,该方法可包括:
S101、在第一操作系统上创建一个单进程,在该单进程上运行第二操作系统,第二操作系统的实时性要求高于第一操作系统。
其中,单进程包括多个线程,多个线程分别处理第二操作系统对应的各任务集。
可选的,多个线程可采用死循环结构。
S102、在第一操作系统的用户态设置第二操作系统的寄生调度器,该寄生调度器用于调度承载在第二操作系统上的任务集。
具体的,针对多个线程中的任一线程,可分别创建对应的寄生调度器,每个寄生调度器用于调度各线程的任务集内的各任务。
S103、在第一操作系统内还设置中断线程,该中断线程由第一操作系统的宿主调度器调度且宿主调度器工作在第一操作系统的内核态。
在具体实施时,当在单进程内创建多线程时,可根据物理处理器的数量,确定线程的数量,即设置每个线程独占一个物理处理器硬核。当在单进程内创建多线程时,也可不受物理处理器的数量的影响,即也可设置每个线程占用多个物理处理器硬核。
可选的,在具体实施时,第一操作系统可以为Linux操作系统,第二操作系统可以为RTOS(Real-time operating system,实时操作系统)。
例如,当第一操作系统为Linux,第二操作系统为RTOS,并且第一操作系统所在的宿主系统的CUP分别为:CPU1、CPU2、CPU3、CPUn,则首先在第一操作系统Linux内创建一个单进程及线程1、线程2、线程3、线程n作为RTOS的运行环境,其中,线程1、线程2、线程3、线程n采用死循环架构。然后通过Linux亲和性,设置线程1占用vCPU1,线程2占用vCPU2,线程3占用vCPU3,线程n占用vCPUn,最后在vCPU1、vCPU2、vCPU3、vCPUn上部署一个RTOS实例。至此,在Linux上移植RTOS以后的系统结构示意图,可参见图2。
在将第二操作系统移植至第一操作系统以后,如果第一线程占用一个虚拟处理器,第二线程占用另外一个虚拟处理器,此时,如果要想实现跨核调度,需要通过在第一操作系统内设置的中断线程。
具体的,在第二线程向第一线程发送中断请求的情况下,触发所述中断线程,启动宿主调度器运行中断线程的中断任务并将第一任务的断点状态保存至第一线程的内存栈中,其中,第一任务为第一线程正在执行的任务;然后在运行中断线程的过程中执行第一线程的寄生调度器并将所述中断任务的断点状态保存至第一线程的第一任务的内存栈中,并触发第一线程的第二任务执行,在第一线程的第二任务执行完成后,执行寄生调度器从第一线程的第一任务的内存栈调度所述中断任务;最后,在中断任务执行完成后,启动宿主调度器从第一线程的内存栈调度第一任务。
由于第二操作系统的寄生调度器是设置在第一操作系统的用户态的,所以当第二操作系统的寄生调度器在调度各线程的任务时,可基于工作在用户态的跳转函数实现寄存器状态的压栈及出栈操作,而不用再基于底层语言实现寄存器状态的压栈及出站操作,从而能够提升任务执行的实时性。例如,采用C语言库中的长跳转压栈函数setjmp实现任务的上下文的保存,以及采用C语言库中的长跳转出栈函数longjmp以实现任务的上下文的恢复,其中,长跳转压栈函数setjmp和长跳转出栈函数longjmp是成对使用以实现寄生调度器的调度功能。
操作系统调度本质就是跨函数的长跳转,即实现当前任务断点保存(寄存器入栈)且下一个任务断点恢复(寄存器出栈)。因此,长跳转压栈函数setjmp及长跳转出栈函数longjmp联合实现OS任务调度器是可行的,而长跳转压栈函数setjmp及长跳转出栈函数longjmp又能够工作在用户态,因此,用户态的寄生调度器调度各自的线程上运行的任务集时,不用再去内核,而是直接在用户态调度线程上的任务,从而能够提升移植后的第二操作系统的实时性,其中,寄生调度器采用长跳转压栈函数setjmp及长跳转出栈函数longjmp调度任务的方法流程,可参见图3。
S301、宿主调度器确定由于不具备继续运行条件而放弃CPU的当前任务,调用寄生调度器进行重调度。
S302、寄生调度器根据调度策略选择下一个待运行任务。
S303、寄生调度器调用长跳转压栈函数setjmp将当前任务断点状态保存到其任务栈。
S304、寄生调度器调用长跳转出栈函数longjmp将下一个任务的寄存器状态由其任务栈恢复到寄存器。
S305、下一个任务开始自上次断点出继续执行。
此外,当存在多个线程时,为了能够实现跨线程之间的任务切换,需要在第一操作内设置一个中断线程,通过该中断线程切换跨“宿主OS”及“寄生OS”任务栈,从而通过巧妙的任务栈“借用”方式,不仅可以实现对vCPU外部中断及本地中断的模拟,同时利用“宿主OS”任务栈作为中断栈,可以实现中断嵌套。
下面通过一个具体的例子,对上述的方法流程进行详细的解释说明。
在该例子中,假设第一操作系统为linux,并且linux所在的物理架构的CPU(Central Processing Unit,中央处理单元)的数量为1个,第二操作系统为RTOS(Real-Time Operating Systems,实时操作系统),则如果将第二操作系统RTOS移植到第一操作系统linux上,可首先在linux上创建一个单进程,假设为进程1,然后在进程1下创建两个线程,假设为线程A、线程B,并通过线程A虚拟第一虚拟中央处理单元Vcpu1,通过线程B虚拟第二虚拟中央处理单元Vcpu2,将第二操作系统RTOS移植到第一操作系统linux以后的结构示意图,可参见图4。
进一步假设,线程A上的任务集中仅包含一个任务为任务1,线程B上的任务集中也仅包含一个任务为任务2。
将第一操作系统linux,即宿主OS的调度器称之为宿主调度器;将第二操作系统RTOS,即寄生OS的调度器称之为寄生调度器,进一步假设线程A的寄生调度器为寄生调度器1,线程B的寄生调度器为寄生调度器2。
进一步假设,宿主OS下还存在线程IPI、线程Timer,其中,线程IPI为中断线程,用于实现线程A与线程B上的任务之间的调度,即IPI为设置的中断线程用于实现跨核调度的,而线程Timer为定时中断线程。
此时,宿主OS下存在4个线程,分别为:线程A、线程B、线程IPI、线程Timer,寄生OS下存在两个任务分别为任务1和任务2。进一步假设线程A在内存中所占用的内存栈为“线程A栈”,线程B在内存中所占用的内存栈为“线程B栈”,线程IPI在内存中所占用的内存栈为“IPI栈”,线程Timer在内存中所占用的内存栈为“Timer栈”,任务1在内存中所占用的内存栈为“任务1栈”,任务2在内存中所占用的内存栈为“任务2栈”。
下面以图5A、图5B所示的最简模型分析如下任务切换流程,其中,图5A为任务切换的方法流程示意图,图5B为任务切换的时序示意图。
S501、假设运行在线程A上的任务1在执行过程中,被任务2打断。
具体的,运行在线程A上的任务1在执行过程中,是通过寄生调度器2触发中断线程IPI打断任务1的,然后由宿主调度器将任务1的断点状态保存至线程A的内存栈“线程A栈”中,并开始由中央处理单元CPU处理中断线程IPI。
S502、假设中断线程IPI在执行过程中被定时中断线程Timer打断,则由宿主调度器将中断线程IPI的断点状态保存至自身栈“IPI栈”内,并且宿主调度器将中央处理单元CPU的资源分配给定时中断线程Timer。
S503、定时中断线程Timer运行完主动让出中央处理单元CPU,宿主调度器将定时中断线程Timer的运行结果保存至自身栈“Timer栈”内。
S504、宿主调度器继续调度未处理完的中断线程IPI,由于中断线程IPI用于实现跨核调度的一个线程,此时,进入寄生调度器2的调度模式。
S505、寄生调度器2调度中央处理单元CPU执行任务2,同时,寄生调度器2将中断线程IPI的断点状态保存至任务2的内存栈“任务2栈”内。
具体的,寄生调度器2可采用长跳转压栈函数setjmp将中断线程IPI的断点状态保存至“任务2栈”内。
S506、任务2运行完主动让出CPU,寄生调度器2将任务2的处理结果保存至自身的内存栈“任务2栈”内。
S507、寄生调度器2在执行完任务2以后,将从任务2的内存栈“任务2栈”内取出未处理完的中断线程IPI的断点状态,继续调度中断线程IPI给CPU处理。
具体的,寄生调度器2可采用长跳转出栈函数longjmp将从任务2的内存栈“任务2栈”内取出未处理完的中断线程IPI的断点状态,继续调度中断线程IPI给CPU处理。
S508、由于中断线程IPI用于实现跨核调度的一个线程,此时,进入宿主调度器的调度模式,宿主调度器在执行中断线程IPI,宿主调度器在执行完中断线程IPI以后,将中断线程IPI的执行结果存储至自身的内存栈“IPI栈”内。
S509、宿主调度器将存储在线程A的内存栈“线程A栈”内的任务1的断点状态从“线程A栈”取出,并通知寄生调度器1将任务1交给CPU执行。
S510、任务1运行完主动让出CPU,寄生调度器1将任务1的处理结果保存至自身的内存栈“任务1栈”内。
至此,通过中断线程IPI实现了跨核调度,即通过中断线程IPI实现了跨地域虚拟处理单元与第二虚拟处理单元之间的任务调度。
从上述例子中可以看出,在需要进行跨核调度的时候,即需要将不同线程上的任务切换执行的过程中,可借助设置在宿主操作系统内中断线程实现,而在不需要进行跨核调度的时候,可通过运行在用户态的寄生调度器调度实现,即移植后的操作系统即可用在需要跨核调度的应用场景中,也可用在不需要跨核调度的应用场景中,因此,能够保证移植后的操作系统能够跨平台服用。
根据以上内容可以看出,通过在第一系统上创建一个单进程,并在该进程上运行第二操作系统,从而能够降低移植操作系统的工作量,又通过在第一操作系统的用户态设置第二操作系统的寄生调度器,在不需要跨核调度的时候,不需要再采用内核态的宿主调度器,从而能够保证第二操作系统的实时性,最后通过在第一操作系统内设置中断线程以实现跨核调度,从而使得移植后的操作系统能够跨平台复用,不仅能够减少开发工作量,还能够降低开发难度。
基于相同的技术构思,本发明实施例还提供一种跨核调度装置,如图6所示,该装置可包括:
创建模块601,用于在第一操作系统上创建一个单进程,在所述单进程上运行第二操作系统,所述第二操作系统的实时性要求高于所述第一操作系统;
处理模块602,用于在所述第一操作系统的用户态设置所述第二操作系统的寄生调度器,所述寄生调度器用于调度承载在所述第二操作系统上的任务集;
还用于在所述第一操作系统内还设置中断线程,所述中断线程由所述第一操作系统的宿主调度器调度且所述宿主调度器工作在所述第一操作系统的内核态。
较佳的,所述单进程包括多个线程,所述多个线程分别处理所述第二操作系统对应的各任务集;
处理模块602,具体用于:
针对所述多个线程中任一线程,分别创建对应的寄生调度器,每个寄生调度器用于调度所述线程的任务集内的各任务。
较佳的,为每个线程设置各自的虚拟处理器,所述虚拟处理器根据物理处理器的数量确定。
较佳的,还包括:触发模块603;
触发模块603,用于在第二线程向第一线程发送中断请求的情况下,触发所述中断线程,以使所述宿主调度器通过所述中断线程实现跨核调度。
较佳的,触发模块603,具体用于:
启动所述宿主调度器运行所述中断线程的中断任务并将第一任务的断点状态保存至所述第一线程的内存栈中;所述第一任务为所述第一线程正在执行的任务;
在运行所述中断线程的过程中执行第一线程的寄生调度器并将所述中断任务的断点状态保存至所述第一线程的第一任务的内存栈中,并触发第一线程的第二任务执行;
在所述第一线程的第二任务执行完成后,执行所述寄生调度器从所述第一线程的第一任务的内存栈调度所述中断任务;
在所述中断任务执行完成后,启动所述宿主调度器从所述第一线程的内存栈调度所述第一任务。
触发模块603,具体用于:
所述第一线程的寄生调度器通过第一跳转函数将所述中断任务的断点状态保存至所述第一线程的第一任务的内存栈中,所述第一跳转函数工作在用户态;以及
所述寄生调度器通过第二跳转函数从所述第一线程的第一任务的内存栈调度所述中断任务,所述第二跳转函数也工作在用户态。
较佳的,所述第一跳转函数为长跳转压栈函数setjmp,所述第二跳转函数为长跳转出栈函数longjmp,且所述长跳转压栈函数setjmp和长跳转出栈函数longjmp成对使用以实现所述寄生调度器的调度功能。
本发明实施例提供了一种计算设备,该计算设备具体可以为桌面计算机、便携式计算机、智能手机、平板电脑、个人数字助理(Personal Digital Assistant,PDA)等。该计算设备可以包括中央处理器(Center Processing Unit,CPU)、存储器、输入/输出设备等,输入设备可以包括键盘、鼠标、触摸屏等,输出设备可以包括显示设备,如液晶显示器(Liquid Crystal Display,LCD)、阴极射线管(Cathode Ray Tube,CRT)等。
存储器可以包括只读存储器(ROM)和随机存取存储器(RAM),并向处理器提供存储器中存储的程序指令和数据。在本发明实施例中,存储器可以用于存储跨核调度方法的程序。
处理器通过调用存储器存储的程序指令,处理器用于按照获得的程序指令执行:在第一操作系统上创建一个单进程,在所述单进程上运行第二操作系统,所述第二操作系统的实时性要求高于所述第一操作系统;在所述第一操作系统的用户态设置所述第二操作系统的寄生调度器,所述寄生调度器用于调度承载在所述第二操作系统上的任务集;在所述第一操作系统内还设置中断线程,所述中断线程由所述第一操作系统的宿主调度器调度且所述宿主调度器工作在所述第一操作系统的内核态。
本发明实施例提供了一种计算机存储介质,用于储存为上述计算设备所用的计算机程序指令,其包含用于执行上述跨核调度方法的程序。
所述计算机存储介质可以是计算机能够存取的任何可用介质或数据存储设备,包括但不限于磁性存储器(例如软盘、硬盘、磁带、磁光盘(MO)等)、光学存储器(例如CD、DVD、BD、HVD等)、以及半导体存储器(例如ROM、EPROM、EEPROM、非易失性存储器(NAND FLASH)、固态硬盘(SSD))等。
综上,本发明实施例提供的一种跨核调度方法和装置,包括:在第一操作系统上创建一个单进程,在所述单进程上运行第二操作系统,所述第二操作系统的实时性要求高于所述第一操作系统;在所述第一操作系统的用户态设置所述第二操作系统的寄生调度器,所述寄生调度器用于调度承载在所述第二操作系统上的任务集;在所述第一操作系统内还设置中断线程,所述中断线程由所述第一操作系统的宿主调度器调度且所述宿主调度器工作在所述第一操作系统的内核态。可以看出,通过在第一系统上创建一个单进程,并在该进程上运行第二操作系统,从而能够降低移植操作系统的工作量,又通过第一操作系统的用户态设置第二操作系统的寄生调度器,在不需要跨核调度的时候,不需要再采用内核态的宿主调度器,从而能够保证第二操作系统的实时性,最后通过在第一操作系统内设置中断线程以实现跨核调度,从而使得移植后的操作系统能够跨平台复用,不仅能够减少开发工作量,还能够降低开发难度。
本领域内的技术人员应明白,本发明的实施例可提供为方法、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (12)
1.一种跨核调度方法,其特征在于,包括:
在第一操作系统上创建一个单进程,在所述单进程上运行第二操作系统,所述第二操作系统的实时性要求高于所述第一操作系统;
在所述第一操作系统的用户态设置所述第二操作系统的寄生调度器,所述寄生调度器用于调度承载在所述第二操作系统上的任务集;
在所述第一操作系统内还设置中断线程,所述中断线程由所述第一操作系统的宿主调度器调度且所述宿主调度器工作在所述第一操作系统的内核态;
在第二线程向第一线程发送中断请求的情况下,触发所述中断线程,以使所述寄生调度器通过所述中断线程实现跨核调度,其中,所述第一线程和第二线程为所述单进程内的线程,通过所述第一线程虚拟第一操作系统的第一虚拟中央处理单元,通过所述第二线程虚拟第二操作系统的第二虚拟中央处理单元;
所述寄生调度器通过所述中断线程实现跨核调度,包括:
启动所述宿主调度器运行所述中断线程的中断任务并将第一任务的断点状态保存至所述第一线程的内存栈中;所述第一任务为所述第一线程正在执行的任务;
在运行所述中断线程的过程中执行第一线程的寄生调度器并将所述中断任务的断点状态保存至所述第一线程的第一任务的内存栈中,并触发第二线程的第二任务执行;在所述第二线程的第二任务执行完成后,执行所述寄生调度器从所述第一线程的第一任务的内存栈调度所述中断任务;
在所述中断任务执行完成后,启动所述宿主调度器从所述第一线程的内存栈调度所述第一任务。
2.如权利要求1所述的方法,其特征在于,
所述单进程包括多个线程,所述多个线程分别处理所述第二操作系统对应的各任务集;
在所述第一操作系统的用户态设置所述第二操作系统的寄生调度器,包括:
针对所述多个线程中任一线程,分别创建对应的寄生调度器,每个寄生调度器用于调度所述线程的任务集内的各任务。
3.如权利要求2所述的方法,其特征在于,
为每个线程设置各自的虚拟处理器,所述虚拟处理器根据物理处理器的数量确定。
4.如权利要求1所述的方法,其特征在于,所述执行第一线程的寄生调度器并将所述中断任务的断点状态保存至所述第一线程的第一任务的内存栈中,包括:
所述第一线程的寄生调度器通过第一跳转函数将所述中断任务的断点状态保存至所述第一线程的第一任务的内存栈中,所述第一跳转函数工作在用户态;
所述执行所述寄生调度器从所述第一线程的第一任务的内存栈调度所述中断任务,包括:
所述寄生调度器通过第二跳转函数从所述第一线程的第一任务的内存栈调度所述中断任务,所述第二跳转函数也工作在用户态。
5.如权利要求4所述的方法,其特征在于,所述第一跳转函数为长跳转压栈函数setjmp,所述第二跳转函数为长跳转出栈函数longjmp,且所述长跳转压栈函数setjmp和长跳转出栈函数longjmp成对使用以实现所述寄生调度器的调度功能。
6.一种跨核调度装置,其特征在于,包括:
创建模块,用于在第一操作系统上创建一个单进程,在所述单进程上运行第二操作系统,所述第二操作系统的实时性要求高于所述第一操作系统;
处理模块,用于在所述第一操作系统的用户态设置所述第二操作系统的寄生调度器,所述寄生调度器用于调度承载在所述第二操作系统上的任务集;
还用于在所述第一操作系统内还设置中断线程,所述中断线程由所述第一操作系统的宿主调度器调度且所述宿主调度器工作在所述第一操作系统的内核态;
触发模块,用于在第二线程向第一线程发送中断请求的情况下,触发所述中断线程,以使所述寄生调度器通过所述中断线程实现跨核调度,其中,所述第一线程和第二线程为所述单进程内的线程,通过所述第一线程虚拟第一操作系统的第一虚拟中央处理单元,通过所述第二线程虚拟第二操作系统的第二虚拟中央处理单元;
所述触发模块,具体用于:
启动所述宿主调度器运行所述中断线程的中断任务并将第一任务的断点状态保存至所述第一线程的内存栈中;所述第一任务为所述第一线程正在执行的任务;
在运行所述中断线程的过程中执行第一线程的寄生调度器并将所述中断任务的断点状态保存至所述第一线程的第一任务的内存栈中,并触发第二线程的第二任务执行;
在所述第二线程的第二任务执行完成后,执行所述寄生调度器从所述第一线程的第一任务的内存栈调度所述中断任务;
在所述中断任务执行完成后,启动所述宿主调度器从所述第一线程的内存栈调度所述第一任务。
7.如权利要求6所述的装置,其特征在于,
所述单进程包括多个线程,所述多个线程分别处理所述第二操作系统对应的各任务集;
所述处理模块,具体用于:
针对所述多个线程中任一线程,分别创建对应的寄生调度器,每个寄生调度器用于调度所述线程的任务集内的各任务。
8.如权利要求7所述的装置,其特征在于,
为每个线程设置各自的虚拟处理器,所述虚拟处理器根据物理处理器的数量确定。
9.如权利要求6所述的装置,其特征在于,所述触发模块,具体用于:
所述第一线程的寄生调度器通过第一跳转函数将所述中断任务的断点状态保存至所述第一线程的第一任务的内存栈中,所述第一跳转函数工作在用户态;以及
所述寄生调度器通过第二跳转函数从所述第一线程的第一任务的内存栈调度所述中断任务,所述第二跳转函数也工作在用户态。
10.如权利要求9所述的装置,其特征在于,所述第一跳转函数为长跳转压栈函数setjmp,所述第二跳转函数为长跳转出栈函数longjmp,且所述长跳转压栈函数setjmp和长跳转出栈函数longjmp成对使用以实现所述寄生调度器的调度功能。
11.一种计算设备,其特征在于,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行权利要求1至5任一项所述的方法。
12.一种计算机存储介质,其特征在于,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使所述计算机执行权利要求1至5任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711215743.0A CN109840137B (zh) | 2017-11-28 | 2017-11-28 | 一种跨核调度方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711215743.0A CN109840137B (zh) | 2017-11-28 | 2017-11-28 | 一种跨核调度方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109840137A CN109840137A (zh) | 2019-06-04 |
CN109840137B true CN109840137B (zh) | 2021-01-22 |
Family
ID=66880969
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711215743.0A Active CN109840137B (zh) | 2017-11-28 | 2017-11-28 | 一种跨核调度方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109840137B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111966472B (zh) * | 2020-07-02 | 2023-09-26 | 佛山科学技术学院 | 一种工业实时操作系统的进程调度方法及系统 |
CN112286697B (zh) * | 2020-11-06 | 2022-11-25 | 上海新时达机器人有限公司 | 基于无操作系统单片机平台的互斥资源访问方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0955581A1 (en) * | 1998-04-16 | 1999-11-10 | Sun Microsystems, Inc. | Software interrupt mechanism |
CN102866966A (zh) * | 2012-08-28 | 2013-01-09 | 大唐移动通信设备有限公司 | 一种Linux操作系统的设备驱动控制方法和装置 |
CN103019838A (zh) * | 2012-11-14 | 2013-04-03 | 清华大学 | 一种基于多dsp处理器平台的分布式实时多任务操作系统 |
CN104572140A (zh) * | 2013-10-10 | 2015-04-29 | 深圳中电长城信息安全系统有限公司 | 一种操作系统移植的方法、装置及系统 |
CN105550029A (zh) * | 2015-12-24 | 2016-05-04 | 迈普通信技术股份有限公司 | 一种进程调度方法及装置 |
CN107391244A (zh) * | 2017-07-11 | 2017-11-24 | 重庆邮电大学 | 一种基于混合调度模型的物联网操作系统调度方法 |
-
2017
- 2017-11-28 CN CN201711215743.0A patent/CN109840137B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0955581A1 (en) * | 1998-04-16 | 1999-11-10 | Sun Microsystems, Inc. | Software interrupt mechanism |
CN102866966A (zh) * | 2012-08-28 | 2013-01-09 | 大唐移动通信设备有限公司 | 一种Linux操作系统的设备驱动控制方法和装置 |
CN103019838A (zh) * | 2012-11-14 | 2013-04-03 | 清华大学 | 一种基于多dsp处理器平台的分布式实时多任务操作系统 |
CN104572140A (zh) * | 2013-10-10 | 2015-04-29 | 深圳中电长城信息安全系统有限公司 | 一种操作系统移植的方法、装置及系统 |
CN105550029A (zh) * | 2015-12-24 | 2016-05-04 | 迈普通信技术股份有限公司 | 一种进程调度方法及装置 |
CN107391244A (zh) * | 2017-07-11 | 2017-11-24 | 重庆邮电大学 | 一种基于混合调度模型的物联网操作系统调度方法 |
Non-Patent Citations (2)
Title |
---|
OSEK实时操作系统任务调度的优化;马明礼;《单片机与嵌入式系统应用》;20071031(第10期);全文 * |
嵌入式实时操作系统移植技术的分析与应用;黄涛 等;《计算机应用》;20030930;第23卷(第9期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN109840137A (zh) | 2019-06-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Amert et al. | GPU scheduling on the NVIDIA TX2: Hidden details revealed | |
CN105074666B (zh) | 执行在具有不同指令集架构的处理器上的操作系统 | |
JP7087029B2 (ja) | 中央処理装置(cpu)と補助プロセッサとの間の改善した関数コールバック機構 | |
JP6387571B2 (ja) | 装置、方法、システム、プログラム、およびコンピュータ可読記録媒体 | |
US10289442B1 (en) | Parallelization in virtual machine operation | |
US8661435B2 (en) | System and method for affinity dispatching for task management in an emulated multiprocessor environment | |
EP2372548A1 (en) | Virtual machine monitor and scheduling method thereof | |
US10761822B1 (en) | Synchronization of computation engines with non-blocking instructions | |
US9529625B2 (en) | Method and system for providing stack memory management in real-time operating systems | |
CN110851246A (zh) | 一种批量任务处理方法、装置、系统及存储介质 | |
KR102205899B1 (ko) | 메모리의 뱅크 충돌을 방지하기 위한 방법 및 장치 | |
CN109840137B (zh) | 一种跨核调度方法和装置 | |
US10289418B2 (en) | Cooperative thread array granularity context switch during trap handling | |
GB2580136A (en) | Handling exceptions in multi-tile processing arrangement | |
US11249777B2 (en) | Virtual machine context management | |
US20150186180A1 (en) | Systems and methods for affinity dispatching based on network input/output requests | |
KR102563648B1 (ko) | 멀티 프로세서 시스템 및 그 구동 방법 | |
Qaralleh et al. | HcM-FreeRTOS: hardware-centric FreeRTOS for ARM multicore | |
KR102003721B1 (ko) | Gpu 커널 트랜잭션화 방법 및 컴퓨팅 장치 | |
CN116360941A (zh) | 一种面向多核dsp的并行计算资源自组织调度方法及系统 | |
US20050086667A1 (en) | Symmetric Scheduling for parallel execution | |
US7984446B1 (en) | Method and system for multitasking BIOS initialization tasks | |
JPH0355634A (ja) | キャッシュ再ロード・オーバーヘッドを減少させる方法およびコンピュータ・システム | |
US20130166887A1 (en) | Data processing apparatus and data processing method | |
US8424013B1 (en) | Methods and systems for handling interrupts across software instances and context switching between instances having interrupt service routine registered to handle the interrupt |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |