一种多核实时操作系统多个就绪任务快速查找及调度方法

文档序号:6537342阅读:316来源:国知局
一种多核实时操作系统多个就绪任务快速查找及调度方法
【专利摘要】本发明公开一种多核实时操作系统就绪任务快速查找及调度方法,涉及计算机【技术领域】,本发明提出基于任务就绪表的多就绪高优先级任务快速查找方法,解决多核实时操作系统中就绪任务快速查找;基于有序表的可调度任务和可抢占内核查找方法,查找调度内核和快速调度任务到指定的内核;通过基于核间中断消息的核间调度请求的方法,内核在不需要重新查找就续表的情况下快速运行高优先级任务,解决实时多核系统中多高优先级就绪任务快速响应问题。基于事件触发同一优先级多任务调度,针对实时嵌入式系统中的同步任务组实时性要求,设计一种同一优先级多任务实现方法,解决实时系统中同步任务组的并行调度问题。
【专利说明】一种多核实时操作系统多个就绪任务快速查找及调度方法
【技术领域】
[0001]本发明涉及嵌入式系统多核实时操作系统调度【技术领域】。
【背景技术】
[0002]随着微电子技术的发展,对称同构多核处理器(SMP-symmetricalmult1-processingprocessor)被广泛应用于嵌入式系统领域。随着信息技术,尤其是通信技术和物联网技术的发展,实时嵌入式系统已经成为计算机系统的主流。未来实时嵌入式系统的一个显著趋势就是应用复杂度将不断提高。例如在通信领域,无论实在通信基础设施,还是在终端设备中,运算需求都在不断提高。而这类系统对时间可预测性、高可信、低功耗等方面的苛刻要求也从未降低。还有车联网领域,特别是智能车辆的发展,车辆互联及通信是未来车联网的发展趋势。车载终端不仅需要处理车联网信息、车载媒体信息,还需要实时处理车辆自身的传感信息,如视频监控、控制等。要同时完成如此多的功能,满足实时性要求,传统的单核处理器已经无法解决上述矛盾。多核处理器在一个芯片上集成多个处理核心,通过挖掘应用的任务级并行性和数据级并行性,能够在单位功耗和体积上,提供更大的计算能力。因此,多核处理器应用于未来的实时系统已经成为不可逆转的趋势。
[0003]随着多核处理器的发展,对软件开发有非常大的影响,而且核心的瓶颈在软件上。只有与多核硬件相适应的软件,才能真正地发挥多核的性能。多核对软件的要求包括对多核操作系统的要求和对应用软件的要求,特别是多核操作系统的性能。在嵌入式系统中,随着多核处理器应用的日益广泛,一些主流的嵌入式系统厂商也逐渐开始提供一些基于多处理器构架的实时操作系统解决方案。为了充分利用处理器的性能,有很多嵌入式操作系统也提供了多核管理与调度的功能,如Linux、Vxworks、QNX等操作系统。
[0004]多核嵌入式操作系统构架设计主要有两种:一种是主从式构架结构,另一种是对称式构架结构。主从式多核操作系统根据多核处理器的功能把内核分成主核和从核,由于从核中只有局部调度器,需要向主核请求处理,任务的激活与运行需通过主核来进行调控,由主核决定任务的分配。这种结构的操作系统容易造成从核在等待主核指令的过程中时间的浪费,降低了任务调度的实时性;同时这种结构随着处理器核的增加,要求主核管理的资源、任务调度、事件处理、通信管理等对象也增多,主核负载的增加,将导致主核不能实时有效处理这些事件,成为性能提高的瓶颈。而对称式构架是采用相同的结构来设计操作系统,每个处理器核中访问同一个操作系统内核,特别是在内核任务通信与同步、共享资源管理等部分。这种结构的操作系统由于结构较单一,便于系统设计实现。但是由于多个处理器访问同一个内核,需要互斥等待访问内核,降低了内核的访问速度。
[0005]嵌入式实时操作系统对调度时间、任务响应速度都有较高的要求。就绪任务,特别是实时性要求较高的任务要求较短的时间内的得到响应和调度。这就要求调度算法具有简单快速的特点。当前支持多核处理器的实时操作系统并不是很多,以Vxworks、QNX较为典型。Vxworks和QNX操作系统对SMP处理器的支持,采用一个操作内核对多个处理器核进行管理,采用自旋锁防止访问冲突,这种结构会造成多核处理器的访问内核时的互斥,降低了内核访问的并行性,从而降低了多核的性能。随着处理器技术和存储器技术的发展,存储空间对于实时操作系统来说不再是主要考虑的问题。
[0006]在多核实时操作系统中,多就绪任务的查找在高优先级任务的选择方法是调度器设计的重点之一,如何快速的查找到就绪任务,触发调度内核的快速响应并及时调度是多核实时操作系统调度器设计的重点。当前支持多核的嵌入式操作系统大多采用主从式加队列的方式进行的,由一个主核管理整个系统任务,在各个从核中建立局部队列。主核根据从核的负载情况动态地分配任务到从核队列中,供从核运行。这种方法只适合于一般的非实时系统。对于实时操作系统来说,需要快速响应优先级较高的任务,尽量减少等待时间。对于当前多核实时操作系统的高优先级就绪任务查找方法,虽然大多算法复杂度为0(1)。但是在查找过程中的实现步骤较多,随着任务的增加,其查找时间也随之上升。这种方法对于一个要求较高的实时系统来说,调度时间具有不确定性。
[0007]同时,当前嵌入式操作系统支持的相同优先级多任务的方式都是基于时间片方式,如Linux、Vxworks等。这种方法对于同一优先级任务的并行分时执行可以达到很好的效果。但是对于实时系统来说,特别是多核处理器在实时系统中的应用,以前不能并行处理的多任务同步就是通过事件来触发任务调度的。这种方法没有考虑实时多核系统中同步任务组并行执行要求,特别是在机器人、数控机床、发动机控制等领域中,常存在多种任务组,每个任务组基本上是由外部事件触发调度,实时性要求高。这类任务可以在多核中得到并行执行。如果采用时间轮转调度,达不到实时同步的效果。

