嵌入式操作系统_第1页
嵌入式操作系统_第2页
嵌入式操作系统_第3页
嵌入式操作系统_第4页
嵌入式操作系统_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

1、4嵌入式操作系统嵌入式操作系统比其他PC操作系统是嵌入式系统设计的灵魂,其出现大大提高了嵌入式系统开发的效率。在嵌入式开发中,操作系统不仅大大减少了系统开发工作的总量,而且提高了嵌入式系统软件的可移植性。近10年来,嵌入式操作系统的迅速发展,从支持8位微处理器到支持16位、32位和64位微处理器。从支持单个品种的微处理器芯片到支持多个品种的微处理器芯片,我们不仅提供内核,还提供其他功能模块,如文件系统、TCP/IP网络系统和窗口图形系统。目前,实时嵌入式操作系统主要分为商用型和免费型两种。商用实时操作系统功能稳定可靠,提供完整的技术支持和售后服务,但价格往往很贵。免费实时操作系统在价格方面有很

2、大优势。本章从操作系统的基本概念开始,介绍操作系统的进程、任务、内核、调度、通信、同步和嵌入式实时操作系统的相应特性。详细介绍了应用最广、应用最广的嵌入式实时操作系统的结构、特点和移植方法。这包括免费的c/OS-、CLinux、商用WinCE等。4.1操作系统的基本概念4.1.1操作系统的结构和功能为了满足嵌入式应用程序,嵌入式实时操作系统可以根据实际应用环境的要求裁剪和重新配置内核。通常,实时操作系统总是由几个重要部分组成,包括具有体系结构的实时内核、网络组件、文件系统和图形用户界面,如图4.1所示。图4.1嵌入式实时操作系统的体系结构如图4-1所示,操作系统除了管理作业、安排作业外,还提供

3、了很多其他服务。嵌入式操作系统通常只包含操作系统的内核(或微内核),其他模块(如网络模块、图形用户界面、通信协议)可以根据实际需求单独选择。大多数内置操作系统通常需要提供多任务管理、内存管理和外围资源管理等功能,例如I/O设备、通信端口等。4.1.2多进程和多线程许多嵌入式系统不仅仅是执行功能。例如,在电话响应系统中,通话信息记录和用户仪表板操作在逻辑上不仅是不同的操作,而且完成速度也不同,因此应定义为不同的操作。这些不同的任务构成了答录机系统功能的不同部分,引入了流程的概念,以满足组织的程序结构需要,从而完成多个任务。一个进程可以简单地认为是一个程序的唯一执行。进程按顺序运行,CPU一次只能

4、运行一个进程。但是,一旦确定了一个进程的整体状态,CPU就可以停止运行当前进程,并强制运行其他进程。您可以更改程序计数器,使其指向CPU中新进程的代码,同时将新进程的数据移动到寄存器和主存储库,以执行进程切换。这允许多个进程同时存在于CPU上。在嵌入式系统中,一个过程的典型形式是线程(图4.2)。线程在CPU寄存器中有一组不同的值,但在一个主存储空间中共存。线程广泛用于嵌入式系统(即操作),从而避免了存储管理单元的复杂性,并减少了存储单元的消耗。图4.2进程和线程的关系4.1.3任务在嵌入式系统中,一个任务也称为线程,是一个在运行时可以认为CPU完全属于该程序本身的程序。在实时应用程序的设计过

5、程中,必须考虑如何将应用程序功能合理地划分为多个任务,使每个任务成为整个应用程序的一部分。每个任务都被赋予具有唯一CPU寄存器集和堆栈空间的优先级(参见图4.3)。每个任务都有优先级,任务越重要,优先级越高。在大多数内核中,任务的优先级由用户决定。应用程序运行时任务优先级保持不变称为静态优先级。在静态优先级系统中,所有操作及其时间约束在程序编译时都是已知的。因此,如果任务的优先级在应用程序运行期间是可变的,则称为动态优先级。通常,每个操作都是无限循环,可能位于图4.4所示的五种状态之一。1)休眠(Dormant):表示操作驻留在内存的程序空间中,不能由多任务内核调度。2)就绪状态(Ready)

