嵌入式操作系统论述
嵌入式操作系统论述
1 嵌入式操作系统概述
操作系统主要有四种基本结构,即通用操作系统、层次结构操作系统、客户服务器方式操作系统与嵌入式操作系统。我们在日常工作学习环境中接触最多的是通用操作系统。通用操作系统是由分时操作系统发展而来,大部分都支持多论文联盟http://用户和多进程,负责管理众多的进程并为它们分配系统资源。分时操作系统的基本设计原则是尽量缩短系统的平均响应时间并提高系统的吞吐率,在单位时间内为尽可能多的用户请求提供服务。由此可以看出,分时操作系统注重平均表现性能,不注重个体表现性能。
嵌入式操作系统是相对于其他常规操作系统而言的,一般是指系统的内核或者微内核。嵌入式操作系统是嵌入式系统的灵魂,它的出现大大提高了嵌入式系统开发的效率,这不仅体现在其减少系统开发总工作量,而且提高了嵌入式应用软件的可移植性。为了和嵌入式系统特点相匹配,一个典型的嵌入式操作系统一般要包括操作系统所具备的最基本功能,如进程调度、内存管理以及中断处理等,同时要具有小巧、速度快和响应可预测性等特点,必须保证实时任务在要求的时间内完成。要注意的是,实时特性不是嵌入式系统所必需的,具备较好实时性的嵌入式操作系统严格的讲应该是嵌入式实时操作系统。由于嵌入式系统很多情况下是用于工控等场合,所以绝大多数的情况都对实时性有一定的要求。嵌入式系统一般没有外部存储器,所有的程序和数据都装在flash等固态的电子盘上。
在嵌入式操作系统中,内核或微内核至少应包含如下几个部分。
1.1 任务
一个任务,也称作一个线程,是一个简单的程序,该程序可以认为cpu完全只属该程序自己。实时应用程序的设计过程,包括如何把问题分割成多个任务,每个任务都是整个应用的某一部分,每个任务被赋予一定的优先级,有它自己的一套cpu寄存器和自己的栈空间。典型地、每个任务都是一个无限的循环。每个任务都处在以下5种状态之一的状态下,这5种状态是休眠态,就绪态、运行态、挂起态(等待某一事件发生)和被中断态 。休眠态相当于该任务驻留在内存中,但并不被多任务内核所调度。就绪意味着该任务已经准备好,可以运行了,但由于该任务的优先级比正在运行的任务的优先级低,还暂时不能运行。运行态的任务是指该任务掌握了cpu的控制权,正在运行中。挂起状态也可以叫做等待事件态waiting,指该任务在等待,等待某一事件的发生,(例如等待某外设的i/o操作,等待某共享资源由暂不能使用变成能使用状态,等待定时脉冲的到来或等待超时信号的到来以结束目前的等待,等等)。最后,发生中断时,cpu提供相应的中断服务,原来正在运行的任务暂不能运行,就进入了被中断状态。图1表示μc/os-ii中一些函数提供的服务,这些函数使任务从一种状态变到另一种状态。
1.2 中断管理
中断是一种硬件机制,用于通知cpu有个异步事件发生了。中断一旦被识别,cpu保存部分(或全部)现场(context)即部分或全部寄存器的值,跳转到专门的子程序,称为中断服务子程序(isr)。中断服务子程
序做事件处理,处理完成后,程序回到:
1)在前后台系统中,程序回到后台程序。
2)对不可剥夺型内核而言,程序回到被中断了的任务。
3)对可剥夺型内核而言,让进入就绪态的优先级最高的任务开始运行。
中断使得cpu可以在事件发生时才予以处理,而不必让微处理器连续不断地查询(polling)是否有事件发生。通过两条特殊指令:关中断(disable interrupt)和开中断(enable interrupt)可以让微处理器不响应或响应中断。在实时环境中,关中断的时间应尽量的短。关中断影响中断延迟时间。关中断时间太长可能会引起中断丢失。微处理器一般允许中断嵌套,也就是说在中断服务期间,微处理器可以识别另一个更重要的中断,并服务于那个更重要的中断,如图2所示。
图2 中断嵌套
2 嵌入式操作系统选型
在嵌入式系统的开发中,嵌入式操作系统软件是实现各种系统功能的关键,也是计算机技术最活跃的研究方向之一。不同的应用对嵌入式软件系统有不同的要求,通常,应用系统对嵌入式软件的基本要求是体积小、执行速度快、具有较好的可裁减性和可移植性。随着嵌入式系统发展和应用的多样性,嵌入式操作系统的选择主要考虑以下几方面的因素:
(1)操作系统的硬件支持:如支持目标硬件平台和可移植性;
(2)开发工具的支持程度:如编译器、链接器、调试器及仿真环境等;
(3)能否满足系统应用需求:如实时性、中文化支持、可靠性等;
(4)成本和技术支持:如整个目标系统的成本和操作系统的成本;
(5)自行开发或自建操作系统:如linux和μc/os-ii等。
目前,流行的嵌入式操作系统:
从八十年代起,国际上就有一些it组织、公司,开始进行商用嵌入式系统和专用操作系统的研发。这其中涌现了一些著论文联盟http://名的嵌入式系统,如microsoft公司的wince和windriversystems公司的vxworks就分别是非实时和实时嵌入式操作系统的代表。但是商用产品的造价都十分昂贵,对于我们抄表系统来说,对嵌入式操作系统要求不那么苛刻,没有必要应用如此昂贵的操作系统。
μc/os-ii和uclinux操作系统,是当前得到广泛应用的两种免费且公开源码的嵌入式操作系统。μc/os-ii适合小型控制系统,具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,最小内核可编译至2k。uclinux则是继承标准linux的优良特性,针对嵌入式处理器的特点设计的一种操作系统,具有内嵌网络协议、支持多种文件系统,开发者可利用标准linux先验知识等优势。其编译后目标文件可控制在几百k量级。转贴于论文联盟 http://
μc/os-ii是一种免费公开源代码、结构小巧、具有可剥夺实时内核的实时操作系统。其内核提供任务调度与管理、时间管理、任务间同步与通信、内存管理和中断服务等功能。
uclinux是一种非常优秀的linux 版本,功能比较强大,应用广泛,运行稳定可靠。uclinux是micro-conrol-linux的缩写。同标准linux相比,它集成了标准 linux操作系统的稳定性、强大网络功能和出色的文件系统等主要优点。但是由于没mmu(内存管理单元),其多任务的实现需要一定技巧。
由于μc/os-ii相对简单易学,因此我们选用了μc/os-ii操作系统。
3 嵌入式μc/os-ii操作系统的特点
3.1 可移植性(portable)
绝大部分μc/os-ii的源代码是用移植性很强的ansi c 写的。和微处理器硬件相关的那部分是用汇编语言写的。汇编语言写的部分已经压到最低限度,使得μc/os-ii便于移植于其他微处理器。
3.2 可固化(romable)
μc/os-ii是为嵌入式应用而设计的,所以可以成为产品中的一部分。
3.3 可裁剪(scalable)
可以只使用μc/os-ii中应用程序需要的那些系统服务。
3.4 占先式(preemptive)
μc/os-ii完全是占先式的实时内核。这就意味着μc/os-ii总是运行就绪条件下优先级最高的任务。
3.5 多任务
μc/os-ii可以管理64个任务,然而,目前保留8个给系统。应用程序最多可以有56个任务。每个任务的优先级必须不相同的,这意味着μc/os-ii不支持时间片轮转调度法(round-robin scheduling)。该调度法适用于调度优先级平等的任务。
3.6 可确定性
全部μc/os-ii的函数与服务的执行时间的可确定性。也就是说,全部μc/os-ii的函数调用与服务的执行时间是可知的。进而言之,μc/os-ii系统服务的执行时间不依赖于应用程序任务的多少。
3.7 任务栈
每个任务有自己的单独的栈,μc/os-ii允许每个任务有不同的栈空间。以便压低应用程序对ram的需求。使用μc/os-ii的栈空间校论文联盟http://验函数,可以确定每个任务到底需要多少栈空间。
3.8 系统服务
μc/os-ii提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存的申请与释放、时间相关函数等。
3.9 中断管理
中断可以使正在执行的任务暂时挂起。如果优先级更高的任务被该中断唤醒。则高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255层。
4 结语
本章概述了嵌入式操作系统,从嵌入式操作系统的组成和主要工作原理进行了深入的说明,给出了选择操作系统的几个重要依据,并且针对市场上流行的μc/os-ii操作系统的特征进行了系统的说明,对于初步涉入嵌入式领域的读者起到了抛砖引,玉的作用。转贴于论文联盟 http://