【发明内容】

[0008]为了解决多核实时系统中单一操作系统内核并行访问的互斥和延迟问题,本发明采用多主内核的操作系统架构。在这种架构中,每个内核都可以作为主核对全局任务进行调度,每个处理器核访问属于自己的内核代码,不需要自旋锁来防止内核访问冲突,有效地实现负载均衡、快速内核访问和任务的实时响应问题。这种架构虽然不能解决总线访问的等待问题,但可以有效解决同一内核访问的互斥等待问题。在此基础上,本发明设计了实时多核系统中多任务选择及调度方法,实现任务的快速调度;并设计了一种基于事件触发调度的同一优先级多任务调度算法,解决同步任务并行调度问题。
[0009]本发明解决上述技术问题的技术方案,提出一种基于多主调度模式的多核实时操作系统就绪任务快速查找及调度方法,设置基于位图的任务就绪表表示多核任务就绪状态,多个内核共同维护该任务就绪表,当多核任务运行时在任务就绪表中的状态仍然为就绪状态。同时,本发明还设置了一个高优先级任务就绪表用来存储下一次将要运行的高优先级任务,用内核-任务映射表保存当前运行任务与内核的对应关系。每个内核在任务就绪表中一次性查找与内核个数相同的高优先级就绪任务,在任务就绪表中读取就绪任务优先级,删除在任务就绪表中该就绪任务优先级对应位的有效值,以内核个数相同的次数查找到与内核个数相同的优先级任务顺序存储在高优先级任务就绪表中;多内核维护一个任务就绪表,OS内核根据算法从高优先级任务就绪表与内核-任务映射表中找出没有在内核-任务映射表中的高优先级任务作为调度任务和没有在高优先级任务就绪表中的当前运行任务所在的内核作为被抢占内核,通过核间中断主动触发相应的内核调度指定高优先级任务运行。为了解决同一优先级支持多个同步任务,本发明通过设置一个结构体定义任务优先级,主要包括基本优先级核优先级偏移量,优先级偏移量的值作为相同优先级的任务的次优先级。当任务就绪表中基本优先级对应位有效时,通过查找基本优先级对应的优先级偏移量,实现多核对同优先级同步多任务调度。
[0010]采用多主多OS内核结构,所有内核维护同一个任务调度列表及任务就绪表,每个内核作为主核对任务就绪表进行修改,通过查表快速读取与内核个数相同的就绪任务优先级值;比较读取的就绪任务优先级值与保存的当前运行任务优先级值,获取需要调度的任务优先级和可以抢占的内核;内核寻找可调度任务和可抢占内核,通过核间通信以消息的形式通知指定的内核调度指定的任务;针对同步任务组根据基本优先级加优先级偏移量,基于事件触发调度同一优先级多任务对应同一基本任务。所述通过查表快速读取与内核个数相同的就绪任务优先级值具体为:拷贝基于位图的就绪表到指定的变量中,每查找一个高优先级任务后,删除变量中已找到的优先级对应的位,再查找剩余就绪任务优先级值,直至所有就绪任务优先级值查找完成。所述获取需要调度的任务优先级和可以抢占的内核具体包括:建立“高优先级任务就绪表”和“内核-任务映射表”两个优先级有序表按照优先级顺序分别存储当前查找到的高优先级任务的优先级和当前运行任务优先级以及所在的内核编号,从高优先级任务就绪表中取出一个任务,在内核-任务映射表中查找该任务是否已经运行,并以上一次查找到的已运行任务优先级为起点开始查找下一个已经运行的任务优先级,逐步减少查找次数,找出需要调度的任务和可以抢占内核。主核在找到需要调度的任务及可以抢占的内核后,通过核间中断以消息的形式把需要调度的任务优先级传送给指定抢占内核,主动触发指定内核快速调度运行指定的高优先级任务。调度同一优先级多任务对应同一基本任务具体包括:在基本优先级中添加一个优先级偏移量表示多个任务优先级,每个任务对应偏移量中一位。基于事件触发的调度方法具体包括:根据优先级偏移量设置一个优先级多任务就绪变量记录偏移量优先级对应任务的就绪状态,采用事件触发调度触发多任务调度同一优先级对应的多个就绪任务。
[0011]多内核维护一个任务就绪表具体包括:每个处理器内核在内存中维护一个操作系统内核镜像,同时维护本地内核相关的数据结构,在内核启动时只拷贝本地内核相关的数据结构到指定的区域,所有内核访问共享数据结构时通过全局自旋锁互斥访问,获得任务就绪表读写控制权的内核访问该全局任务就绪表,通过自旋锁进行互斥,所有内核访问共同的任务代码,每个内核只能访问一个任务代码,同时,每个内核维护一组本地的系统任务;所有内核维护一个共享事件列表,一个内核通过事件列表读取和接收相应的事件;所有内核共同维护一个“内核-任务映射”表,内核-任务映射表用于维护记录运行任务与内核的关系。内核在调度任务时,把当前任务记录在该映射表中,在任务抢占时,内核通过该映射表查找抢占的任务,在多内核镜像处理中,每个内核维护一个内核本身的数据结构。设置位图式就绪表表示多核任务就绪状态具体包括:首先设置一个与内核个数相等的数组作为高优先级就绪表存储高优先级;设置两个临时变量分别用于存储高优先级就绪表的行和行对应列的值,然后拷贝高优先级就绪表对应的行值到一个变量中;设置两个查找表,一个用来查找高优先级任务行和列对应的值,一个用来查找行对应的位,查找查找表获得高优先级任务对应的行值,将该行的值拷贝到局部变量中。对多主模式操作系统架构,采用两个有序表分别存储当前查找到的高优先级任务的优先级,当前运行任务优先级以及所在的内核编号,逐次比较方法找出需要调度的任务和可以抢占内核。主核可以通过核间中断主动触发指定内核在不需要重新查找就绪表的情况下调度运行新的高优先级任务,通过消息把需要调度的任务优先级及入口地址传送给调度核
[0012]本发明技术方案中,基于就绪表的多就绪任务快速查找方法包括:(1)基于任务就绪表的多就绪高优先级任务快速查找,只需要内核个数相同循环次数就可以快速查找与内核相同个数的高优先级任务,解决多核实时操作系统中需要调度的就绪任务快速查找问题。(2)基于有序表的可调度任务和可抢占内核查找,针对实时嵌入式系统要求,在多主模式操作系统架构基础上,本发明设计了一个高优先级就绪任务表用于保存当前查找到的高优先级任务的优先级,同时还设计了内核-任务映射备份表按照任务优先级顺序保存当前运行任务优先级以及所在的内核编号。根据高优先级任务就绪表和内核-任务映射表的任务优先级的差异性,快速找出需要调度的任务和可以抢占内核。(3)基于核间中断消息的核间调度请求,主核可以通过核间中断主动触发指定内核在不需要重新查找就绪表的情况下快速调度运行新的高优先级任务,通过消息把需要调度的任务优先级及入口地址等信息传送给调度核。解决实时多核系统中多高优先级就绪任务调度快速响应问题。(4)基于事件触发同一优先级多任务调度,针对实时嵌入式系统中的同步任务组实时性要求,设计一种同一优先级对应多任务实现方法,并设计了基于事件触发的调度方法,解决实时系统中同步任务组的并行调度问题。
[0013]本发明能有效地实现多核任务调度的就绪任务快速查找,任务调度的快速响应,有效解决同步任务在多核中的快速调度问题。
【专利附图】

