一种单任务实时消息传递操作系统的制作方法

文档序号:16879927发布日期:2019-02-15 22:01阅读:290来源:国知局
一种单任务实时消息传递操作系统的制作方法

本发明涉及操作系统技术领域,具体涉及一种基于安卓的单任务实时消息传递操作系统。



背景技术:

分时系统的主要目的是让多个计算机用户能共享系统的资源,能及时地响应和服务于联机用户,只具有很弱的实时功能,与实时操作系统有明显的区别。具体的说,对于分时操作系统,软件的执行在时间上的要求,并不严格,时间上的错误,一般不会造成灾难性的后果。而对于实时操作系统,主要任务是对事件进行实时的处理,虽然事件可能在无法预知的时刻到达,但是软件上必须在事件发生时能够在严格的时限内作出响应(系统响应时间),即使是在尖峰负荷下,也应如此,系统时间响应的超时就意味着致命的失败。另外,实时操作系统的重要特点是具有系统的可确定性,即系统能对运行情况的最好和最坏等的情况能做出精确的估计。

传统的安卓(android)系统可以看做一个三层结构:自底向上分别是linux内核、支撑库、运行时系统和应用框架层。在系统之上运行的应用程序,如图1所示。

在运行实时应用时,安卓的应用程序框架层存在如下问题,关于虚拟类接口,它们提供可扩展的类接口和api调用接口供开发人员使用,例如消息处理模块(handler)、消息循环模块(looper)。但是由于虚拟类接口不提供任何关于时间或存储量的预测结果以及没有优先级支持,所以满足不了实时应用的要求。在运行实时应用程序时的问题是,这些机制中的消息传递所需的延迟是不可预测的;同时,期望的高优先级的线程可能会经常被其他线程阻塞从而不能实时的执行。

传统安卓系统的其不能应保证应用的实时性。系统的消息传递机制的行为具有严重的不可预测特性,无法提供可预测的执行时间保证;系统服务的设计不是面向实时系统的。



技术实现要素:

本发明的目的就在于为了解决上述问题而提供一种单任务实时消息传递操作系统,详见下文阐述。

为实现上述目的,本发明提供了以下技术方案:一种单任务实时消息传递操作系统,包括应用层、应用框架层、运行时系统以及系统内核,应用框架层包括消息处理模块、消息循环模块、定时器管理模块以及传感器管理模块,运行时系统包括运行时系统接口、虚拟机以及支撑库,消息处理模块和消息循环模块采用实时消息传递方法对消息进行传递;消息处理模块根据线程发出的每个消息所指定的优先级分配至相应的队列中,并负责收发队列中待处理的消息。

有益效果在于:

1、本发明重新设计消息处理模块、消息循环模块使得其支持实时应用需求,保证了高优先级的运行时间,内存空间可控;

2、本发明重新设计定时器管理模块和传感器管理模块系统服务的技术使得其支持实时应用需求,实现了基于优先级的传感器事件消息的高效传递;

3、本发明的两级红黑树保证高优先级线程的响应时间,优化了定时器请求所需的资源。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是现有技术的安卓系统组成框图;

图2是本发明的安卓系统组成框图;

图3是本发明的优先级的指定支持策略示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将对本发明的技术方案进行详细的描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所得到的所有其它实施方式,都属于本发明所保护的范围。

参见附图,一种单任务实时消息传递操作系统,包括应用层、应用框架层、运行时系统以及系统内核,应用框架层包括消息处理模块、消息循环模块、定时器管理模块以及传感器管理模块,运行时系统包括运行时系统接口、虚拟机以及支撑库,

消息处理模块和消息循环模块采用实时消息传递方法对消息进行传递;

定时器服务模块采用两级红黑树对定时器请求进行管理;

传感器管理模块使用polling线程对传感器数据进行处理。

进一步的说,消息处理模块根据线程发出的每个消息所指定的优先级分配至相应的队列中,并负责收发队列中待处理的消息;

其中,优先级的指定支持两种策略,分别为:

a.继承策略,优先级继承自发出消息的线程优先级,实时线程需要发送消息并且采用继承策略,则该消息就作为实时消息放入实时消息队列,而普通线程需要发送消息并且采用继承策略,则该消息作为普通消息放入普通消息队列;

b.继承+指派策略,优先级继承自发出消息的线程优先级并辅以线程主动调整,若一个实时线程需要发送消息并且采用继承+指派策略,则默认情况下该消息就作为实时消息放入实时消息队列,实时线程也可用操作系统提供的接口指定该消息指派为普通消息,并放入普通消息队列。

其中,消息处理模块和消息循环模块为实时应用的虚拟类接口,运行时系统运行时,应用框架层使用消息处理模块和消息循环模块控制每一个应用程序的执行;

