《电子科技大学,嵌入式嵌入式Linux操作系统的实时化研究.pdf》由会员分享,可在线阅读,更多相关《电子科技大学,嵌入式嵌入式Linux操作系统的实时化研究.pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第28卷 第3期 西 南 师 范 大 学 学 报(自然科学版)2003年6月Vol.2 8No.3Journal of Southwest China Normal University(Natural Science)Jun.2003文章编号:10005471(2003)03038605嵌入式Linux操作系统的实时化研究赵明富1,李太福1,吴 军2,罗渝微111 重庆工学院电子工程系 重庆400050;21 深圳美思达电子公司 广东 深圳518020摘要:Linux应用于嵌入式实时环境时存在关闭中断、分时调度和虚拟文件系统的时间不确定性等问题.使用虚拟机技术,增加一个仿真程序来替换Linu
2、x的底层中断程序.用一个小的实时内核与Linux内核共享控制处理器和中断模拟等技术以解决上述问题,并作了系统设计、编写了相应的程序.测试结果表明,所改进的操作系统是能够胜任实时任务的.关 键 词:嵌入式系统;实时系统;Linux中图分类号:TP316文献标识码:A随着嵌入式系统的迅速发展,给Linux操作系统提供了极其广阔的应用前景,但嵌入式系统中通常要处理来自串口等设备的大量信息,要求系统具有很高的实时性1.Linux的内核调度策略基本是仿照UNIX而来,将它应用于嵌入式实时环境有许多缺陷.特别是在运行内核线程时,Linux关闭中断,此外还存在分时调度、虚拟文件系统的时间不确定性,缺乏高精度
3、的计时器等.所以利用Linux作为底层操作系统,在其上进行实时化改造,建立一个具有实时应用能力的操作系统是现在日益流行的嵌入式操作系统的解决方案.图1Linux实时化方案结构图Fig.1Scheme of Improving Linux Real2Time Performance1Linux的实时化方案Linux实时化的详细结构如图1.增加一个仿真程序以替换Linux的底层中断程序,用一个小的实时内核与Linux内核共享控制处理器.这样,来自硬件的属于实时内核的中断将被直接处理,属于Linux内核的中断通过中断仿真程序处理.假如Linux内核中断请求没有被允许,中断模拟程序将在中断队列中标记这
4、次中断的发生,当Linux内核的中断请求被允许时,在中断队列中的中断将被执行.因此,实时内核的操作可以得到机器的立即相应,并且Linux内核不能延迟实时任务的执行.实时任务与运行在Linux内核中的进程之间的通讯通过FIFOs与共享内存的方式进行.使用实时内核中的调度器调度实时任务,调度器的算法和策略可以用户自己定义,于是系统就实现了RMS和EDF算法.这种方案保留了Linux操作系统所提供的丰富收稿日期:20020913作者简介:赵明富(1964-),男,重庆人,硕士,副教授,主要从事电子信息工程、智能仪器仪表、计算机应用技术领域的研究.1995-2004 Tsinghua Tongfang
5、 Optical Disc Co.,Ltd.All rights reserved.功能,而且通过改造,使其作为一个基本内核与实时内核共享控制CPU.这样,系统可以看作是具有双内核的操作系统,实时内核拥有更高优先级别的任务.换句话说,基本内核可以看作实时系统的空闲任务,只是在没有实时处理要求的时候运行.2 中断模拟要在标准Linux上增加硬实时功能,首先遇到的问题是Linux为达到同步使用关中断方式,混杂在一块的关和开中断操作(i486处理器的cli和sti机器指令)造成不确定的中断分派延迟.Linux内核是一整块大的内核,在提供系统服务的各个部分之间没有一个保护的分界线.要改写Linux内核
6、非常棘手.要限定关中断的时间非常困难,当更新版本发行时,也可能变得不正确.文献2在Linux内核与中断控制硬件之间增加一个模拟软件,但用于不同目的.在Linux源代码中所有的cli,sti,和iret(iret:中断返回指令)被替换为相应的宏:SCLI,SSTI和SIRET.所有的硬件中断指令都被中断模拟器捕捉.关中断发生时,重新设定模拟器的一个变量.只要中断发生,模拟器将检查这个变量.假如这个值已经设定(Linux中断是允许的),Linux的中断处理程序将立即调用.如果Linux中断是不允许的,中断处理程序将不会被调用,并将设定一个变量值,并且保存所有挂起的中断的信息.一旦Linux中断允许
7、处理时,所有挂起的中断将被处理.这种中断称之为软中断.由于Linux不能直接控制中断控制器,Linux的中断不会影响实时中断的处理.SCLI,SSTI和SIRET宏如程序1所示.该代码使用G NU汇编规范.SCLI宏简单重新设定变量值,保存Linux中断状态;SSTI宏设置正在被处理的中断的栈;SIRET宏模拟中断返回.SIRET宏的工作就像硬件iret指令所做的那样允许软中断.程序13 实时任务实时任务是一个用户定义的程序,在内核控制下,它按照特定的调度方式来执行.如果给每一个实时任务分配自己的地址空间以提供内存保护,那么任务间的切换将非常频繁,系统在上下文切换的开销很大,系统性能会降低.一
8、种提高性能的方法是使所有的实时任务运行在同一个地址空间,即使用内核地址空间,除去保护模783第3期 赵明富,等:嵌入式Linux操作系统的实时化研究 1995-2004 Tsinghua Tongfang Optical Disc Co.,Ltd.All rights reserved.式变换的系统开销.Linux的一个很有用的特性是:可装载内核模块,内核模块可以动态连接到内核地址空间,并链接为内核代码.每个模块定义了两个例程:initmodule()和cleanupmodule().initmodule()在模块装载到内核时调用,cleanupmodule()在删除模块时调用.它们提供了一个
9、在Linux中操作驱动程序和文件系统的简单方法.实时任务运行在内核地址空间还包含有通过名字引用函数和对象,这比描述符引用好.比如,实时任务表现为一个C的结构体,每个任务可以赋予一个C标识符,别的任务也可以通过这个标识符引用任务.动态链接执行过程中,模块装载解决了符号寻址问题,所以访问是非常高效的.所有任务在系统的地址空间,任务的切换也更简单.实时线程数据结构如程序2.程序2 一个实时程序使用一个或几个线程来执行,线程是轻量级进程,它们共享公共的地址空间,在实时化改造的Linux中,所有的线程共享Linux内核地址空间.4 实时调度实时调度器只要求所有实时任务满足时间要求.在实时化改造的Linu
10、x中,允许用户编写自己的调度器代码,把它变为一个可装载的内核模块,使其可以试验不同的调度策略和算法,以找到一个最适合自己应用的调度方式.我们开发的是基于优先级的占先式调度器.调度策略是给每个任务赋予一个唯一的优先级,假如有几个任务处于就绪状态,优先级最高的那个将运行,一旦一个优先级更高的任务就绪,就中断当前较低优先级任务的执行.该调度器直接支持周期任务,每个任务的周期和开始时间是可以给定的,一个中断驱动的(非周期的)任务通过定义中断处理程序,然后通过中断处理程序来唤醒相应的任务.按每个任务的周期和它们的终止时间,可以根据速率单调调度算法(rate monotonic scheduling al
11、gorithm,RMS)5决定每个任务的优先级,其中周期短的任务有较高的优先级.对于n有个任务的实时调度来说,满足下面公式的实时任务将能够成功的调度,每个任务都不会超过它们的最终期限(deadline):C1T1+C2T2+CnTnn(21/n-1)883西南师范大学学报(自然科学版)第28卷 1995-2004 Tsinghua Tongfang Optical Disc Co.,Ltd.All rights reserved.这里,Gi为任务i在每个周期的最长执行时间,Ti为任务i的周期.非周期任务将处理为周期任务,同样赋予一个优先级5.调度器把Linux当作一个有最低优先级的任务.Lin
12、ux只在没有实时任务运行时运行,为此,从Linux切换到实时任务时,软中断将被记录,而且禁止软中断;当切换回来时,软中断状态将恢复.5 计时精度精确的计时是调度器正确操作所必需的.调度器常要求在一个特定的时刻进行任务切换,计时的错误将导致背离计划的调度,引起任务释放抖动(task release jitter).造成时间精度低的一个原因是在操作系统中使用周期性的时钟中断,这要求系统设计者必须在时钟中断处理函数开销与计时精度之间做一个折中.在实时化改造的Linux中,通过使用一个可编程间隔定时器来中断CPU,以消除该折中.当让Intel 8354定时器芯片工作在interrupt2on2term
13、inal2count模式时,可使中断调度得到1微秒左右的精度.该方法的定时器精度高而系统开销小.6 进程间通信因Linux内核任何时候都可能被实时任务占先,Linux线程不能安全地被实时任务调用.因此,必须有一进程间通信(IPC)的机制.611FIFO设备该模式用FIFO管道在Linux进程或者Linux内核与实时进程间传递数据.FIFO管道在内核地址空间用一个整数来引用.FIFOs的数目在编译系统时给定,并可以重新编译系统,改变其大小.操作FIFOs的函数包括创建、删除、读FIFO和写FIFO.读写操作是原子操作,不能中断,这样可避免优先级倒置问题.在Linux进程中,把FIFOs当作普通的
14、字符设备,而不是一个系统调用,字符设备给用户一个与实时任务通信的全功能的应用程序接口(API),这个接口对Linux进程来说是标准的设备接口,包括:open,close,read和write.612 共享内存该方法在实时化改造后的Linux启动时,用一个mem参数指定内核可使用的内存大小,空出来的内存空间用于实时任务和Linux进程间通信的共享内存.在实时化改造后的Linux任务中,通过/dev/mem设备在这段内存中寻址,Linux进程也通过读取这段内存的数据获取实时任务的信息,这样就实现了实时任务和Linux进程间的通信.613mbuff驱动程序这是由T omasz Motylewski提
15、供的一个使用共享内存的驱动程序,它可实现核心内存空间和用户之间的共享.通过使用mbuff提供的mbuffalloc()的函数给申请的内存取一个名字,mbuff驱动程序使用一个链表,通过该名字来管理这些申请的内存.程序代码如下:第一次调用mbuffalloc时,给定一个名字,将分配一个给定大小的共享内存块.该内存块的引用数设为1.调用成功返回新内存块指针,失败时返回NULL.如果给定的名字已经存在,将返回存在的内存块的指针,以操作这块共享内存块,该内存块的引用数将加1.7Linux实时化系统性能测试对实时化的Linux的中断延迟进行了测试.测试的机器为Celeron 412MHz,196MB内存
16、,测试的结果见表1.983第3期 赵明富,等:嵌入式Linux操作系统的实时化研究 1995-2004 Tsinghua Tongfang Optical Disc Co.,Ltd.All rights reserved.表1 实时中断延迟时间Table 1Delay Time of Real2Time Interrupt单位:s负 载 类 型平 均 值最 小 值最 大 值无负载(所有进程已经杀死)2136211015150硬盘循环拷贝(一个硬盘循环拷贝shell脚本)3120211019140计算负载(一个循环执行浮点运算的C程序)2156212014150 从测试结果看,实时化改造的Lin
17、ux中断响应时间明显小于标准Linux的中断响应时间.在磁盘拷贝负载下最大延迟为19140s,在这种负载情况下,标准Linux的延迟达到了500s6.为计算调度精度,试验中运行了一个周期实时任务.在每个周期任务唤醒时,记录并比较它的时间,其最大时间值在10s左右.从试验结果可以看出,实时化改造后的Linux完全可以胜任实时运算操作系统.参考文献:1陈闳中.Linux在嵌入式操作系统中的应用J.同济大学学报,2001,29(5):5.2Lyckama H,Bayer L.UNIX time2sharing system:The MERT Operating System J.Bell Syste
18、m Technical Journal,1978,57(6):2049-2086.3Daniel P.Bovet,Marco Cesati.深入理解Linux内核M.北京:中国电力出版社,2001.4Dhamdhere D M.Systems Programming and Operating SystemsM.北京:电子工业出版社,2001.5William Stallings.Operating Systems Internals and Design Principles M.北京:电子工业出版社,2001.6 杨立峰.Linux嵌入式实时操作系统开发与应用D.重庆:重庆工学院,2002
19、.Study on Improving Real Time Performance of Linux Embedded SystemZHAO Ming2fu1,LI Tai2fu1,WUJun2,LUO Yu2wei111Dept.of Electronic Engineering,Chongqing Institute of Technology,Chongqing400050,China;21Shenzhen MEISIDA Electronic Co.,Shenzhen Guangdong518020,ChinaAbstract:With the development of embed
20、ded system,Linux operation system shows its excellent application prospect.However,for embedded application system,Linux has some disadvantages such as close interrupt,time2division sched2uler and time uncertainty in virtual file system and so on.Virtual computer technology is applied,i.e.add a simu
21、lationprogram to replace bottom interrupt program in Linux,use a smaller real2time kernel and Linux kernel to share controlprocessor together,and adopt interrupt simulating technology etc.On the basis,we implement system design,and writecorresponding program.Measurement result shows that improved real2time Linux can meet demand of real2time task oper2ation system.Key words:embedded system;real time system;Linux责任编辑 覃吉康 093西南师范大学学报(自然科学版)第28卷 1995-2004 Tsinghua Tongfang Optical Disc Co.,Ltd.All rights reserved.