- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
15 RT-Linux的原理及实现技术
一、标准 Linux在很多方面不能满足实时应用的需要
1.核心态进程不可抢占(non-preemptive)
Linux下进程的状态分为用户态和核心态,其核心态进程是不能被抢占的。当低优先级
进程进行系统调用而进入核心态时,其他的用户态进程即使优先级再高(包括实时进程)也只
能等待,这就产生了优先级逆转(Priority Inversion)的问题。同时进程的调度是基于固定时间
片的可变优先级调度,这种调度算法试图保证每一用户程序都得到公平的 CPU时间分配,
不论进程的优先级多低,系统总会在某个时候分配给该进程一个时间片运行,即使此时有可
以运行的高优先级进程,也必须等待低优先级进程的时间片用完。这在实时系统中是不能允
许的。实时任务要求在任何需要 CPU的时刻都能立刻投入运行,即使其他的任务正在占用
CPU运行。
2.内存缺页异常
Linux采取了“虚拟内存(Virtual Memory)技术,将硬盘的存储区域开辟为虚拟内存,用
户进程运行在一个比实际内存大的虚拟内存空间内,进程运行所需的页面经常被换入、换出
实际内存,由于硬盘的机械存储方式,此操作花费的时间不可预测,无法满足实时应用的要
求。
3.频繁关闭中断
在 Linux系统调用中,为了保护临界区资源,通常采取关中断的方式。如果低优先级的
进程关闭了中断,就会导致高优先级实时进程的中断被阻塞而无法立即得到处理。
4.时钟粒度过粗
操作系统必须对时钟粒度和中断处理所需的时间开销进行折衷考虑,时钟粒度越细,意
味着时钟中断越频繁,花在中断处理上的时闻开销也越多。Linux通过对硬件时钟的编程,
将中断定时器的频率设置为 100Hz,时钟粒度仅为 10ms,远不能满足像数控系统这样对时
钟粒度要求苛刻的实时应用的需要。
二、Linux实时性改造的方法
根据实时系统的性能要求和 Linux的特点,目前通行的对 Linux进行实时化改造的做法
有以下两类:
1.对标准 Linux内核直接进行修改,增强其实时性能。如 Kurt-Linux,Red-Linux,
Hard-hat Linux等。
这种方法主要是通过重新编写内核源代码,使内核具备可抢占性,以达到实时的效果。
主要的工作有两方面:一是对时钟机制进行改进,提高系统时钟的分辨率,使粗粒度定时器
(10ms)转变为细粒度(微秒级别)定时器;二是修改任务调度机制,提高内核的可抢占性和系
统的实时响应能力。
1、Kurt-Linux
Kurt-Linux由美国堪萨斯大学开发,它将系统分为三种状态:正常态、实时态和混合态。
正常态时采用普通 linux的进程调度策略,系统不提供实时支持,实时态时只执行实时进程,
非实时进程被挂起,而在混合态时实时进程和非实时进程都被执行。
Kurt-Linux细化时钟粒度的方法是将时钟芯片设置为单次触发状态(One-shot Mode),按
需要设置一个超时时间,当此时刻到来时,再根据需要为时钟芯片设置下一个超时时间。利
用 CPU的时钟计数器可以提供与 CPU主频相当的时钟粒度。
在对实时进程的调度上,Kurt-Linux采用的是基于时间的静态实时调度算法,实时任务
在设计时已经明确的说明了它们将要发生的时间。这对于那些需要循环执行的任务有很好的
调度效果。
2.Red-linux
Red-Linux是加州大学 Irvine分校开发的实时 Linux系统。它同时支持三种类型的进程
调度算法:TD(Time Driven,基予时间的调度算法)、PD(Priority Driven,基于优先级的调度
算法)和 SD(Shared Driven,基于 CPU使用比例的调度算法)。系统给每个任务增加了以下属
性:Priority(优先级)、Start-Time(开始时间)、Finish-Time(完成时间)、Budget(使用资源数),
通过调整这些属性的值以及调度程序使用这些属性的先后顺序,
可以实现几乎所有的调度算法,从而把这三种调度算法结合起来。
Red-Linux 的进程调度程序由两部分组成:调度器 (Schedule Dispatcher)和分配器
(Schedule Allocator)。分配器在用户态执行,调度器在核心态执行,分配器负责初始化作业
的各属性值,调度器最终决定作业的执行顺序。
此外,Red-Linux通过在内核源代码中增加抢占点(preemption point),使得进程在核心
态时也能被抢占,从而减小抢占延迟,提高系统的实时性能。
2.对标准 Linux内核进行外部实时化扩展,即采用双内核的方法,在原有 Linux基础
上增加一个实时内核,所有实时进程都由实时内核来处理,而把标准内核作为该实时内核
优先级最低的一个进程来运行。如
文档评论(0)