其中,存放消息的消息队列为静态配置。

上述做法保证了低优先级线程发出的消息不会影响高优先级线程发出的消息的响应时间,队列都是静态配置的,所以内存空间可控。

进一步的说,定时器管理模块通过两级红黑树对定时器请求的管理过程具体为:

步骤1,应用程序调用定时器管理设置函数(alarmmanager.set())向运行时系统注册定时器(alarm)请求;

步骤2,定时器管理模块(alarmmanager)采用了两级红黑树对定时器请求进行管理;

其中,第一级红黑树的每个叶节点保存所有定时器请求的时间戳以及指向第二级红黑树的指针;第二级红黑树的叶节点保存的是同一时间戳下的所有定时器请求,并且按照请求发出者的优先级进行排序;

步骤3,当应用程序提出新的定时器请求时,定时器管理线程立刻被唤醒,并在两级红黑树中插入新的定时器服务节点;

步骤4,为该定时器请求设置一个专门的服务线程;

步骤5,调度该服务线程在定时器请求指定的时间返回定时器消息;

步骤6,定时器触发后,定时器管理模块就会发送消息给应用程序,进而触发应用程序的回调函数(broadcastreceiver.onreceive())实现业务逻辑。

两级红黑树保证低优先级的线程发出的定时器请求不会影响高优先级线程发出的定时器请求的响应时间,并且低优先级的定时器请求不会耗尽高优先级的定时器请求所需的资源。

进一步的说,传感器管理模块为每一类传感器都分配一个线程用来传感器数据的处理,线程的数据全部来自于更为底层的polling线程,polling线程直接从内核读取传感器原始数据并返回给上层线程做进一步处理。

其中,传感器数据的处理过程具体为:

步骤1,当优先级为p的应用程序注册成为某传感器事件的监听者,则传感器数据处理线程继承优先级p;

步骤2,当消息发送线程创建一个执行传感器事件监听者的回调函数的新线程时,也会给其赋予原应用程序的优先级p。

基于上述做法实现了基于优先级的传感器事件消息的高效传递。

进一步的说,运行时系统接口为fiji运行时系统接口,虚拟机为fiji虚拟机,支撑库包括实时bionic库。

fiji虚拟机是适用于硬实时环境的、可预测的java实时虚拟机。

bionic库是安卓(android)平台为c/c++开发者进行原生应用程序开发所提供的符合posix(可移植操作系统接口)标准的c库,bionic库支持pthreads和mutexes的实时扩展接口。

当dalvik虚拟机被替换为fiji虚拟机时,bionic就不能符合要求了,因为它不支持pthreads和mutexes的实时扩展,这是fiji的基本要求。本发明对bionic库进行了修改使其支持pthreads和mutexes的实时扩展接口。

进一步的说,系统内核为包括rt-linux、rtems在内的实时操作系统内核。

rt-linux是嵌入式硬实时操作系统,部分支持posix.1b标准,rt-linux通过对标准linux内核进行改造,对linux内核工作环境进行了一些改变,在linux内核和硬件中断的地方加上了rt-linux内核的控制,linux的控制信号都要先交给rt-linux内核进行处理,在rt-linux内核中实现了虚拟中断机制,linux本身不能屏蔽中断,发出的中断屏蔽信号和打开中断信号都修改成向rt-linux发送的信号,即将所有的中断分成linux中断和实时中断两类,如果rt-linux内核接收到的中断信号是普通linux中断,那就设置一个标志位;如果是实时中断,就继续向硬件发出中断,在rt-linux中执行sti将中断打开之后,那些设置了标志位表示的linux中断就继续执行。

因此,cli并不能禁止rt-linux内核的运行,却可以用来中断linux。linux不能中断自己,而rt-linux可以。安卓的非实时基础模块dalvik、linux等用实时模块fiji虚拟机、rt-linux等进行替代。dalvik虚拟机的垃圾收集模块可以随时可以中断任意用户线程,这就导致了程序行为的不可预测性。因此,采用了具有实时特征的fiji虚拟机替换了原有的dalvik虚拟机。同时,将非实时的linux内核替换为rt-linux内核,从而使得基础模块能够满足实时安卓系统的要求。

传统安卓系统采用的核心c库不是glibc而是其自定义的bionic支撑库,面向的是cpu性能和内存都极度受限的场景。但是当将dalvik虚拟机改为支持实时的fiji虚拟机时,bionic不支持fiji所依赖的pthreads以及互斥操作。因此对bionic进行修改使其能够兼容posix的必要的实时接口。

对bionic支撑库进行了实时扩展,使其能够支持实时内核和实时虚拟机。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

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