uClinux操作系统的实时化分析与研究
4.2定时器的移植
如前面分析,对于一个实时操作系统,必须有精确的计时。在i386体系结构中,有时间标签计数器TSC(Time Stamp Count),在S3C4510B处理器上没有这个寄存器,可以采用计时器2(Timer1)来模拟TSC的功能。每来一个时钟脉冲,Timer1的 TCNT1寄存器减1,减到零后产生时钟中断,再从TDATA1中读TCNT1的值,往复运行。具体的做法是使用一个内核的全局变量,每次时钟中断来以后,在Timer1的寄存器中读出值,计算其增量,为了使系统更精确,必须将Timer1中断设置为最高优先级,这样就可以模拟64位的TSC寄存器,从而得到当前的准确计时。
编写应用程序时,将实时系统的应用程序分为实时任务和非实时任务。实时任务是实时模块,作为µClinux核心可加载模块运行在核心态。它的设计应尽可能简单,仅包含那些有强实时要求的处理模块,如实时数据采集、外部设备控制等。非实时任务是普通的µClinux进程,在用户态执行,完成大部分的数据处理、图形显示和通讯等任务。所有的实时任务均按照对实时性要求的高低来进行优先级排队,系统根据优先级的高低来顺序启动各个实时任务。而位于用户态的界面,当作一个背景程序来执行。核心态的任务优先级总是高于用户态的界面任务,且不能被其抢占。实时任务和非实时任务之间可通过FIFO队列和共享内存等方法通信。基于RTAI的µClinux应用程序结构图如图2所示。
实时系统的启动和结束可以用一个Shell程序来执行,它的功能是实现各任务模块的加载和卸载,以及用户界面的运行。Shell程序是介于使用者和操作系统的内核程序间的一个界面,使用户更为方便的使用操作系统。由于各个模块之间具有相互依赖性,所以在加载和卸载各个模块时按照一定的顺序。首先要将RTAI提供的实时模块加载,包括rtai、rtai_sched、rtai_fifos和rtai_shm等模块;然后装入系统的各个实时模块。卸载模块的时候按照相反的顺序依次卸载。实时系统的程序流程图如图3所示。
6.结束语
作者已将改造后的µClinux系统应用在了江苏省普通高校自然科学研究计划资助项目“机房环境设备安全监控软件平台的研制”等项目中,均取得了良好的效果,解决了µClinux在实时性方面的缺陷,满足了设计要求。
本文作者创新点是:实现了RTAI在µClinux上的移植,形成了RTAI和µClinux相结合的双内核嵌入式系统运行方案,既满足了嵌入式应用的需求,又保证了系统的硬实时性。
参考文献
[1]李俊平,梅洪,单家元.基于Linux的实时平台的研究[J].微计算机信息,2005,21(7):21-23.
[2]林浒,蔡光起等.实时化的Linux系统及其实时性能的研究[J].小型微型计算机系统,2004,25(8):1454-1457.
[3] WANG Y C, LIN K J. Implementing a general real-time frame-work in the RED-Linux real-time kernel [C]. IEEE Real-timeSystem Symposium, 1999.
[4] Raj Rajkumar, Kanaka Juvva, Anastasio Molano, et al. Resource kernel: A resource-centric approach to real-time and multimedia systems[C]. Proceedings of the SPIE/ACM Conference on Mul-timedia Computing and Networking, 1998.
[5]马学文,朱名日等.uClinux操作系统实时性能的研究与实现[J].计算机工程与科学,2005,27(3):103-104.
[6]RTAI主页[EB/OL].htp://www.rtai.org/.
评论