本发明涉及操作系统领域,具体涉及实时安卓操作系统中的实时和非实时处理严格隔离的方法。
背景技术:
随着soc(systemonchip)技术的不断发展,嵌入式系统在人们生产,生活的各个方面应用越来越广泛。大到航天航空,小到智能手机,智能手表等,可以说是无处不在。由于工作的特殊性,很多嵌入式设备要求系统对外部事件的响应必须在事先设定的时限范围内完成,使系统具有可预测性,因此就必须使用实时操作系统。
常用的嵌入式实时操作系统包括有硬实时vxworks,qnx和ucosii等,软实时则包括有wince等。像vxworks,qnx和ucosii等都是一些功能比较简单的封闭式操作系统。随着现在的系统日趋复杂,越来越需要把一些通用的有完善生态链的分时操作系统,如:linux,windows等改造成实时操作系统,这样既能满足通用需求又能满足特殊需求。由于linux开源的特性,这方面已有一些很好的解决方案,如:rtlinux,rtai,montavista等。
现在使用越来越广泛的谷歌安卓(android)操作系统也是一种通用的有完善生态链的分时操作系统,它基于linux内核。本人开发了实时安卓操作系统(rtandroid),也是将安卓(android)操作系统改造成了一个硬实时的操作系统。
将通用分时操作系统改造成实时操作系统有一个困扰多年的问题,非实时处理和实时处理藕合在一起,当正常的通用非实时处理处在重负载情况下时,会对实时处理有较大影响,相应的实时性能会有较大下降,这也妨碍了将通用分时操作系统改造成的实时操作系统在很多领域的应用。
技术实现要素:
针对现有技术中的不足,本发明提供实时安卓操作系统中的实时和非实时处理严格隔离的方法。
为了达到上述发明目的,本发明采用的技术方案为:
提供实时安卓操作系统中的实时和非实时处理严格隔离的方法,包括如下步骤:
内核配置步骤,在系统内核配置宏或特定的函数返回值,用以判断是否隔离实时和非实时任务;
cpu处理能力配置步骤,设置cpu的变量rt_cpumask;
系统进程分配步骤,基于rt_cpumask将任务分配到对应的cpu上运行;
非rt_cpumask规则非实时进程分配步骤。
进一步的,所述内核配置步骤,启用隔离实时和非实时任务时,所述cpu处理能力配置步骤包括:
步骤21:读取用户是否预设置了实时任务的cpumask;
步骤22:检查用户是否预设置了实时任务的cpu数;
步骤23:未预设实时任务的cpu数,根据cpu数找到系统中最慢的cpu,将它们设置到实时任务的cpumask变量rt_cpumask中;
进一步的,所述内核配置步骤中,不启用隔离实时和非实时任务时,rt_cpumask为null。
进一步的,所述步骤21预设有实时任务的cpu数时,将有效的cpu设置到实时任务的cpumask变量rt_cpumask中。
进一步的,所述系统进程分配步骤中,依据进程的cpus_allowed的cpumask,修改cpus_allowed排除掉rt_cpumask,即可使非实时进程不运行在rt_cpumask上。
进一步的,所述的修改cpus_allowed的方法为:改init_task的cpus_allowed,其后所有的非实时进程或线程均继承了改后的值;或在sched_fork中在初始化cpus_allowed时改掉。
进一步的,其特征在于:所述非rt_cpumask规则非实时进程分配步骤,包括:
步骤41:在fork完成后,检查是否符合rt_cpumask的规则;
步骤42:将非实时进程绑定到符合rt_cpumask的规则的非实时cpumask上。
优选的,所述系统进程分配步骤,还提供了将非实时任务绑定到实时任务不运行的cpu核上的接口。
本发明的与现有技术相比:通过将实时任务和非实时任务严格隔离到不同cpumask上,将实时处理和非实时处理的藕合度降到最低,这样双方基本上不相互影响,保证了在一方有重负载时另一方的性能,尤其是非实时处理在重负载状态下实时处理的性能。实时和非实时调度策略的修改或配置修改不会影响另一方的行为。提供了将非实时任务绑定到实时任务不运行的cpu核上的接口;提供了将非实时任务强制分配到实时任务运行的cpu核上的接口,以充分利用实时任务运行的cpu核;提供了将实时任务强制分配到非实时任务运行的cpu核上的接口。这样用户可方便地根据现实需求来调整实时和非实时任务的cpumask分配,以提供最好的用户体验。
附图说明
图1为实时安卓操作系统中的实时和非实时处理严格隔离的方法的流程示意图。
具体实施方式
下面对本发明的具体实施方式进行描述,以便于本技术领域的技术人员理解本发明,但应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。
实施例1
实时安卓操作系统中的实时和非实时处理严格隔离的方法,包括设如下步骤:
内核配置步骤,在系统内核配置宏或特定的函数返回值,用以判断是否隔离实时和非实时任务;
cpu处理能力配置步骤,设置cpu的变量rt_cpumask;
系统进程分配步骤,基于rt_cpumask将任务分配到对应的cpu上运行;
非rt_cpumask规则非实时进程分配步骤。
进一步的,所述内核配置步骤,启用隔离实时和非实时任务时,所述cpu处理能力配置步骤包括:
步骤21:读取用户是否预设置了实时任务的cpumask;
步骤22:检查用户是否预设置了实时任务的cpu数;
步骤23:未预设实时任务的cpu数,根据cpu数找到系统中最慢的cpu,将它们设置到实时任务的cpumask变量rt_cpumask中;
内核配置步骤中,不启用隔离实时和非实时任务时,rt_cpumask为null。
步骤21预设有实时任务的cpu数时,将有效的cpu设置到实时任务的cpumask变量rt_cpumask中。
系统进程分配步骤中,依据进程的cpus_allowed的cpumask,修改cpus_allowed排除掉rt_cpumask,即可使非实时进程不运行在rt_cpumask上。这样改的好处是,对分时操作系统中保证各非实时进程或线程公平共享处理器的调度代码的改动减到最小。
修改cpus_allowed的方法为:改init_task的cpus_allowed,其后所有的非实时进程或线程均继承了改后的值;或在sched_fork中在初始化cpus_allowed时改掉。
非rt_cpumask规则非实时进程分配步骤,包括:
步骤41:在fork完成后,检查是否符合rt_cpumask的规则;
步骤42:将非实时进程绑定到符合rt_cpumask的规则的非实时cpumask上。
实施例2
系统进程分配步骤,还提供了将非实时任务绑定到实时任务不运行的cpu核上的接口。提供了将非实时任务强制分配到实时任务运行的cpu核上的接口,以充分利用实时任务运行的cpu核;提供了将实时任务强制分配到非实时任务运行的cpu核上的接口。