本发明涉及网络通信领域,尤其涉及一种分区调度方法。
背景技术:
ARINC 653规范定义了综合模块化航空电子(英文为Integrrated Modular Avionics,英文简称IMA)实时操作系统的行为逻辑以及向应用程序提供的接口规范,该系统提出的分区概念,是ARINC653标准中资源分配、调度、实现系统空间时间隔离的基本单位,保障了IMA航电系统的高可靠性与高安全性。
为了保证航电系统的安全性与可靠性,航电软件在部署应用前需要进行充分的测试和验证。在实际开发过程中,为支持全系统机载软件的研制与调试,目前国内的机载软件运行测试平台主要采用全物理仿真或半物理仿真的搭建方式。在这种方式下,搭建全部平台需要大量真实硬件,并且,由于缺乏开发平台,使得该开发难度比较高,且部署数量受限。在系统集成阶段,多个子系统都需要在完整的平台上测试运行。由于平台资源有限,子系统的运行测试只能排队依次测试,当某个子系统出现问题时,需要返工重新排队申请再次测试。因此,采用航电系统集成单位的测试平台,容易导致系统测试周期长、集成过程复杂,并且任务紧迫,成本昂贵的问题。
综上所述,现有的机载软件运行测试平台存在平台资源受限,导致系统测试周期比较长,集成过程复杂,且导致成本昂贵的问题。
技术实现要素:
本发明提供一种分区调度方法,用以解决现有的机载软件运行测试平台存在平台资源受限,导致系统测试周期比较长,集成过程复杂,且导致成本昂贵的问题。
本发明实施例提供一种分区调度方法,包括
使用驱动加载软件进行系统初始化;
通过配置信息加载器打开共享内存,将系统管理器信息映射至程序的地址空间;
设置APIC Timer标志位并将模块地址作为第一参数发送至模块调度器;
所述模块调度器将所述APIC Timer对应的时间确定为系统当前时间;根据所述第一参数,若确定所述模块地址对应的模块当前状态为POWER_RUNNING,则获取当前正在运行的第一分区信息;若所述第一分区信息对应的分区状态为运行状态,且所述系统当前时间大于所述第一分区预计调度时间,则暂停所述第一分区的调度,并将所述第一分区的第一暂停标志位和第一调度标志位分别设置为TRUE;获取下一个被调度的第二分区,根据所述第二分区Duration确定所述第二分区预计调度时间,若所述第二分区预计调度时间大于所述系统当前时间,则将所述第二分区的第二调度标志位设置为TRUE,并将所述第二调度标志位信息作为调度事件发送至分区调度器;
所述分区调度器根据所述调度事件,若确定所述第二调度标志位的信息为TRUE,则关闭所述第二分区调度功能,先将所述第二分区进行RESUME,并将所述第二分区运行状态设置为NORMAL,并将运行状态为NORMAL的所述第二分区内包括的全部进程按照调度策略进行调度;
ARINC653标准接口按照调度策略将正在调度的第一进程的ID从所述第二分区内删除。
优选地,所述分区调度器根据所述调度事件,若确定所述第二调度标志位的信息为TRUE,则关闭所述第二分区调度功能之后,还包括:
若所述第二分区的第二暂停标志位为TRUE,则暂停所述第二分区的调度。
优选地,所述使用驱动加载软件进行系统初始化包括:
获取系统处理器的核心数量,每个所述核心启动一个模块,并将所有已启动的所述模块的状态设置为POWER_OFF;
将所述模块状态为POWER_ON的所述模块确定为第一模块,为所述第一模块在系统空间申请一块内存空间,获取所述第一模块的内存在整个共享内存中的相对偏移,并将所述第一模块的状态设置为POWER_NORMAL;
将所述模块状态为POWER_BUILDED的所述模块确定为第二模块,为所述第二模块中每个分区创建所述调度事件,并将所述第二模块的状态设置为POWER_RUNNING。
优选地,所述通过配置信息加载器打开共享内存,将系统管理器信息映射至程序的地址空间,包括:
通过配置信息加载器打开所述共享内存,将内核空间中所述系统管理器信息映射至所述程序的地址空间,当所述第一模块的状态从POWER_ON变为POWER_NORMAL时,将所述配置信息写入所述第一模块的内存,并将所述第一模块的状态设置为POWER_BUILDED;
所述配置信息包含模块配置信息、分区配置信息、伪分区配置信息、队列端口配置信息、采样端口配置信息、主时间框架配置信息、调度ID号和调度优先级。
优选地,所述设置APIC Timer标志位并将模块地址作为第一参数传给模块调度器,包括:
确定当前状态为POWER_BUILDED的所述模块地址,将所述模块地址确定为所述第一参数;
将所述APIC Timer周期设置为100微秒,并启动所述APIC Timer。
优选地,所述ARINC653标准接口按照调度策略将正在调度的第一进程的ID从所述第二分区内删除之后,还包括:
将停止进程指针指向所述第一进程,并触发重调度指令,等待对所述第一进程停止调用。
本发明实施例中,提供了一种分区调度方法,包括:使用驱动加载软件进行系统初始化;通过配置信息加载器打开共享内存,将系统管理器信息映射至程序的地址空间;设置APIC Timer标志位并将模块地址作为第一参数发送至模块调度器;所述模块调度器将所述APIC Timer对应的时间确定为系统当前时间;根据所述第一参数,若确定所述模块地址对应的模块当前状态为POWER_RUNNING,则获取当前正在运行的第一分区信息;若所述第一分区信息对应的分区状态为运行状态,且所述系统当前时间大于所述第一分区预计调度时间,则暂停所述第一分区的调度,并将所述第一分区的第一暂停标志位和第一调度标志位分别设置为TRUE;获取下一个被调度的第二分区,根据所述第二分区Duration确定所述第二分区预计调度时间,若所述第二分区预计调度时间大于所述系统当前时间,则将所述第二分区的第二调度标志位设置为TRUE,并将所述第二调度标志位信息作为调度事件发送至分区调度器;所述分区调度器根据所述调度事件,若确定所述第二调度标志位的信息为TRUE,则关闭所述第二分区调度功能,先将所述第二分区进行RESUME,并将所述第二分区运行状态设置为NORMAL,并将运行状态为NORMAL的所述第二分区内包括的全部进程按照调度策略进行调度;ARINC653标准接口按照调度策略将正在调度的第一进程的ID从所述第二分区内删除。上述方法中,采用Windows驱动的方式加载模块调度器,使模块调度器工作在内核态,并使其运行在DPC中断优先级下,从而不会被Windows调度器所打断,保障了调度的稳定性。而对于性能要求不是特别高的分区调度器,则运行在用户态;使用Local APIC中的APIC Timer来触发模块调度器并提供最高精度100微秒的时钟信号,可以保障调度时间的准确性;将ARINC653的接口进行封装,并结合模块调度器和分区调度器,可以让机载软件开发与调试可以在Windows下进行,大大降低了开发难度和成本。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供一种分区调度方法流程示意图;
图2为本发明实施例提供的模块调度器流程示意图;
图3为本发明实施例提供的分区调度器流程示意图;
图4为本发明实施例提供的STOP_SELF函数示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例提供一种分区调度方法流程示意图,如图1所示,该方法主要包括以下步骤:
步骤101,使用驱动加载软件进行系统初始化;
步骤102,通过配置信息加载器打开共享内存,将系统管理器信息映射至程序的地址空间;
步骤103,设置APIC Timer标志位并将模块地址作为第一参数发送至模块调度器;
步骤104,所述模块调度器将所述APIC Timer对应的时间确定为系统当前时间;根据所述第一参数,若确定所述模块地址对应的模块当前状态为POWER_RUNNING,则获取当前正在运行的第一分区信息;若所述第一分区信息对应的分区状态为运行状态,且所述系统当前时间大于所述第一分区预计调度时间,则暂停所述第一分区的调度,并将所述第一分区的第一暂停标志位和第一调度标志位分别设置为TRUE;获取下一个被调度的第二分区,根据所述第二分区Duration确定所述第二分区预计调度时间,若所述第二分区预计调度时间大于所述系统当前时间,则将所述第二分区的第二调度标志位设置为TRUE,并将所述第二调度标志位信息作为调度事件发送至分区调度器;
步骤105,所述分区调度器根据所述调度事件,若确定所述第二调度标志位的信息为TRUE,则关闭所述第二分区调度功能,先将所述第二分区进行RESUME,并将所述第二分区运行状态设置为NORMAL,并将运行状态为NORMAL的所述第二分区内包括的全部进程按照调度策略进行调度;
步骤106,ARINC653标准接口按照调度策略将正在调度的第一进程的ID从所述第二分区内删除。
需要说明的是,本发明实施例需要通过Windows驱动的方式,利用APIC(中文为:高级可编程中断控制器,英文为:Advanced Programmable Interrupt Controller)Timer和共享内存实现了在Windows操作系统环境下符合ARINC653标准的高性能两级调度方法。
在步骤101中,使用驱动加载软件进行系统初始化,主要包括,
在内核中申请一块内存空间,用于存放系统管理器和模块调度器信息,并进行初始化。
步骤101-1,获取系统处理器核心数,每一个核心启动一个模块,并将该模块状态设置为POWER_OFF。
步骤101-2,在用户态启动监视线程,并将内核系统信息映射至当前进程地址空间。
具体地,监视线程主要负责监视步骤101-1中所创建模块的状态变化。
其中,模块的状态变化包括以下类型:
1)、将模块状态为POWER_ON的模块确定为第一模块,并为第一模块在系统空间申请一块内存空间,进一步的,获取第一模块的内存在整个共享内存中的相对偏移,并将第一模块的状态设置为POWER_NORMAL;
2)、将模块状态为POWER_BUILDED的模块确定为第二模块,为第二模块中每个分区创建调度事件,并将第二模块的状态设置为POWER_RUNNING。
步骤101-3,系统初始化完成。
在步骤102中,通过配置信息加载器打开共享内存,将系统管理器信息映射至程序的地址空间。其中,配置信息包含模块配置信息、分区配置信息、伪分区配置信息、队列端口配置信息、采样端口配置信息、主时间框架配置信息、调度ID号和调度优先级。
通过配置信息加载器打开共享内存,将内核空间中系统管理器信息映射至程序的地址空间,当第一模块的状态从POWER_ON变为POWER_NORMAL时,将配置信息写入第一模块的内存,并将第一模块的状态设置为POWER_BUILDED;
在步骤103中,设置APIC Timer标志位并将模块地址作为第一参数发送至模块调度器。
需要说明的是,在实际应用中,APIC Timer负责触发模块调度器,并为整个调度器部分提供时钟信号,其实现如下:
设置APIC Timer,当驱动程序收到消息后,首先找到当前状态为POWER_BUILEDED的第二模块的地址,将第二模块的地址作为第一参数传给模块调度器。然后设置APIC Timer标志位,将APIC Timer周期设置为100微秒,并启动APIC Timer,触发模块调度器。
需要说明的是,设置APIC Timer的同时,还设置初始计数寄存器、分频寄存器(英文为:divide configuration register)和本地向量表寄存器(英文为:LVT register),使其能产生微秒级的时钟信号供调度器使用。
在步骤104中,图2为本发明实施例提供的模块调度器流程示意图,如图2所示,模块调度器工作流程主要包括以下步骤:
步骤104-1,模块调度器通过读取APIC Timer寄存器数值获取当前系统时间;模块调度器读取指向当前模块信息的指针获取模块信息,其中模块信息包括:模块状态,模块内存大小,模块编号,模块分区数,模块的分区表,当前正在运行的分区和模块调度信息。
步骤104-2,如果当前模块状态为POWER_RUNNING,则获取当前正在运行的分区。
步骤104-3,如果系统时间已经大于等于预计调度时间且当前分区运行模式为NORMAL,则暂停当前分区,并将当前分区暂停标志位设置为TRUE,将调度标志位设置为TRUE。
步骤104-4,然后获取下一个分区的分区窗口,根据主时间框架中当前分区Duration设置当前分区调度时间,若当前分区运行模式不为IDLE,则将当前分区调度标志位设置为TURE,通知当前分区的分区调度器可以进行调度。
需要说明的是,在确定第二调度标志位的信息为TRUE,并关闭第二分区调度功能之后,还包括:
若确定第二分区的第二暂停标志位为TRUE,则暂停第二分区的调度。
在步骤105中,分区调度器根据所述调度事件,若确定第二调度标志位的信息为TRUE,则关闭第二分区调度功能,先将第二分区进行RESUME,再将第二分区运行状态设置为NORMAL,并将运行状态为NORMAL的所述第二分区内包括的全部进程按照调度策略进行调度。
需要说明的是,在本发明实施例中,分区内调度是以进程作为基本单位,基本调度策略为优先级抢占,对于同优先级进程,采用FIFO的调度策略。具体地:在冷启动或者热启动模式下,分区内的进程只能处于等待或者休眠状态;在空闲状态下,分区为空白分区,将不会初始化分区内的进程;在正常状态下,分区内的进程才可以将处于准备状态变为运行状态。
图3为本发明实施例提供的分区调度器流程示意图,如图3所示,分区调度器的工作流程主要包括:
分区在Windows操作系统以用户态程序的形式进行加载,当分区加载后,启动当前分区的调度器线程。调度器线程首先将内核中系统管理器映射到当前地址空间,然后采用轮询方式获取当前分区调度标志位。
若当前分区的调度标志位被模块调度器被设置为TRUE,则按照调度策略调度当前分区内进程。否则,则释放当前CPU,直到调度标志位标志位为TRUE。
在步骤106中,ARINC653标准接口按照调度策略将正在调度的第一进程的ID从第二分区内删除。
需要说明的是,ARINC653标准接口部分通过利用Win32接口实现出符合ARINC653标准的接口,并结合上述的调度器部分,从而使机载软件可在Windows平台下直接进行开发和测试。
对于ARINC653接口的封装,以下以STOP_SELF函数并结合图4为例,来介绍ARINC653标准接口的工作流程,其中,图4为本发明实施例提供的STOP_SELF函数示意图,用于暂停调用该函数的进程,其操作实现如下:
首先获得当前分区调度器中的当前分区;
将调用STOP_SELF函数的进程ID从当前分区的StateList中删除,并将分区调度器的当前停止进程指针指向STOP_SELF函数的进程;
触发重调度,等待分区调度器对调用进程进行停止操作。
综上所述,本发明实施例提供了一种分区调度方法,采用Windows驱动的方式加载模块调度器,使模块调度器工作在内核态,并使其运行在DPC中断优先级下,从而不会被Windows调度器所打断,保障了调度的稳定性。而对于性能要求不是特别高的分区调度器,则运行在用户态;使用Local APIC中的APIC Timer来触发模块调度器并提供最高精度100微秒的时钟信号,可以保障调度时间的准确性;将ARINC653的接口进行封装,并结合模块调度器和分区调度器,可以让机载软件开发与调试可以在Windows下进行,大大降低了开发难度和成本。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的系统。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令系统的制造品,该指令系统实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。