




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于Linux的实时操作系统的分析与研究摘要:本文讨论了实时操作系统的现状及标准Linux作为实时应用的一些不足,并从实现机制上分析了造成这些不足的原因.在此基础上,深入分析了现有的实时Linux操作系统的特性和设计实现原理,并对进一步的工作提出了展望.关键词:实时操作系统丄inux;任务调度;中断模拟;时间精度;进程通信1、引言随着基于Intel微处理器芯片的兼容PC机性价比的不断提高,在实时应用领域,兼容PC机及基于兼容PC机的工控机(如PC104)得到了越来越广泛的应用.而实时系统的应用需求也发生了很大变化,现代的实时应用往往要求大容量的数据处理能力,复杂的图形用户接口、网络支持等.这就
2、对实时操作系统提出了更高的要求现在流行的实时操作系统(RTOS)可分为两类:第一类以现有的操作系统为基础,扩充了实时特性基于DOS的有Ctask,pdos等,由于DOS的单任务和不可重入特性,这些系统只能满足简单的实时应用.基于UNIX有DigitalUNIX等,通过下文中对标准Linux的分析(同样适用于UNIX系统)可以看出,由于类UNIX分时操作系统的设计目标是取得最优的平均性能(averageperformance),因此这些系统只能适应有限的实时需求.第二类是专用的实时操作系统,如VxWorks等,可满足广泛的实时系统的需求.但存在价格昂贵,应用开发环境缺乏等缺点.Linux操作系统
3、是基于PC机的免费的类UNIX开放式操作系统,并采用了源代码开放的发布策略.由于全世界各地的Linux用户和开发者的不断努力,Linux已成长为高稳定性的,性能优异的操作系统,基于Linux开发一个开放的、标准的、高效廉价的实时操作系统是完全可行的.本文首先分析了标准Linux作为实时操作系统所面临的问题,然后深入剖析了现有的实时Linux系统的特性和实现机理,最后对以后的工作提出了展望.2、标准Linux作为实时应用所存在的问题实时系统的特性主要有三点:高可靠性、及时性和时限的保证性(deadlineguarantee).时限的保证性要求实时系统对外部事件的响应时间或实时任务的运行周期满足时
4、限要求.如任务必须在时限内完成,否则会产生不可预料的后果,这种实时系统称为硬实时系统(hardreal-timesystem).若偶尔超过时限不会对实时应用造成损害,则称为软实时系统(softreal-timesystem),如视频会议系统,偶尔的图象帧损失是可以接受的.与时限的保证性直接相关的是系统的最坏情况参数,同UNIX样,Linux操作系统的设计目标是取得最优平均性能,因此有很多方面无法满足实时系统的要求.进程调度问题Linux的核心是不可抢先的,采用基于固定时间片的可变优先级调度,当一个低优先级的进程由于调用系统API而进入核心状态后,除非当前进程需要等待资源释放而挂起,否则后来的高
5、优先级的进程只能等待当前进程完成系统调用,而系统调用的完成时间有很大的不可预测性,这对一些要求高优先级进程立即抢占CPU的实时应用是不能满足要求的.进程同步与互斥问题Linux采用了信号灯的方法来保证进程的互斥与同步,由于频繁的信号加锁及解锁操作会影响系统的整体性能,因此Linux采用了粗粒度的策略,信号的加锁及解锁会有较长间隔.因此系统的最坏情况下的性能较差,往往无法满足许多硬实时应用的要求.内存上锁问题Linux采用了虚拟内存管理技术,进程运行所需的内存常常会被换入换出磁盘,会非常耗时.实时应用有时需要把关键进程锁在内存中,不被换出,而标准的Linux无法满足这种要求.时间精度及定时器问题
6、操作系统必须对时间精度和时钟中断处理的时间开销进行折衷考虑.时间精度越高,意味着时钟中断越频繁,而花在中断处理上的时间越多.Linux通过对硬件时钟的编程产生周期为100Hz的时钟中断,因此任务调度的时间精度最高能达到10ms,这无法满足一些对时间精度要求苛刻的实时应用.关中断问题在系统调用中,为了保护临界区资源,Linux会长时间关掉中断,这样会加大中断延迟时间,阻塞高优先级的中断立即被处理.在实时应用中,这是一个十分严重的问题针对以上存在的问题,Linux开发者遵循POSIX.1b标准对Linux进行了实时扩充,已实现的特性有可控制的调度算法,内存上锁,实时信号机制等,但由于Linux的非
7、抢先内核,这些实时扩充只能保证完成某些软实时应用.3、RTLinux基本思想RTLinux是由新墨西哥理工学院开发的基于标准Linux的具有硬实时特性的实时操作系统.截至目前为止,RTLinux已成功的应用于从航天飞机的空间数据采集,科学仪器测控到电影特技图像处理等广泛的实时环境下.RTLinux开发者并没有针对实时操作系统的特性重写Linux的内核,这样做工作量会非常大,而且要保证兼容性也非常困难.为此,RTLinux提供了一个精巧的可抢先的实时内核,并把标准的Linux核心作为实时核心的一个进程同用户的实时进程一起调度,而标准Linux核心的优先级最低,可以被实时进程抢断.正常的Linux
8、进程仍可以在Linux核心上运行,而系统的实时特性由实时内核保证.这样做的好处是对Linux的改动量最小,充分利用了Linux下现有的丰富的软件资源.用户可以根据具体的实时应用编写实时任务,实时任务和标准的Linux进程之间通过系统提供的实时先入先出队列(RT-FI-FO)进行通信.系统的结构图如图4所示:图1RTLinux系统结构图4、RTLinux设计及实现原理4.1中断模拟为了解决Linux长时间关中断的问题,RTLinux在硬件中断控制器和Linux核心之间用一层软中断模拟器进行隔离,Linux核心代码中的中断处理指令有关中断cli、开中断sti,和中断返回iret,被分别替换为汇编宏
9、代码S_CLI,S_STI,S_IRET.S_CLI,S_STI及S_IRET的代码如下:(用Linux下的GNU汇编器实现)S_CLI:movl0,SFIFS_STI:stipushflpushlKERNEL_CSpushl1fS_IRETS_IRET:push%dspushl%eaxpushl%edxmovlKERNEL_DS,%edxmov%dx,%dsclimovlSFREQ,%edxandlSFMASK,%edxbsfl%edx,%eaxjz1fS_CLIstijmpSFIDT(,%eax,4)1:movl1,SFIFpopl%edxpopl%eaxpop%dsiret所有的硬件中断
10、都被中断模拟器接收,当关中断时,模拟器只是清一软标志SFIF.当中断发生时,模拟器检查此标志,如已被设置则调用相应的中断处理函数.否则,置位一标识位.S_STI首先开中断,然后设置堆栈,模拟了中断处理过程,最后调用软中断返回S_IRET在S_IRET中首先初始化中断寄存器,使之指向核心,以访问全局变量.然后用位与的方法检查是否有中断等待处理,如有则跳转到相应的中断处理函数去执行,在中断处理函数的结尾处的S_IRET会跳到下一等待中断的处理函数,直到所有的等待中断被处理完.若没有中断等待处理,则设软中断标识SFIF,并用iret返回用RTLinux提供的APIrequest_RTirq()和fr
11、ee_RTirq()为指定的irq安装/卸载实时中断处理函数,当实时中断发生时,不论软中断标识为何值,中断处理函数被立即调用,因此可以保证实时中断不被阻塞并有最小的中断延迟时间.4.2实时任务的实现用户可以创建自己的实时任务并被实时核心所调度,在RTLinux的最初实现中,利用Intel80X86处理器的分页存储机制,每个实时任务运行在独立的用户地址空间,这样有利于存储保护,每次上下文切换(contextswitch)时,更新页目录寄存器.由于486CPU采用虚拟缓冲技术,每次页目录寄存器更新都会使页表查找缓冲(TLB)无效,频繁的实时任务切换会严重影响系统性能另外,每当进入系统调用时,由用户
12、态进入核心态运行,存储保护级别的切换也是较大的系统开销.为了改善性能,在RTLinux的当前版本中实时任务以线程形式实现,运行在单一的核心地址空间,减小了上下文切换开销,并避免了存储保护级别的切换.实时任务的定义如下:structrtl_thread_structint*stack;/*线程堆栈指针*/intuses_fp;/*浮点支持标志*/enumrtl_task_statesstate;/*任务状态标志,共有ready、delayed、dormant、sus-pended、active、zombie六种*/int*stack_bottom;/*线程栈底指针*/structrtl_sche
13、d_paramsched_param;/*调度参数,目前支持的只有实时任务的优先级*/structrtl_thread_struct*next;/*实时任务队列指针*/RTL_FPU_CONTEXTfpu_regs;/*上下文切换时需保存的浮点寄存器*/intcpu;/*对称多处理(SMP)结构的CPU标志*/structitimerspecspec;/*实时任务的定时器*/void*retval;/*线程返回值*/intpending_signals;/*实时任务的信号变量,每一位代表一预定义信号,可实现任务的唤醒和停止等*/structtq_structfree_task;/*空闲任务队列
14、*/void*user;/*实时任务通信所用的变量*/intpad;Linux为了方便用户编写核心代码而提供了一种可装载核心模块机制,可装载核心模块可以动态加载到核心地址空间并与核心代码相链接,每个模块定义了两个函数:init_module()和cleanup_module().当模块加载到核心时,初始化函数init_module()被自动调用,当卸载模块时cleanup_module()被调用.RTLinux用可装载核心模块来实现实时任务的动态创建和卸载.实时任务的上下文切换包括整数寄存器压栈和改变栈寄存器值,与CPU的硬上下文切换相比大大节省了开销.4.3任务调度的实现实时调度器的主要任务
15、是保证每个实时任务的时限要求,大多数实时系统的调度器非常复杂,可扩展性差,用户只能通过有限的参数对调度特性进行控制.RTLinux的调度器用可装载核心模块实现,用户可以根据需要重写调度算法.RTLinux标准的调度器采用固定优先级的可抢先调度,每个实时任务有一固定优先级,每次时钟中断时,调度器选取就绪队列中的最高优先级的任务投入运行.如已就绪任务的优先级比当前任务的优先级高,则当前任务被抢断.实时任务投入运行时,用户可指定一运行周期,实时任务每隔此周期时间被调度一次,此周期也被称为任务的时限(deadline).RTLinux中使用单一比率调度算法(ratemono-tonicscheduli
16、ngalgorithm)来判断任务集的可调度性.在单一比率调度算法中,时限越小的任务优先级越高,N个独立任务如满足以下条件,每个任务的时限将得到保证:C1/T1+C2/T2+Cn/Tn=n(21/n-1)(Ci是任务i的最坏情况下的执行时间,Ti是任务i的执行周期)当有新的任务投入运行时,RTLinux根据上面公式对新的实时任务集进行可调度性分析,称为接收控制(admissioncontrol),若新的任务集可以满足上面公式,新的任务被加入到当前任务集中进行调度.标准Linux可看作是RTLinux中的最低优先级的实时任务,从Linux切换到实时任务时,软中断状态被保存,并禁止软中断.当切换回
17、来时,软中断被恢复.在RTLinux下实现的其他调度算法还有最早时限优先算法(EarliestDeadlineFirst),任务没有静态优先级,具有最早时限的任务被最先执行.4.4实时时间精度的实现时间的精度对实时调度的准确性有很大影响,时间偏差常常引起任务释放抖动(taskreleasejitter),在大多数情况下,会对实时任务的运行产生影响.在普通操作系统的实现中,一般采用周期调度,设计者必须对时钟中断的频率和时钟中断的开销做综合考虑,为了取得系统整体的最优平均性能,调度时钟频率一般较低,这就导致了较低的时间精度.在标准Linux实现中,硬件定时器的周期被编程为100Hz,因此任务调度的
18、最小周期为10ms.在RTLinux中,调度器采用了一次性定时器(one-shottimer),每次时钟中断时根据当前的系统时间和每个实时任务的运行周期决定下次时钟中断的间隔,这种策略对运行周期有公约数的一组实时任务具有较高效率,否则每次时钟中断时需对定时器的周期重新编程.举例来说,如有两个任务的运行周期为391和1024时间单位,在一次性的模式下,定时器首先被编程为每391单位中断一次,第一次中断发生时,调度器会把定时器中断间隔重设为633(1024减去391)时间单位.因此采用一次性定时器可以达到很高的时间精度(实时任务的最小运行周期可以达到35us).但在低档的PC微机(如486)上,对
19、硬件时钟芯片Intel8354编程的系统开销较大,在Pentium以上微机中,除了Intel8354时钟芯片,CPU中还带有片内时钟,编程速度快.4.5进程通信机制由于Linux进程可被实时任务抢断,因此实时任务中不能调用普通的系统调用,为了在实时任务和普通进程间通信RTLinux提供了实时的先入先出队列(RT-fifo)机制,RT-fifo在核心地址空间分配数据缓冲.RT-fifo的数据结构定义如下:structrt_fifo_structintopen;/*实时任务在核心地址空间打开标志*/intuser_open;/*普通Linux进程打开标志*/intsleeps;/*RT-fifo休
20、眠标志,如果缓冲已满时再有写请求或缓冲空时再有读请求,RT-fifo进入休眠*/char*base;/*RT-fifo数据缓冲的基指针*/intbufsize;/*RT-fifo数据缓冲容量*/intstart;/*RT-fifo数据缓冲的当前位置*/intlen;/*RT-fifo数据缓冲中的数据长度*/int(*user_handler)(unsignedintfifo);/*RT-fifo的处理函数指针*/structwait_queue*wait;/*因读写RT-fifo而阻塞的任务队列指针*/structtq_stuctwake_up_task;/*唤醒任务队列*/RT-fifo的接口包括创建、释放、读和写,读和写是原子操作,不会被阻塞,这样会防止优先级倒置问题(priorityinver-sionproblem).用户还可创建RT-fifo处理函数当RT-fifo中数据可用时系统自动调用处理函数.在普通Linux进程看来,RT-fifo是字符设备,并可用标准的系统调用来进行操作.在实时任务之间可采用修改过的类似UNIXSysemVIPC机制,包括先入先出队列,消息队列.5、RTLinux的应用程序结构应用开发人员应首先分析系统的具体应用环境,把应用程序分成实时和普通两部分,实时部分应设计的尽量简单,只完成实时任务,如
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学生课件模板网站
- 售票值班员技能测试题库及答案
- 建筑信息模型技术员(机电工程)上岗证考试题库及答案
- 装配式混凝土结构建筑施工公司招聘笔试题库及答案
- 散料卸车机司机技能测试题库及答案
- 轨道交通信号工应急处置分析及对策
- 电机(汽机)装配工职业技能模拟试卷含答案
- 特种冲压工职业技能鉴定经典试题含答案
- 家畜饲养人员职业技能鉴定经典试题含答案
- 液电气压部件装配调试工安全技术操作规程
- 小学生卫生健康知识讲座
- 2025年艾滋病梅毒和乙肝母婴传播培训考试题(含答案)
- 自尊主题班会课件
- 基金公司印章管理办法
- 高磷酸盐血症护理课件
- 海洋经济政策效果评估
- 工厂安全生产吹哨人制度模板
- 煤矿井下工程预算课件
- 徳龙全自动咖啡机ECAM 22.110.SB 中文使用说明书
- 中耳炎疾病的护理
- 2025年全国工会系统经审业务技能大赛知识总题库(1800题)-中部分
评论
0/150
提交评论