(计算机应用技术专业论文)linux动态调度算法的研究与改进.pdf_第1页
(计算机应用技术专业论文)linux动态调度算法的研究与改进.pdf_第2页
(计算机应用技术专业论文)linux动态调度算法的研究与改进.pdf_第3页
(计算机应用技术专业论文)linux动态调度算法的研究与改进.pdf_第4页
(计算机应用技术专业论文)linux动态调度算法的研究与改进.pdf_第5页
已阅读5页,还剩51页未读 继续免费阅读

(计算机应用技术专业论文)linux动态调度算法的研究与改进.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

i linux 动态调度算法的研究与改进 计算机应用专业 研究生 施 映 指导教师 何 嘉 实时操作系统是近年来研究的一个热点, 目前的实时操作系统广泛应用于国 防、工业自动控制、通信等领域,越来越多的应用也对时间提出了更高的要求, 这就需要有能够满足实时性的操作系统作为应用的支撑。同时,随着开源项目的 兴起,作为典型代表的 linux 得到了迅速普及和发展,己成长为稳定的、性能优 秀的操作系统。虽然 linux 只是作为一个通用分时操作系统而开发的,但是出于 linux 自身的特点,基于 linux 开发一个开放的、标准的、高效廉价的实时操作 系统是完全可行的, 如何增强 linux 的实时性成为目前实时操作系统研究的一个 重点。 linux 家族中,2.6 内核自 2003 年底发布以来,己经被大量测试和实际应用 证明其是一个高效稳定的内核。相比 2.4 内核,2.6 采用了一些新技术,例如, 可抢占式内核和 o(1)调度算法等, 使得系统实时性有了很大提高, 尽管 linux 2.6 仍然不是一个实时内核,但是这些已有的优秀的改进以及其他相关的背景却为 linux 实时化工作提供很好的平台,而在此基础上进行研究和改进也更加有可能 进一步提高系统的实时性。 在经过对 linux2.6 内核仔细和深入的分析后, 我们决定从 linux 的调度系统 着手,因为新的 o(1)调度算法使得进程运行时间片的重新分配更及时,并且普 通进程的动态优先级的计算过程更简单,计算时机更分散,调度时机更宽松,调 度流程更简单,所有这些改进都很大程度上提高了调度器的实时性能。但是通过 分析我们发现其在实时性方面仍然存在不足, 就是实时进程的动态优先级实际上 是“静态”的,一经设定便不再修改,这就大大影响了实时性能。因此在上述分 析和研究的基础上,本文将优秀的动态调度算法 llf 引入 linux2.6 内核,将之 与原系统的调度算法有效统一,实时进程的动态优先级随时间动态改变,并在此 基础上修改了相关函数和调度流程,使得新系统可以具有更好的实时调度能力, 以进一步支持具有实时要求的应用。 ii 在内核修改编译后, 我们在新内核的基础上进行了相关测试并与修改前内核 进行比较,结果证明修改后的内核实时性能有了一定的提高,并且,相比较以往 的添加新的调度器的做法,这种将新的调度算法思想融入原有内核,最大程度利 用原有内核优势的改造思想也对 linux 实时化方法有着一定的借鉴意义。最后, 本文对所做的工作进行了总结,并进一步明确了以后的研究重点和努力方向。 关键词:实时操作系统 动态调度算法 llf iii abstract in recent years, with the rapid development of information techonology, the real-time system is making big effect on peoples life and it will be applied in more and more areas.meanwhile, linux, as its open source, high stability, low cost and some other characteristics,has become the fastest developing operating system in this area. eevn its still not a firm real-time system,it actually has great possibility to be a real one.improving general linuxs real-time capability to make it more fit for some special applications (like for embedded system developments)is in great practical significance and has become one of hot research directions in domestic and foreign computer fields. in the linux big family, the new kernel 2.6 has been proved to be more stable and highly efficient. compared with 2.4 version kernel, 2.6 has been improved in real-time performance by adopting some new technologies, such as preemptible kernel, the o(1) schedule algorithm etc. although the developer of rtos can benefit from these changes, linux 2.6 is still not a real-time kernel. all these changes make it possible to convert linux to a rtos. since we get the linux 2.6 kernel and a lot of research based on the new version, we finally decided to start the conversion from the scheduling system.as the new o(1) schedule algorithm is quite efficient but still some shortcomings included.,one of them is the priority of the real-time process is actually “static”,it will not be changed during the whole scheduling process after it was set. as the improvement solution, because of the problem of linux 2.6 kernel is lacking of real-time scheduling algorithms and policies in the scheduler mechanism, the laxity is introduced from the good dynamic real-time schedule algorithm llf(least laxity first) into the 2.6 kernel. combination of the laxity and the new task scheduler data structure in linux2.6 enhances the systems real-time scheduler capability as well as maintains the original o (1) scheduling characteristic. in the part of real-time capability testing, linux 2.4.20 kernel, linux 2.6 kernel and the improved system are compared on interrupt response time and context-switching time which are two key criterions of real-time testing. from the testing results, we can see that the improved linux system has the stronger real-time capability than linux 2.6 kernel. also, instead of adding new algorthem to the system, we make the most of the original structure of the kernel and make the “laxity” idea of llf to be part of the original system. iv at last, we conclued the whole project and some of the continual research aims for some limitation are also narrated. key words: real-time operating system dynamic scheduling algorithm llf 第 50 页 共 52 页 声 明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工作及取得的 研究成果。据我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其 他人已经发表或撰写过的研究成果, 也不包含为获得成都信息工程学院或其他教 育机构的学位或证书而使用过的材料。 与我一同工作的同志对本研究所做的任何 贡献均已在论文中作了明确的说明并表示谢意。 本学位论文成果是本人在成都信息工程学院就读期间在导师的指导下取得 的,论文成果归成都信息工程学院所有,特此声明。 作者签字: 指导教师签字: 第 1 页 共 52 页 1 绪论 1.1 课题研究的背景 进入 90 年代后,以计算机和软件为核心的数字化技术取得了迅猛发展,实 时计算机系统(以下简称实时系统)己经在工业、交通、能源、科学研究和科学 试验、国防等各个领域发挥着极其重要的作用。在这些应用中,实时计算正在成 为越来越重要的原则。 各个行业的实时应用对系统的实时性提出了越来越高的要 求,系统的响应时间需要被从毫秒缩短到微秒甚至纳秒级。因此,需要能够满足 强实时应用的操作系统作为支撑。 正是由于这种需要的推动,实时操作系统得到了飞速发展,从支持 8 位微处 理器到 16 位、32 位甚至 64 位,从支持单一品种的微处理器芯片到支持多品种 微处理器芯片,从只有实时内核到除了内核外还提供其他功能模块如:高速文件 系统、tcp/ip 网络系统、gui 系统等。据统计,目前世界上各国己有 40 多家公 司成功的推出了超过 200 种的实时操作系统。 目前应用于实时系统的有三大类操作系统,它们分别是:嵌入式微内核操作 系统(如 qnx,psos 等) ,商用的实时操作系统(如 vxworks 等)和带有一定 实时性扩展的传统的操作系统(如 nt, solaris) 。它们的共同特点是体积小、具 有微内核,符合 posix 实时扩展标准,具有较好的开发调试环境等。但这三大 类操作系统都有不尽如人意的地方: 嵌入式微内核操作系统对实时任务调度支持 性不强;带有一定实时性能的传统的操作系统由于其本身固有的非实时性内核, 用作实时操作系统有其先天的局限性;而商用的实时操作系统价格昂贵,源码不 公开。所以需要一种开放的,流行的操作系统来开展实时性操作系统研究。 自从 linux 问世以来,越来越多的人开始使用和研究 linux,并开发基于 linux 的应用,而把 linux 应用于实时系统现在也正成为人们关注的方向。在通 用操作系统方面,我国与国外存在较大差距,而在实时操作系统及嵌入式操作系 统方面,通过努力完全有可能在短时间内缩短差距。 由于目前硬件的飞速发展,系统速度越来越快,这就为实时系统的研究提供 了很大便利,使得研究者可以充分利用硬件特性。目前的多数操作系统从兼容性 及通用性出发,并未完全发挥计算机硬件的性能。在嵌入式和实时应用场合,需 要的是精简、高效、功能相对简单的操作系统,不是大而全的万能通用系统。因 此针对操作系统某些方面进行优化满足特定的应用需求是可行的。经过仔细研 究,发现通过改造 linux 内核,使其充分利用现有的 cpu,可以达到很高的实时 性。 本课题是针对整个 linux 内核研究进而实现实时化改造的一部分, 要完成的 第 2 页 共 52 页 工作主要是分析 linux 内核进程和进程调度系统, 找到一种不需要做出巨大改动 而且对内核其他部分影响相对较小的能增强 linux 内核实时性的方法, 使其能够 满足多数实时应用。这一研究对实现嵌入式实时操作系统,将其应用于具有实时 需求的工业、国防等应用场合具有重要的借鉴意义。 1.2 研究现状和意义 目前,国外的许多大学、科研机构和公司对 linux 的实时化倾注了大量的热 情,就使得 linux 在嵌入式操作系统市场上所占的份额迅速扩大,基于 linux 开 发的嵌入式产品也越来越多,rt-linux,uclinux,kurt-linux,hardhat linux 等就是其中的杰出代表。在国内,也有多家公司如中软、红旗、turbolinux、蓝 点等少数几家公司推出了嵌入式 linux 操作系统, 但在技术和性能上与国外主流 产品比起来有较大差距,还达不到自主开发高可靠产品的水平。 在这样的应用背景下,加之 linux 在嵌入式领域具有明显的先天优势,因此 深入研究 linux 操作系统, 不断提高通用的分时 linux 操作系统的实时处理能力, 使其更加适合嵌入式应用对高实时性的要求, 是构造实时 linux 操作系统的重要 研究方面,也已经成为国内外学者和机构研究的一个热点。 目前实时化的相关研究主要集中在下面三个方向: (1)调度的改进 对调度的改进包括对实时进程的调度改进和交互式非实时进程的改进。 linux 的调度器是基于优先级的调度器,为了缩短对外界实时请求的反应时间, 就必须尽可能早地进行调度。 因为只有进行了调度, 实时进程才有可能得到运行, 调度算法将直接影响到内核对任务的响应时间。 常见的改进方法是用实时调度算 法代替 linux 中的调度器或者是增加调度程序执行的时机。例如:kurt 系统就 支持 fifo 调度策略、轮转调度策略和 unix 分时调度策略,还增加了 sched-kurt 调度策略,这是一种静态调度策略,使用一个特殊的调度文件记 录预先定义好的待调度进程的参数;而 rt-linux 中采用的调度算法有:基于优 先级的抢占式调度和 edf 调度;基于优先级的调度使用“单调率算法” ,它直接 支持周期任务, 同时用户可自行编写调度程序, 它们可实现为可加载的核心模块, 具有较好的通用性。 (2)时钟的改进 计算机是以严格精确的时间进行数值运算和数据处理的, 最基本的时间单元 是时钟周期。系统时间是以“时钟嘀哒”为单位,而时钟中断的频率决定了一个 时钟嘀哒的长短。时钟频率的选择对实时操作系统来讲十分重要,频率低了,对 请求的反应就慢;频率高了,调度频繁,上下文切换也频繁,系统开销大。所以 第 3 页 共 52 页 时钟频率的选择要兼顾反应时间和系统开销。linux 的时钟频率对实时进程是不 够的,因此一些研究者对 linux 的时钟系统进行了改造,常见的改进时钟的方法 有细化时钟粒度和修改时钟中断程序。 我国中科院软件研究所在 linux 基础上开 发的 rfrtos, 其方法是在 linux 中实现了一个具有精密时钟刻度的实时核心时 钟。其独立的实时时钟方便维护,具有实用性,rfrtos 的定时器时间开销控制 在 l0us 左右。kurt 提出不同于硬实时和软实时的严格实时(firm realtime)概 念,采用的方法是修改 linux 的时钟中断机制,采用非周期的时钟中断方式,改 变了时钟中断的固定频率的模式,通过编程实现重新设定时钟中断时间,提高了 时钟粒度,使响应时间达到了微秒级。国内不少基于 linux 开发嵌入式实时操作 系统几乎无一例外的对时钟系统进行了修改,而且大多数修改方法和 kurt 的 类似,即采用非周期性的时钟中断。 (3)内核抢占的改进 linux 中的进程运行在两种模式下:系统模式(核心态)和用户模式(用户 态) 。核心态下的进程比用户态下的进程有更多的特权,用户态下的进程不能直 接对系统数据进行操作,而只能通过系统调用,进入核心态后,再对系统数据进 行操作。系统调用是有限的,主要是处于对系统数据进行保护的目的。用户态的 进程是可以被抢占的,而核心态的进程不可以被抢占,除非进程自己因为某种原 因而放弃处理器。实时进程有可能因为非实时进程长期占用 cpu 得不到响应。 所以可以在内核中插入可抢占点, 增加抢占发生的几率从而使实时进程能得到及 时的响应。但可抢占内核有时也有不利的地方,即实时进程也可能被其他进程抢 占而失去运行机会。因此可抢占内核的具体实现策略要根据应用而定。 就目前来看,大部分商业化的实时 linux 都己经采用 2.6 内核,但是大部分 源码公开的实时 linux 系统仍是基于 2.4 内核或者是更老的 2.2 内核,并没有利 用 2.6 内核的新特性。因此相比以往大多数基于 linux2.4 内核的 linux 实时化改 造,研究分析 linux2.6 内核的实时性,进一步提高其实时性能具有明显的优越 性和必要性。 本课题正是利用linux2.6内核的新特性, 并在分析研究己有的linux 实时化技术的基础上,提出一个通过改进调度算法而提高 linux 实时性能的方 案。对于改造方案中实时化后的 linux,我们努力使其保持原有的特性,并同时 使其具备应用到实时系统的新特性:快速的中断反应时间,精确的定时系统以及 任务执行期限的保证。 1.3 论文组织结构 本文共分六章,具体的组织结构如下: (1)第一章主要介绍研究背景及现状及意义等; 第 4 页 共 52 页 (2)第二章将介绍实时操作系统的基本理论作为本文后续论述的理论基础; (3)第三章深入研究了 linux2.6 内核调度系统的实现原理和性能特点。重点 分析了全新的与调度相关的数据结构和 o(1)调度特性,给出了改进调度系统达 到实时化系统的目的; (4)第四章给出具体实现方案,即将优秀的动态实时调度算法 llf 思想引入 linux 2.6 的进程调度体系,构造出了具有动态实时调度能力的崭新的调度系统; (5)第五章针对一些影响系统实时性的关键性指标,如上下文切换时间和中 断响应时间,使用测试工具对改进系统进行了测试,并对结果进行了分析; (6)对本文的总结以及对未来工作的展望。 第 5 页 共 52 页 2 linux 的实时化方案 2.1 实时操作系统 2.1.1 实时操作系统简介 操作系统是计算机系统中的一个系统软件, 它管理和控制计算机系统中的硬 件及软件资源,合理的组织计算机工作流程,以便有效地利用这些资源为用户和 开发者提供一个功能强大、使用方便的工作环境;操作系统也是应用程序和计算 机硬件之间的接口,现代的操作系统大多具备对多任务的支持能力。 实时操作系统除了具备上述有关操作系统的基本特点之外, 对实时任务有力 的支持是其最大的特点和最重要的评判依据。对于很多计算机系统来说,只要计 算结果在逻辑上是正确的,就可满足正确性要求。而对于实时系统来说,正确的 执行指令的逻辑顺序和得到逻辑运算结果仅仅是问题的一个方面。 关于实时系统 的概念从不同的角度有很多不同的定义,最具有代表性的是:在实时系统中,计 算任务的正确性不仅仅依赖于计算结果逻辑上的正确性, 而且还依赖于计算结果 产生的时间。所以,实时系统是与时间约束紧密相关的。这里的“时间约束”是 指计算任务的开始执行时间、完成时间、截止期等。 2.1.2 实时系统特点 实时系统对时限和可靠性的要求比分时系统高得多, 实时系统具有以下一些 特点,从而区分于其他系统: (1)多路性:实时系统的多路性表现在对多个不同的现场信息进行采集以及 对多个对象和多个执行机构实行控制。 (2)独立性:每个用户实时系统提出服务请求,相互间是独立的。在实时控 制系统中对信息的采集和对象控制也是相互间独立的。 (3)及时性:实时系统所产生的结果在时间上有着严格的要求,只有符合时 间约束的结果才是正确的。在实时系统中,每个任务都有一个截止期限,任务必 须在这个截止期限之内完成,以此来保证系统所产生结果在时间上的正确性。对 硬实时系统来说,如果所产生的结果不符合时间约束,那么,由此带来的错误将 是严重的和不可恢复的。 而对软实时系统来说, 虽然结果的产生不符合时间约束, 但由此带来的错误还是可以接受的、可以可恢复的。 (4)同时性:一般来说,一个实时系统常常有多个输入源。因此,这就要求 系统具有并行处理的能力,以便能同时处理来自不同输入源的输入。 (5)可预测性:实时系统的实际行为必须在一定的限度内,而这个限度是可 以从系统的定义而获得的。 这意味着系统对来自外部输入的反应必须全部是可预 第 6 页 共 52 页 测的,甚至在最坏的条件下,系统也要严格遵守时间约束。因此,在出现过载的 时候,系统必须能以一种可预测的方式来保证它的实时性。 (6)可靠性:可靠性一方面是指系统的正确性,即系统所产生的结果不仅在 数值上是正确的,而且在时间上也是正确的;另一方面是指系统的健壮性,也就 是说,虽然系统出现了错误或外部环境与定义的不符合,但系统仍然可以处于可 预测状态,它仍可以运行而不会出现致命错误。 实时系统通常需要与外部环境进行交互,例如,可以控制机器及生产过程, 或者监控化学反应并随时汇报危急情况, 这种情况通常需要从外部接收数据并提 供输出和控制外部环境。 很多实时系统都是“反应”的系统,也就是说,由事件驱动并且必须对外界 事件进行响应。绝大多数实时系统的一个重要特点是并发处理,通常事件发生的 顺序是不可预测的。 实时系统经常包括实时控制,从接收到的输入数据中做出控制决策。实时系 统和嵌入式系统有着最紧密的联系。通常来说,硬实时系统大都是嵌入式系统, 也就是由封装好的软件系统控制与其相关的硬件。 2.1.3 实时系统的分类 由于实时操作系统在设计时与应用有密切的关系,所以有许多分类的方法, 各种分类的侧重点不同,其中常见的两种分类如下: 一是被分为硬实时和软实时(hard-realtime 和 soft-realtime) :硬实时系统就 是系统必须及时地对事件做出反应,它要求任务执行过程不但必须正确,且必须 准时,绝对不能发生错过事件处理的期限的情况,如果不能按时完成,则可能造 成灾难性的后。例如医疗设备,控制火箭发射的系统等。在软实时系统中,当系 统负载较高时允许发生少数事件处理错过截止期的情况, 即任务由系统尽可能快 地执行,但是这些任务不必要在特定的时间内完成,可以允许少量的超时现象存 在,但若超过一定比例也是不能接受的,如网络传输、多媒体处理。另外还可以 分为专用系统和开放系统以及集中式系统和分布式系统。 二是被分为周期性的和非周期性实时系统(periodic 和 aperiodic) :周期性的 就是系统通过设备周期性地探测外部环境的变化, 在周期内对探测到的变化作出 反应。比如流水线的控制。非周期性的就是外部事件循环性的地发生但不是有规 律的或者是突发事件。比如设备故障,要求在规定时间内被处理。 2.1.4 实时操作系统的体系结构 实时操作系统的体系结构如下图所示: 第 7 页 共 52 页 硬件(hardware) 硬件抽象层(hardware abstraction layer) rtos内核(kernel) 图形驱动 函数库 网络模块系统api 内存管理 模块 驱 动 程 序 编 程 接 口 i/o管理 文件系统 驱动程序 图 2.1 实时操作系统的体系结构 (1)硬件抽象层(hal)包含了所有和硬件平台相关的代码,如上下文切换和 i/o 寄存器访问等等。它存在于实时操作系统的最底层,直接访问和控制硬件, 对其上层的实时操作系统的机器无关代码提供访问和控制服务。 这样可以简化实 时操作系统内核的移植工作,除了设备驱动程序之外,在移植的时候只需要修改 hal 的代码就可以了。 (2)实时操作系统内核 (rtos kernel) 是用来为大多数程序乃至操作系统 (网 络、文件系统、驱动程序)构建一系列在抽象的文件上工作的抽象机,使用户程 序及上层操作系统组件对系统设备透明。 在内核里面需要实现如下的接口界面: 多线程支持(线程管理,线程同步原语) ; 内存分配原语函数; 文件操作接口函数; 中断、异常及定时器函数; 其它标准 c 库函数; 程序动态装载/卸载。 (3)在提供的实时操作系统接口上需要有对用户程序提供的函数接口,专门 为用户定制网络、图形、视频等接口,并且提供驱动程序开发界面,方便开发者 对不同需求的设备定制驱动程序。 一般来说,实时操作系统内核的实现都为微内核的体系结构。所谓微内核技 术是指将必需的功能(如进程管理、任务通信、中断处理和进程调度等)放在内 核中,而将那些不是非常重要的核心功能和服务(文件系统、存储管理、网络通 第 8 页 共 52 页 信和设备管理)等等作为内核之上可配置的部分。这样,整个操作系统就是由提 供一些基本服务机制的微内核加上一些服务进程构成, 系统的各个系统调用和服 务都是由内核发消息到不同的服务进程,服务进程执行相应的操作,然后以消息 的方式返回内核。 使用微内核的体系结构,使得实时操作系统体积很小,便于直接放在 rom 中,实现 rom 固化;同时方便进行模块化的扩展。 使用微内核的结构也存在很多的缺点,如操作系统的服务模块在独立的地址 空间运行,虽然可以将不同模块间的内存错误隔离开来,但是使得进程间通信和 上下文切换的时间和开销大大增加,降低了系统效率。 2.1.5 实时系统的性能分析 实时操作系统(real-time operating system,rtos)是基于计算机的、管理 计算机软硬件资源并提供人机命令和编程接口的系统, 它能在固定的时间内对一 个或多个由外设发出的信号做出适当的反应,同时它还是嵌入式软件开发平台。 与普通分时操作系统不同,实时系统强调系统对外部异步事件响应时间的确定 性。实时操作系统是操作系统的一个重要分支,它与通用的商用操作系统如 unix,windows 有共同的一面,也有不同的一面。对于一般的商用操作系统, 它的目的是方便用户管理计算机资源, 以最大限度地利用计算机的资源: 而rtos 追求的是任务切换的实时性、事件响应时间的可确定性及系统的高可靠性。评价 一个实时系统的性能要从任务调度功能、内存管理功能、最小内存开销、任务切 换时间、最大中断禁止时间等方面来考虑。 (1)任务与任务调度 在实时操作系统中,任务是一个可运行的程序段,它负责完成一项特定的功 能,这个分段被操作系统当作一个基本单位来调度,而任务自身被看作独自占有 cpu 资源。在嵌入式软件的设计过程中,就需要把问题分化为一个一个的任务, 每个任务都是应用的某一部分,完成一部分功能。同时,这些任务有自己的特定 的 cpu 寄存器和堆栈空间,任务还被赋予一定优先级。为了让多任务的尽可能 地使 cpu 利用达到最大值,可以实现程序模块化。在只有一个 cpu 的嵌入式系 统中,多任务运行靠实时系统在许多任务之间切换、调度来实现。任务调度即决 定应该运行哪个任务,这是内核的主要职责之一。多数实时操作系统都是基于优 先级调度算法的。每个任务都被赋予一定的优先级,而 cpu 总是执行处于就绪 态的优先级最高的任务。 (2)内存管理 虚拟存储器是操作系统内存管理单元(mmu)的处理器设计的重要概念, 很多桌面操作系统,都引入了虚拟存储器的机制。当虚拟内存地址被送到内存管 第 9 页 共 52 页 理单元后,虚拟地址被映射为物理地址,实际存储器被分割为相同大小的页面, 采用分页的方式载入进程。程序在运行之前,不需要全部装入内存,而是仅将那 些当前需要运行的部分页面装入内存运行;当内存被“填满”仍有需求时,系统 便会释放或转存暂时不使用的页面。在许多实时系统中,也采用 mmu 进行内存 管理,并且它的内存管理模式可以分为实模式和保护模式。一些嵌入式系统针对 不带 mmu 的处理器设计,它们不使用虚拟内存管理技术,采用的是实存储器管 理策略。因而对于内存的访问是直接的,它对地址的访问不需要经过 mmu,而 是直接送到地址线上输出,所有程序中访问的地址都是物理地址。而且,大多数 的嵌入式操作系统都对内存空间没有保护,各个进程实际上都共占整个内存空 间。 嵌入式系统的开发中, 实时系统的内存管理能力是选择实时操作系统的重要 参考因素,开发人员也需要参与系统的内存管理。从编译内核开始,开发人员必 须告诉系统这块开发板到底拥有多少内存;在开发应用程序时,必须考虑内存的 分配情况并关注应用程序需要运行空间的大小。 另外, 若采用实存储器管理策略, 用户程序同内核以及其它用户程序都处在一个地址空间中, 程序开发时要保证不 干扰其他程序的地址空间,使程序不干扰其它程序的正常运行,也不破坏操作系 统的工作。 (3)最小内存开销 最小内存开销是实时操作系统一个重要评价指标。 最小内存开销是指在嵌入 式系统中只运行某个操作系统所需要的最小内存。在嵌入式系统中,由于内存空 间有限,所以考虑运行操作所需的最小内存是必要的。系统内存除了要保障最小 内存开销,还要保证应用软件的运行。 (4)任务切换时间 任务切换时间是操作系统将 cpu 控制权从一个任务转交给另一个任务所需 要的时间。由于某种原因使某个任务退出运行时,实时操作系统要保存它的现场 运行信息,把它插入相应任务队列,并根据一定的算法重新选定一个任务使之投 入运行,这一过程所需的时间称为任务切换时间。 (5)中断禁止时间与中断延迟时间 当操作系统运行在核心态(或执行某些 api)时,不能立即响应外部中断, 只有在重新回到用户态后,才会执行外部中断的操作。系统从进入核心态到重回 用户态的最大时间就称为中断禁止时间。 中断延迟时间是指从系统确认中断到开 始执行中断服务程序的第一条指令的时间。 实时操作系统的中断延迟时间由两个 因素决定,即中断禁止时间和系统处理中断并将控制权交给中断处理程序的时 间, 为了缩短中断延迟时间, 许多商用实时操作系统采用 “可中断” 的内核调用, 第 10 页 共 52 页 即使在内核态,也可以中断执行而响应外部中断。 以上几个方面是实时操作系统性能优劣的重要指标, 任务切换时间和中断禁 止时间决定了系统的实时性。在嵌入式系统开发过程中,具体选择使用哪种操作 系统应依据应用要求和成本等因素综合考虑。 2.2 用 linux 构造实时系统的优势 linux 是类 unix(unix-like)操作系统大家族中的一员,从 90 年代末开始, linux 这位相对较新的成员变得非常流行,并且跻身于那些有名的商用操作系统 之列。之所以能在市场上取得如此快的发展,与它自身的优良特性有着不可分割 的关系。 (1)开放源代码,成本低,丰富的软件资源。linux 遵循 gpl,用法律保障了 用户免费获得内核源代码的权利;由于嵌入式系统千差万别,往往需要针对应用 修改和优化系统。 这时能否获得源代码就至关重要了。 linux 是自由的操作系统, 它的开放源代码使用户获得了最大的自由度。linux 上的软件资源十分丰富,每 一种通用程序在 linux 上都可以找到,并且每天都在增加。在 linux 上开发程序 往往不需要从头做起,而是先选择一个类似的自由软件,进行二次开发。这就大 大节省了开发工作量,缩短了开发时间。 (2)功能强大的内核,性能高效、稳定。linux 的内核非常稳定。它的高效和 稳定性已经在各个领域,尤其在网络服务器领域得到了事实的验证。并且其开发 者遍布全球,更容易发现系统中的漏洞,提高系统的稳定性。 (3)高度的模块化,易于裁剪。linux 继承了 unix 的优秀设计思想,内核和 用户界面是完全独立的。 linux 内核小巧灵活, 高度模块化, 易于裁剪。 这使 linux 能很适合嵌入式系统的应用。 (4)支持多种体系结构, 可移植性好。 linux能支持x86, arms, mips,alpha, sparc 等多种体系结构。目前,linux 己被移植到数十种硬件平台上,支持几乎 所有流行的 cpu。linux 符合 ieee posix.i 标准,有非常好的可移植性,它支 持商业 unix 的全部功能,unix 平台上众多的应用程序稍加修改就可以应用到 嵌入式环境中的 linux 平台。 (5)强大的网络功能,完善的文件、图形管理机制。linux 天生就是一个网络 操作系统,几乎所有的网络协议和网络接口都已经被实现在 linux 中。现代嵌入 式系统在网络方面的应用对操作系统网络功能要求较高,linux 强大的网络功能 完全能够满足需要。另外,linux 支持 ext2, fatl6 , fat32, ntfs 等多种文件系统。在 图形系统方面,linux 上既有成熟的 x windows,也有 embeded qt,minigui 等嵌入式 gui,还有 svgalib, framebuffer 等优秀工具,可以适合不同的用途。 第 11 页 共 52 页 (6)支持大量的周边硬件设备,驱动丰富。linux 的驱动己经非常丰富了,支 持各种主流硬件设备和最新硬件技术。而且随着 linux 的广泛应用,许多芯片厂 家也己经开始提供 linux 上的驱动,这进一步促进了 linux 在各种硬件平台上的 应用。 (7) linux 有着完整的开发工具链。linux 提供 c 、c+、java 以及其它很 多的开发工具,并且大部分开发工具和环境都可以免费获得。linux 基于 gnu 的工具包从编辑器到底层调试提供了完整的、无缝的交叉平台开发工具,并充分 考虑了支持各种不同体系结构的平台。 (8)具有丰富的文档支持,易于开发。由于 linux 是互联网充分发展的产物, 互联网上有众多的热心开发者,除了公开的所有内核源文件外,还有大量的开发 文档,可以从爱好者维护的网站中免费得到这些开发资料,从入门级的到内核级 的开发分析资料能够满足各个层次的需求, 特别的问题还可以和众多的爱好者讨 论,是一笔无形的宝贵财富。 2.3 linux 增强实时性的方法 作为分时操作系统的 linux,系统目标是较好的平均系统响应时间和较高的 吞吐量,并不具备实时系统的特征,还不能够直接满足硬实时系统方面的需要。 最近几年,linux 本身在实时支持方面也做出了努力,引入了实时进程的概念,允 许将一个进程的属性确定为实时进程。 linux 从调度策略上区分实时进程和普通进程, 实时策略先于普通进程运行, 采用不同的调度策略。对实时进程,linux 采用两种调度策略,即先来先服务调 度 sched_fifo 和时间片轮转调度 sched_rr,sched_rr 任务最先被调度 并且拥有时间片。一旦时间片用完,就被移动到优先级队列的队尾,并允许同一 优先级的其它任务运行。如果同一优先级没有其它任务,该任务将继续运行下一 个时间片。sched_fifo 是运行直至阻塞的策略,sched_fifo 任务按优先级 调度, 一旦开始就一直运行到结束或者阻塞在某种资源上。 它们不象 sched_rr 任务那样共享处理器。此外,linux 还提供内存锁定(mlock),posix 实时信号等 机制以在一定的应用范围内支持粗粒度的软实时应用, 但许多重要的实时性能指 标, 如任务切换时间、 中断延迟时间等不够明确, 与支持硬实时性还有明显差距, 还有较多的问题需要解决。 目前国内外从事嵌入式 linux 系统开发的公司, 在增强扩充实时性及支持硬 实时性方面做了大量研究及改进工作,并取得了许多进展。目前,实现 linux 的 硬实时性一般有以下几种途径。 (1)独立核方法 第 12 页 共 52 页 linux 作为实时系统的独立核方法是指设计一种完全独立的实时内核,但其 api 与 linux 内核相兼容。 这种方法的理论基础是一款优秀的实时操作系统必须 在其设计之初就充分考虑到系统实时性的要求,并能够提供符合标准的 api。这 种实现方法对很多与 posix 兼容的专有实时系统提供商很有吸引力。这种方法 的局限性是由于设计了一个完全独立的实时内核而没有使用原有 linux 内核, 导 致 linux 系统的一些优势难以继承,尤其是与 linux 内核相关的一些优势无法获 得。比如 linux 内核对大量硬件的广泛支持,linux 内核超群的可靠性、稳定性 等。另外,由于这种方法并没有通过修改 linux 内核代码来开发实时内核,而是 在 linux 系统之上重新设计了一个实时内核,这样的开发并不要求源代码开放。 因此, linux 一些基于开放源代码的优势也势必受损。 最后一点, 任何基于 linux 内核的开发成果也无法方便地应用到实时内核中。 当然这种实现方法也从 linux 系统中得到了很多好处。由于 linux 系统的支 撑,实时内核就并不需要“真”的去实现。而且熟悉 linux 系统的开发人员也可 以很快地熟悉这种方法开发出的实时系统。 人们也会自然地想到用 linux 系统做 嵌入式系统的开发平台。此外,如果这种实时系统的 api 是 linux 系统 api 子 集的话,我们还可以只在 linux 主机上仿真,进行应用程序的开发和调试,免去 了远程调试之苦。 (2)双核方法 双核的一个关键所在是运行在常规 linux 内核上的所有非实时任务必须是 支持可抢占式调度的。这样才能做到对实时内核提供精确实时保证没有任何影 响。由于实时内核非常小,并不会增加整个系统的负载,所有这些对开发实时性 要求严格的实时软件都提供了有力保障。 这种方法的弊端在于实时任务的开发是直接面向提供精确实时服务的小实 时内核的,而不是功能强大的常规 linux 内核。因此,实时任务是运行在系统内 核层的,这就意味着这些实时任务可以运行在没有内存保护的级别之上。所以, 一个实时任务的错误可能会导致整个系统的瘫痪!更要命的是,这些实时任务的 开发由于面对的是小的实时内核,而不能直接利用 linux api 和第三方软件及运 行库。 (3)修改核方法 这种方法是基于已有 linux 系统对实时软件开发的支持, 进行源代码级修改 而使 linux 变成一个真正的实时操作系统。 这种方法也是和 linux 哲学相吻合的。 任何基于 linux 内核源代码修改的产品,都要遵循 gpl 协议,对所有软件人员 开放源代码。一旦很多人认为它是有用的,就会有人对它进行维护,或者是混合 在通用 linux 内核中,或者是单独分出一个实时 linux 分支。 第 13 页 共 52 页 这种方法的中心原则是精心选择部分改动, 就可以满足一系列相关 linux 实 时开发。 此外, 由于这些改动都是相对局部的, 不会从根本上改变 linux 的内核。 而且一些改动还可以通过常规 linux 的可加载模块方式完成。 在需要时系统可以 动态加载该功能模块,在不需要时还可以动态卸载该模块。 (4)资源核方法 资源核方法是一种以资源为中心来指导实时内核提供精确的、有保证的、可 抢占的获取系统资源的方法。 只要实时应用所需资源可以由内核后台资源管理程 序调配满足,实时内核是允许实时应用可配置的。因此,实时内核其实是提供了 实时应用可构建的基础从配置简单的实时系统到复杂的实时系统, 都可以通 过动态地改变实时任务属性和它们在整个系统中的优先级来满足。 这种方法的最 大优点是系统具有很好的健壮性、可精确预见的实时性。另一个优点是允许应用 程序根据实际情况动态调整自身属性。此外,这种方法非常适合嵌入式系统的开 发。 上述的各种实时 linux 的实现,它们针对不同的设计目标,从不同的侧重点 解决了通用 linux 操作系统对实时性支持的问题。 2.4 几种典型的 linux 实时化方案 2.4.1 rtlinux 和 rtai rtlinux 是由新墨西哥工学院(new mexico institute of technology)开发的 硬实时 linux 系统,由 victor yodaiken 和他的学生 michael barabanov 所完成。 现在他们成立的以 rtlinux 为产品的公司 fsmlab 提供对 rtlinux 的发售、维 护与升级。rtah20 是实时应用接口 real time application interface 的缩写,是由 意大利米兰理工学院航天工程系 (dipartnto di ingegneria aecrospazialepolitecnico di milano,diapm)开发的,它是一个开源项目,目前的主持人是 paulo mantegazza 教授。它们的目的是将 linux 提供的标准 posix 服务与硬实时服务 有效地结合起来,提供透明的、模块化的、可扩展的实时操作系统。rtlinux 和 rtai 都是采用了双核方案对 linux 进行实时化。其设计的基本原理是:在 linux 操作系统之下,内核与硬件中断之间增加一个小的实时内核,该内核与 linux 内 核共存,linux 本身作为一个可抢占的任务运行,优先级最低,随时可以被高优 先级的任务抢。这样既可以使用标准 linux 操作系统提供的各种服务,又可以实 现硬实时服务,这种双核方案如图 2.2 所示。 第 14 页 共 52 页 rt-linux实时内核 实时任务普通linux内核实时任务实时任务 linux应用程序 系统调用fifo 硬 件 图 2.2 双核方案示图 此方案对 linux 中断采用一种软中断模拟的机制进行修改。linux 关中断的 问题由实时内核中的中断仿真器解决,任何时候 linux 内核调用 cli()关中断时, 用软件中断标志替换,所有的中断由实时内核捕获,实时内核截获中断后决定任 务的分发。当存在一个实时处理要求时,实时内核立即保存 li

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论