6、:因为作业已准备好运行,但优先级比正在运行的作业低,或暂时无法运行。3)运行状态:表示作业正在CPU控制下运行。基于优先级调度的实时内核总是运行具有最高优先级就绪状态的作业。4)“Pending(挂起状态)”:也称为“Waiting(等待事件状态)”,这意味着作业正在等待事件发生(例如,等待到外围设备的I/O操作、等待预定脉冲的到达、等待超时信号的到达等)。正在运行的作业处于自行暂停状态,等待调用延迟函数或事件发生。图4.3多任务堆栈和CPU寄存器图4.4作业状态转换图表5)中断状态(Interrupt):中断发生时,CPU提供中断服务,原始执行中的工作暂时未执行,进入中断状态。4.1.4切换

7、作业“Context Switch(内容切换)”表示CPU寄存器内容切换。如果多任务内核决定运行其他任务,它将存储正在运行的任务及其当前状态,即当前CPU寄存器的所有内容。内核将这些内容存储在操作的当前状态存储中,即该操作的自身堆栈区域(此过程称为“堆栈”)。堆栈作业完成后,将要执行的作业的当前状态从该作业的堆栈区域加载到CPU寄存器(此进程称为“脱离堆栈”)中,然后开始执行此作业。这将完成一次任务切换。工作转换过程增加了应用程序的额外负载,CPU的内部寄存器越多,额外负载就越重。操作切换所需的时间取决于进入堆栈的CPU寄存器数。4.1.5内核在多任务系统中,内核管理各个任务或为每个任务分配C

8、PU空间,并负责任务之间的通信。内核提供的默认服务是操作切换。使用实时内核,实时内核可以将应用程序分成单个任务,在实时内核中进行管理,从而大大简化了应用程序系统设计。内核本身也增加了应用程序的额外负载,代码空间增加了ROM的使用量,内核本身的数据结构增加了RAM的使用量。但是更重要的是,每个任务都必须有自己的堆栈空间,此占用内存相当强大。内核本身的CPU占用时间通常在2到5个百分点之间。因为单芯片微型计算机的RAM非常有限,所以通常无法运行实时内核。实时核心通过提供基本系统服务(例如信号量管理、邮箱、消息队列、延迟等),进一步提高CPU利用率。一般来说,用户不想在使用实时内核设计系统后,再回到

9、前面后台系统设计的方式。4.1.6信号量信号量用于实现任务和任务之间、任务和中断处理程序之间的同步和互斥。信号量通常分为用于解决互斥问题的互斥信号量、用于解决同步问题的双值信号量和用于解决资源数量问题的计数信号量。在这里,互斥的信号量比较特殊,可能会出现反转优先级的问题。信号量允许一定数量的操作同时访问共享资源。信号量仅在要使用一种资源的所有任务中使用相同的信号量时起到保护资源的作用,如果任何任务不使用该信号量直接访问资源,信号量就不能保护资源。通常,在给定时间内,信号量设置为最多只有一个任务可以访问资源,这在二值模式下称为信号量。在此模式下,信号量的数量不是0或1,这在同步对互斥或共享数据的

10、访问时很有用。受信号量保护的代码区域也称为“临界区域”。互斥时,信号量初始化为1,表示当前没有进入“临界区域”的操作,但最多只能有一个操作进入“临界区域”。因此,想进入“临界区域”的第一个任务必须获得信号量,所有其他任务必须等待。但是,如果当前位于“临界区域”的作业超出了“临界区域”,将解除信号量,第一个等待的作业可能进入“临界区域”。这个值的信号量叫做互斥锁信号量。如果为同步使用两值信号量,则初始化为0,表示同步的事件尚未发生。一个操作请求信号量,直到此同步事件发生。当另一个作业到达同步点时,关闭信号量(将其值设置为1)意味着发生了同步事件以唤醒排队的作业。信号量模式中最常见的信号量是控制多

11、个共享资源的使用。使用其中一个信号量,多个操作可以同时访问同一资源的多个实例,因此信号量初始化为n(非负整数)。n是共享资源的数量。4.1.7调度作业核心的主要责任之一是确定执行顺序。大多数实时内核基于优先级调度方法。每个任务都根据重要性指定了优先级。根据优先级调度规则,CPU始终首先运行具有最高优先级(就绪状态)的作业。但是,CPU何时可用于高优先级任务有两种情况:也就是说,取决于使用的是什么类型的内核,以及使用的是非抢占型还是抢占型内核。1.非抢占式内核非抢占内核要求每个操作都自行放弃CPU所有权。非抢占式调度也称为协作多任务,多个任务相互协作共享一个CPU。异步事件由中断服务处理。停止服

