资料介绍
嵌入式系统是在有限的空间和有限的资源中运行,高效地实现某种特定功能或功能集合的装置。
它的开发通常受到很多客观条件的限制,诸如较弱的CPU处理能力、较小的内存空间、较少的可供选择的外设、有限的电源供应等。每个嵌入式系统的开发无不是精打细算,以求用有限的资源发挥最大的功效。在各种嵌入式系统上运行的操作系统中,嵌入式Linux以其免费、高可靠性、广泛的硬件支持以及开放源码等众多特性正在获得越来越多的关注。其源码开放特性使得开发者可以针对特定的嵌入式系统对Linux内核进行修改,以满足开发要求,达到系统最优化的目的。嵌入式Linux应用中的一大问题是Linux的实时性问题。实时系统必须在限定时间内对外部事件作出正确响应,重点放在对满足突发性、暂时性的处理需求上。而Linux作为传统的分时操作系统,关注更多的是系统的整体数据吞吐量。如何提高Linux的实时性能是摆在广大嵌入式系统级开发人员面前的挑战。
1 相关研究
目前市面上有各种Linux发行版,但严格来说,Linux指的是Linus Torvalds维护的(及通过主要和镜像网站发布的)内核。建立嵌入式系统不需要特别的内核,一个嵌入式Linux系统只是代表一个基于Linux内核的嵌入式系统,本文后面提及的Linux均指Linux内核。目前已有很多改善Linux实时性能的工作在进行中。最新的2.6版Linux已经实现了可抢占式的内核任务调度,但是不确定的中断延时问题没有得到解决。即2.6版的Linux高优先级内核空间进程虽然能像在用户空间里那样抢占低优先级进程的系统资源,但是从中断发出开始到中断服务程序的第1条指令开始执行的时间是不确定的。
除了Linux开发者的改进工作之外,还有一些组织、公司为提高Linux的实时性做了大量工作。其中有代表性的是Fsm Labs公司的RT-Linux、Monta Vista公司的MontaVista Linux、由Paolo Mantegazza等人维护的RTAI(Realtime Application InteRFace)项目。这些项目采用的方法可归纳为两类:
(1)直接修改Linux内核。MontaVista Linux采用的就是这种方法。它将Linux修改成称为Relatively Fully Preemptable Kernel的可抢占式内核,并使现了实时调度机制和算法,增加了一个细粒度定时器,这样就将Linux修改成为一个软实时内核。
(2)“双内核”方式。RTAI项目和RT-Linux采用了这种方法。这种方法将传统Linux“架空”,作为新增加的小型实时内核的一个优先级最低的任务执行,而实时任务则作为优先级最高的任务。即在实时任务存在的情况下运行实施任务,否则才运行Linux本身的任务。
MontaVista和RT-Linux的局限性在于它是一个商用软件,不遵循GNU 的源代码开放原则。若要在系统中使用这种Linux,则需要支付一笔颇为可观的授权费用,这就违背了使用Linux的初衷—— 开源、免费,能够发展自己的知识产权。
RTAI为了实时性能舍弃了Linux固有的很多优点:对大量硬件的广泛支持,优秀的稳定性、可靠性。开发者一方面要针对RTAI自定义的一个硬件抽象层RTHAL(Real Time Hardware Abstraction Layer)重新编写驱动程序,而且庞大的Linux开发社区的成果也无法方便地应用到实时核心中。
2 影响Linux实时性的因素
2.1 任务切换及其延时
任务切换延时是Linux从一个进程切换到另一个进程所需的时间,即高优先级进程从发出CPU 资源申请到进程的第1条指令开始执行的间隔。在实时系统中,任务切换延时必须越短越好。如之前所提到的,Linux 2.6.X已经实现了可抢占式内核,高优先级内核空间进程可以像在用户空间中那样让CPU在任何时候停止低优先级进程转而执行自己。但是有2种例外情况:
(1)进程在临界区(Critical Section)中执行的时候不能被其他进程抢占;
(2)中断服务程序(Interrupt Service Routine)不能被其他进程抢占。
2.2 基于优先级的调度算法
在Linux 2.6中,采用了O(1)调度算法。它是一个基于优先级的抢先式调度器,为每一个进程分配一个唯一的优先级,调度器保证在所有等待运行的任务中,首先被执行的总是高优先级的任务,为此高优先级的任务能够抢占低优先级的任务。
这个调度器开销恒定,与当前系统开销无关,能够改善系统实时性能。但是调度系统没有提供除CPU以外的其他资源剥夺运行,实时性能没有得到根本改观。如果两个任务需要使用同一个资源(如高速缓存),高优先级的任务已准备就绪,而此刻低优先级的任务正在用这个资源,高优先级的任务就必须等待,直到低优先级任务结束释放了该资源后才能被执行,这被称为优先级倒置。
2.3 中断延时、中断服务程序
中断延时指的是从外设发出中断信号开始到ISR的第1条指令开始执行的时间间隔。由外部中断引起的实时任务需求是实时系统处理量的主要组成部分,足够快地中断响应和迅速地中断服务程序处理是衡量实时系统的重要性能指标。不同的ISR执行时间是不一样的,即使是相同的ISR也可能因为有多个出口而有不同的执行时间。而ISR执行时外部中断是被禁用的,造成这样一种情况,即使Linux的中断延时非常小,如果在一个ISR执行时某个外设也产生了一个中断信号,因为正在执行的ISR运行时间的不确定性和不可抢占性,也会产生Linux的中断延时的不可预测性。
3 系统实时性能的提高
3.1 任务切换机倒的建立
在2.1节中提到进程在临界区中执行的时候不能被抢占的问题,为了不影响系统稳定性、减少调试和测试的时间,我们不打算对此进行修改,而引入一个机制保证实时任务能够得到优先执行。即在实时系统中,只有当进程的临界区能在下一个实时任务开始之前结束才被允许进入。
如何判断下一个实时任务中断信号的产生时间,一般来说中断信号是为了那些开始时间不可预测的任务而设定的,它的产生是完全随机的。为了使中断信号的时间能够被预测,将中断信号的产生与时钟中断挂钩:中断信号只能与时钟中断同时产生。时钟中断由系统计时硬件以周期性间隔产生。这个间隔由内核根据Hz值设定。Hz是一个与体系结构有关的常数,在文件中定义。当前的Linux为大多数平台定义的Hz值是100,亦即时钟中断周期是10ms。显然这是达不到实时系统定时精度要求的。提高Hz值能够带来系统性能提升,但却是以增加系统开销为代价。这就必须仔细权衡实时性要求和系统开销的平衡。一种方法是通过大量的测试确定的实时任务中断请求发生的时间间隔和进程在临界区中的执行时间,取一个稍大于大多数实时任务中断间隔和临界区执行时间的数值。
它的开发通常受到很多客观条件的限制,诸如较弱的CPU处理能力、较小的内存空间、较少的可供选择的外设、有限的电源供应等。每个嵌入式系统的开发无不是精打细算,以求用有限的资源发挥最大的功效。在各种嵌入式系统上运行的操作系统中,嵌入式Linux以其免费、高可靠性、广泛的硬件支持以及开放源码等众多特性正在获得越来越多的关注。其源码开放特性使得开发者可以针对特定的嵌入式系统对Linux内核进行修改,以满足开发要求,达到系统最优化的目的。嵌入式Linux应用中的一大问题是Linux的实时性问题。实时系统必须在限定时间内对外部事件作出正确响应,重点放在对满足突发性、暂时性的处理需求上。而Linux作为传统的分时操作系统,关注更多的是系统的整体数据吞吐量。如何提高Linux的实时性能是摆在广大嵌入式系统级开发人员面前的挑战。
1 相关研究
目前市面上有各种Linux发行版,但严格来说,Linux指的是Linus Torvalds维护的(及通过主要和镜像网站发布的)内核。建立嵌入式系统不需要特别的内核,一个嵌入式Linux系统只是代表一个基于Linux内核的嵌入式系统,本文后面提及的Linux均指Linux内核。目前已有很多改善Linux实时性能的工作在进行中。最新的2.6版Linux已经实现了可抢占式的内核任务调度,但是不确定的中断延时问题没有得到解决。即2.6版的Linux高优先级内核空间进程虽然能像在用户空间里那样抢占低优先级进程的系统资源,但是从中断发出开始到中断服务程序的第1条指令开始执行的时间是不确定的。
除了Linux开发者的改进工作之外,还有一些组织、公司为提高Linux的实时性做了大量工作。其中有代表性的是Fsm Labs公司的RT-Linux、Monta Vista公司的MontaVista Linux、由Paolo Mantegazza等人维护的RTAI(Realtime Application InteRFace)项目。这些项目采用的方法可归纳为两类:
(1)直接修改Linux内核。MontaVista Linux采用的就是这种方法。它将Linux修改成称为Relatively Fully Preemptable Kernel的可抢占式内核,并使现了实时调度机制和算法,增加了一个细粒度定时器,这样就将Linux修改成为一个软实时内核。
(2)“双内核”方式。RTAI项目和RT-Linux采用了这种方法。这种方法将传统Linux“架空”,作为新增加的小型实时内核的一个优先级最低的任务执行,而实时任务则作为优先级最高的任务。即在实时任务存在的情况下运行实施任务,否则才运行Linux本身的任务。
MontaVista和RT-Linux的局限性在于它是一个商用软件,不遵循GNU 的源代码开放原则。若要在系统中使用这种Linux,则需要支付一笔颇为可观的授权费用,这就违背了使用Linux的初衷—— 开源、免费,能够发展自己的知识产权。
RTAI为了实时性能舍弃了Linux固有的很多优点:对大量硬件的广泛支持,优秀的稳定性、可靠性。开发者一方面要针对RTAI自定义的一个硬件抽象层RTHAL(Real Time Hardware Abstraction Layer)重新编写驱动程序,而且庞大的Linux开发社区的成果也无法方便地应用到实时核心中。
2 影响Linux实时性的因素
2.1 任务切换及其延时
任务切换延时是Linux从一个进程切换到另一个进程所需的时间,即高优先级进程从发出CPU 资源申请到进程的第1条指令开始执行的间隔。在实时系统中,任务切换延时必须越短越好。如之前所提到的,Linux 2.6.X已经实现了可抢占式内核,高优先级内核空间进程可以像在用户空间中那样让CPU在任何时候停止低优先级进程转而执行自己。但是有2种例外情况:
(1)进程在临界区(Critical Section)中执行的时候不能被其他进程抢占;
(2)中断服务程序(Interrupt Service Routine)不能被其他进程抢占。
2.2 基于优先级的调度算法
在Linux 2.6中,采用了O(1)调度算法。它是一个基于优先级的抢先式调度器,为每一个进程分配一个唯一的优先级,调度器保证在所有等待运行的任务中,首先被执行的总是高优先级的任务,为此高优先级的任务能够抢占低优先级的任务。
这个调度器开销恒定,与当前系统开销无关,能够改善系统实时性能。但是调度系统没有提供除CPU以外的其他资源剥夺运行,实时性能没有得到根本改观。如果两个任务需要使用同一个资源(如高速缓存),高优先级的任务已准备就绪,而此刻低优先级的任务正在用这个资源,高优先级的任务就必须等待,直到低优先级任务结束释放了该资源后才能被执行,这被称为优先级倒置。
2.3 中断延时、中断服务程序
中断延时指的是从外设发出中断信号开始到ISR的第1条指令开始执行的时间间隔。由外部中断引起的实时任务需求是实时系统处理量的主要组成部分,足够快地中断响应和迅速地中断服务程序处理是衡量实时系统的重要性能指标。不同的ISR执行时间是不一样的,即使是相同的ISR也可能因为有多个出口而有不同的执行时间。而ISR执行时外部中断是被禁用的,造成这样一种情况,即使Linux的中断延时非常小,如果在一个ISR执行时某个外设也产生了一个中断信号,因为正在执行的ISR运行时间的不确定性和不可抢占性,也会产生Linux的中断延时的不可预测性。
3 系统实时性能的提高
3.1 任务切换机倒的建立
在2.1节中提到进程在临界区中执行的时候不能被抢占的问题,为了不影响系统稳定性、减少调试和测试的时间,我们不打算对此进行修改,而引入一个机制保证实时任务能够得到优先执行。即在实时系统中,只有当进程的临界区能在下一个实时任务开始之前结束才被允许进入。
如何判断下一个实时任务中断信号的产生时间,一般来说中断信号是为了那些开始时间不可预测的任务而设定的,它的产生是完全随机的。为了使中断信号的时间能够被预测,将中断信号的产生与时钟中断挂钩:中断信号只能与时钟中断同时产生。时钟中断由系统计时硬件以周期性间隔产生。这个间隔由内核根据Hz值设定。Hz是一个与体系结构有关的常数,在文件中定义。当前的Linux为大多数平台定义的Hz值是100,亦即时钟中断周期是10ms。显然这是达不到实时系统定时精度要求的。提高Hz值能够带来系统性能提升,但却是以增加系统开销为代价。这就必须仔细权衡实时性要求和系统开销的平衡。一种方法是通过大量的测试确定的实时任务中断请求发生的时间间隔和进程在临界区中的执行时间,取一个稍大于大多数实时任务中断间隔和临界区执行时间的数值。
下载该资料的人也在下载
下载该资料的人还在阅读
更多 >
- 嵌入式Linux路线
- 【嵌入式Linux(基础篇)】从标准Linux到嵌入式Linux + 嵌入式Linux知识架构
- 嵌入式linux实时性研究,嵌入式Linux内核实时性研究及应用
- 嵌入式Linux的浅淡
- 嵌入式Linux实时性能优化
- 嵌入式linux+io+优化,嵌入式Linux系统内存优化使用方法研究
- 嵌入式LINUX系统内核和内核模块调试
- Linux+嵌入式实时操作系统开发与应用
- 嵌入式Linux应用程序例程
- 嵌入式Linux与物联网软件开发C语言内核深度解析书籍的介绍
- 基于FPGA和嵌入式Linux的实时解析1553B+BM的设计与实现 3次下载
- 嵌入式Linux内核实时性研究及改进
- 基于RTAI的嵌入式Linux硬实时性能的研究与实现
- 基于Linux的嵌入式应用浅析
- 嵌入式Linux 实时性分析与实时性改进
- 简化SBC的嵌入式Linux软件开发 998次阅读
- 嵌入式系统的全面解析 3146次阅读
- 嵌入式Linux启动时间优化的秘密之五-Bootloader 2743次阅读
- 嵌入式Linux启动时间优化的秘密之四-启动脚本 2306次阅读
- 米尔科技嵌入式实时操作系统介绍 2179次阅读
- 基于嵌入式软件的JNI技术应用解析 1020次阅读
- 基于Yocto Project的定制嵌入式Linux产品设计浅析 1w次阅读
- 关于嵌入式系统的特点和Linux内核的实时应用分析 1037次阅读
- 怎么才能更好的理解嵌入式操作系统Linux实时化技术? 1174次阅读
- 关于Linux嵌入式操作系统的优势特征详解 5521次阅读
- 关于Linux的特点析以及在嵌入式操作系统中的应用详解 850次阅读
- 基于Linux上进行改进的具有实时应用能力的现代嵌入式操作系统解决方案详解 843次阅读
- 对于嵌入式没有嵌入式软件架构师的详细解析 4055次阅读
- 嵌入式Linux的学习方法解析 3091次阅读
- 基于Linux的嵌入式实时操作系统的研究 2298次阅读
下载排行
本周
- 1TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 2开关电源基础知识
- 5.73 MB | 6次下载 | 免费
- 3100W短波放大电路图
- 0.05 MB | 4次下载 | 3 积分
- 4嵌入式linux-聊天程序设计
- 0.60 MB | 3次下载 | 免费
- 5基于FPGA的光纤通信系统的设计与实现
- 0.61 MB | 2次下载 | 免费
- 6基于FPGA的C8051F单片机开发板设计
- 0.70 MB | 2次下载 | 免费
- 751单片机窗帘控制器仿真程序
- 1.93 MB | 2次下载 | 免费
- 8基于51单片机的RGB调色灯程序仿真
- 0.86 MB | 2次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33564次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21548次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6653次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537796次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191185次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183278次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多