【附图说明】
[0014]图1多主模式多核实时操作系统架构;
[0015]图2支持64个任务的任务就绪表位图示意;
[0016]图3多核中多就绪任务、可用内核查找及调度方法示意图。
【具体实施方式】
[0017]针对大多数同构多核处理器而言,没有自己独立的内存,数据和程序共享。如何实现这些程序和数据的有效共享是多核操作系统的设计关键。由于是共享内存和flash结构,为了避免访问的冲突,将存储空间划分为几个区域,每个区域设定一个访问权限,规定访问的内核。
[0018]现在处理器的存储空间越来越大,存储空间对实时操作系统来说不是问题。本发明中的操作系统内核架构总体上采用对称多主内核结构。在该架构中,每个内核运行一个内核的镜像,而其他的功能如图形用户接口(GUI)、文件系统(FS)、人机交互组件可以作为一个独立任务指定由不同的内核执行,避免这些功能来回调度,而任务、系统启动、驱动等模块是共享模块。或者由主核负责管理,其他处理器核都有一个操作系统OS内核的拷贝,这样可以避免同时访问同一个内核排队的问题。这些OS内核共同维护全局任务队列和全局数据结构。整个结构示意图如附图1所示。
[0019]在多主多核操作系统中,在系统启动时,拷贝多个0S内核镜像,每个处理器核都可以通过访问自己的OS内核以主核的方式管理系统资源,实现任务的主动调度,如附图1所示。OS内核个数多少是根据应用的具体要求进行配置的,可以多个处理器核访问一个OS内核,也可以一个OS内核对应一个处理器核。除OS内核外,其他软件(如⑶1、FS、Drivers等)都可以作为共享资源来进行访问,可以动态分配或者调度到不同的内核上运行,使各个核上的负载更加均衡。每个OS内核都可以作为主内核进行全局资源管理和应用任务的调度,程序运行在处理器核时,访问属于自己的那个OS内核,减少与其他处理器核发生访问冲突,同时也减少了处理器核访问OS内核时的等待时间。
[0020]本发明申请的多主模式,在结构上采用多个OS内核维护一个全局任务列表。每个OS内核在完成通信、互斥、同步或者中断等操作后均查看任务就绪表,按照本发明提供的任务查找算法和调度方法进行任务调度,如果存在新的高优先级就绪任务,则会主动触发其他内核在不用查找高优先级任务的情况下,快速调度新的高优先级任务运行。解决多内核实时任务的被动调度和负载均衡问题,提高系统实时性。具体实施步骤如下。
[0021]1.基于任务就绪表的多就绪高优先级任务快速查找方法在多核实时操作系统中,为了保证实时性,需要快速查找和选择高优先级就绪任务抢占低优先级任务运行。主要包括两个方面:基于任务就绪表的多个高优先级就绪任务查表选择和被抢占任务快速选择。本发明采用基于位图的任务就绪表,设计一种根据任务就续表中的值然查表的多高优先级任务快速查找方法。该方法通过内核个数相同次数快速查找与内核相同个数的优先级任务用于调度。解决多核实时操作系统中就绪任务快速查找问题。
[0022]在单核操作系统中,高优先级任务可以通过位图方式设置任务优先级在任务就绪表对应位为I来表示该任务就绪,设置为O的方式来表示该优先级任务移除任务就绪表。本发明采用上述方法设置和移除任务的就绪位。运行任务的就绪状态直到任务被挂起、退出或者删除时,才会从任务就绪表中移除。在此基础上,本发明根据实时嵌入式系统的要求,设计一种快速查找与内核个数相同的高优先级就绪任务优先级的方法。实施方式描述如下:
[0023]和单核处理器不同,在多核的多主模式中,每次最多可以选择内核个数相等的任务调度抢占内核运行任务。根据多主调度模式要求,每个内核都可以作为主核负责任务的调度,主核可以通知其他内核调度指定的任务。因此,内核需要一次读取内核个数相同的高优先级就绪任务优先级。在查找过程中,为了快速获得高优先级就绪任务的优先级,并且不重复读取任务就绪表和影响任务就绪表的值,采用变量来拷贝任务就绪表的行和列对应值,然后通过查表方法获取高优先级对应的行和列。事先计算任务就绪表行和列每个值对应的高优先级的行和列值,存放到一个行和列值的查找表中,首先根据就绪表的行值查找任务就绪表的高优先级所在的行号,然后在该行查找高优先级任务所在的列。
[0024]本发明中设置优先级越高时,其编号也越小。把就绪表位分别一个变量和一个一维维数组表示,变量的每一位表示就绪表对应的行的状态,如果某一位为I表示该位对应的这一行中至少有一个任务处于就绪;如果为O表示该位对应的行没有处于就绪的任务。而一维数组用于表示某一行对应的列位,同样,当这个一维数组的某个元素的某一列对应位为I时,表示该位对应的优先级任务就绪,如果为O表示该任务处于非就绪状态。调度器就是通过这个就绪表来对任务就绪状态进行设置的。当查找高优先级就绪任务时,先查找高优先级任务所在的行,然后根据行号查找高优先级任务所在的列,通过行和列找到优先级任务的优先级。假设操作系统支持的任务个数为2n,其中η为偶数。设某一任务优先级所在的行和列分别为a、b,则任务优先级可以用公式(I)表示。[0025]Prio=a<< (n/2) +b (I)
[0026]为了减少获取最高优先级的计算时间,我们事先计算出各种情况的优先级值,然后采用查表方法获得行a和列b,再计算得到优先级值。我们设定优先级支持的个数为2n,把就绪表中行值用OSRdyX表示,OSRdyX中每一位对应于该行是否存在就绪的任务,如果为I表示存在就绪任务,如果为O表示不存在就绪任务。就绪表某一行i对应的列值用0SRdyY[i]表示,每一位对应于该列是否存在就绪的任务,如果为I表示列对应的任务就绪,如果为O表示该任务不就绪。如附图2所示支持64个任务就绪表位图示意。如公式(2)所示,改变i或者j的值,使行值OSRdyX除以21或者列值OSRdyY[i]除以2」等于奇数,i或j为优先级所对应行或列的查表值,而OSRdyX或0SRdyY[i]为查表值所对应表的index
号,即位置编号。
[0027]
【权利要求】
1.一种基于多主内核调度模式的多核实时操作系统就绪任务快速查找及调度方法,其特征在于,采用多主多OS内核结构,所有内核维护同一个任务调度列表及任务就绪表,每个内核作为主核对任务就绪表进行修改,通过查表快速读取与内核个数相同的就绪任务优先级值;比较读取的就绪任务优先级值与保存的当前运行任务优先级值,获取需要调度的任务优先级和可以抢占的内核;内核寻找可调度任务和可抢占内核,通过核间通信以消息的形式通知指定的内核调度指定的任务;针对同步任务组根据基本优先级加优先级偏移量,基于事件触发调度同一优先级多任务对应同一基本任务。
2.根据权利要求1所述的方法,其特征在于,所述通过查表快速读取与内核个数相同的就绪任务优先级值具体为:拷贝基于位图的就绪表到指定的变量中,每查找一个高优先级任务后,删除变量中已找到的优先级对应的位,再查找剩余就绪任务优先级值,直至所有就绪任务优先级值查找完成。
3.根据权利要求1所述的方法,其特征在于,所述获取需要调度的任务优先级和可以抢占的内核具体包括:建立高优先级任务就绪表和内核-任务映射表两个优先级有序表按照优先级顺序分别存储当前查找到的高优先级任务的优先级和当前运行任务优先级以及所在的内核编号,从高优先级任务就绪表中取出一个任务,在内核-任务映射表中查找该任务是否已经运行,并以上一次查找到的已运行任务优先级为起点开始查找下一个已经运行的任务优先级,逐步减少查找次数,找出需要调度的任务和可以抢占内核。
4.根据权利要求1所述的方法,其特征在于,主核在找到需要调度的任务及可以抢占的内核后,通过核间中断以消息的形式把需要调度的任务优先级传送给指定抢占内核,主动触发指定内核快速调度运行指定的高优先级任务。
5.根据权利要求1所述的方法,其特征在于,调度同一优先级多任务对应同一基本任务具体包括:在基本优先级中添加一个优先级偏移量表示多个任务优先级,每个任务对应偏移量中一位。
6.根据权利要求1所述的方法,其特征在于,基于事件触发的调度方法具体包括:根据优先级偏移量设置一个优先级多任务就绪变量记录偏移量优先级对应任务的就绪状态,采用事件触发调度触发多任务调度同一优先级对应的多个就绪任务。
【文档编号】G06F17/30GK103729480SQ201410042680
【公开日】2014年4月16日 申请日期:2014年1月29日 优先权日:2014年1月29日
【发明者】蒋建春, 孟凡迪, 何兵, 曾素华, 邱宝梅, 邓露, 王开龙, 陈慧玲 申请人:重庆邮电大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1