12、务可能会将优先级较高的任务从暂停状态更改为就绪状态。但是,在停止服务后,您将返回到原来停止的作业,在高优先级作业放弃CPU许可证之前,不会获得CPU许可证。非抢占式内核的优点之一是响应中断速度快。在任务级别,非抢占内核允许重新进入函数。每个作业都可能在其他作业中使用该函数,因此可以调用不担心数据损坏的非可重新进入函数。这是因为在每个作业运行之前,不释放CPU的控制。当然,再入函数本身不应试图放弃CPU控制权。使用非抢占式内核时,任务级别响应时间比后台系统快得多。此时,任务级别响应时间取决于最长的任务执行时间。非抢占式内核的另一个优点是,几乎不需要使用信号量来保护共享数据。正在运行的作业占用CP

13、U,而不必担心被其他作业抢占。但是这也不是绝对的。在某些情况下,信号量仍然值得使用。处理共享I/O设备时,必须使用互斥的信号量。例如,在使用打印机时,必须满足互斥条件。图4.5表示非抢占式内核的操作,如果在操作运行期间图4.5(1)中断出现,则CPU将通过中断向量图4.5(2)进入中断服务子例程,并且使服务子例程执行事件处理的图4.5(3)以上级别的操作进入就绪状态。中断服务完成后,中断返回命令图4.5(4),将CPU返回到原来中断的作业,执行该作业的代码图4.5(5),调用内核服务函数以释放CPU控制,将控制转移到内核中的更高优先级,将控制转移到就绪状态的作业此高优先级作业开始处理标识为服务

14、中断的事件图4.5(7)。图4.5非抢占内核非抢占式内核的最大缺点是响应时间。如果高优先级作业进入就绪状态,但尚未运行,则当前正在运行的作业可能需要很长时间才能释放CPU。与前后系统一样,无法确定非抢占核心的工作级别响应时间,无法知道最高优先级的任务何时可以获得CPU的控制,这完全取决于应用程序何时释放CPU。总之,非抢占核心允许各任务运行,直到该任务自愿放弃CPU的控制权。中断可能会干扰正在运行的作业。服务中断完成后,将CPU控制权返还给中断的作业。任务级别响应时间比以前的后台系统好得多,但业务软件中几乎没有非抢占式内核。2.预占内核如果系统响应时间很重要,请使用预占核心。因此,C/OS-I

15、I和商业销售的大多数实时核心都是抢占式核心。优先级最高的作业准备就绪时,始终由CPU控制。如果正在运行的作业导致高优先级作业进入就绪状态,则当当前作业的CPU许可证丢失或暂停时,高优先级作业将立即获得对CPU的控制。如果服务中断子例程使高优先级任务进入就绪状态,则中断完成后,中断的任务将暂停,高优先级任务开始运行。如图4.6所示。图4.6抢占内核预占核心可让CPU控制何时执行最高优先顺序的工作。使用预占核心,优化任务级响应时间。使用预占核心时,应用程式不应直接使用不可重复进入函数。在调用不可重入函数时,如果要满足互斥条件,则可以使用互斥的信号量实现这一点。调用非负载函数时,优先级较低的作业CP

16、U的使用被优先级较高的作业取消,非负载函数中的数据可能会损坏。概括地说,抢占核心总是首先运行处于就绪状态的优先级较高的任务,中断服务程序可以抢占CPU,并在此时运行优先级最高的任务,直到中断服务完成(不一定是中断的任务)。任务级别系统响应时间优化,可见。4.1.8特派团之间的通信在多任务实时系统中,一个任务可能需要多个任务或多个任务与多个中断处理程序一起完成。那么,他们之间必须协调工作,相互合作,必要时交换信息。实时内核通过提供操作之间的通信和同步机制解决了这个问题。在多任务实时系统中,经常需要在任务之间或服务中断与任务之间交换信息,称为任务间通信(Inter Task Communication)。任务之间的通信有两种方法:共享数据结构和消息机制。1.共享数据结构实现工作间通信的最简单方法是使用共享数据结构。尤其是当多个作业位于同一地址空间时。共享数据结构的类型可以是全局变量、指针、缓冲区等。使用共享数据结构时,必须保证独占使用共享数据结构。也就是说,必须确保执行每项任务或中断服务的子例程独占其数据结构。否则,竞争或数据实效性可能受损。因此,使用共享数据结构时,必须实现访问的互斥机制。共享数据结构操作的互斥方法通常是启用/禁用中断、禁止操作切换、信号机机制等。(1)开/关中断。用于数据共享保护的开/关中断意味着访问共享数据结构时,首先执行关闭操作

温馨提示

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

评论

0/150

提交评论