欢迎来到天天文库
浏览记录
ID:37838983
大小:356.64 KB
页数:49页
时间:2019-06-01
《第五章 任务间通信》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第5章任务间通信第五章任务间通信前面我们介绍了,实时内核的主要部分是任务和任务地调度,这样内核中多个任务之间不可避免的存在相互协同的关系,来完成一定的内核功能。这种协同最直观的就是任务间相互通信。包括VxWorks等所有的嵌入式操作系统一般都会提供许多任务间通信的方法,通常包括:?共享内存,数据的简单共享。?信号量,基本的互斥和同步。?消息队列和管道,同一CPU内多任务间消息传递。?Socket和远程调用,任务间透明的网络通信。?Signals,用于异常处理。本节我们对于每一种机制,均从主要数据结构、功能和有关的资源配置等方面讲解,并且依然用Vx
2、Works为事例。希望通过本章的学习,读者能够了解实时多任务操作系统的同步、互斥与通讯机制的基本原理,以便在做具体应用开发时能够正确、合理地使用。5.1实时内核任务间通信机制一、任务之间的关系嵌入式实时多任务应用是由多个任务、多个中断处理过程以及嵌入式实时操作系统组成的有机整体。嵌入式实时操作系统为应用提供系统管理、底层的支持、协调任务和中断处理程序功能。操作系统任务之间的关系有:?相互独立:任务之间仅仅存在竞争CPU的资源,再无其它关联。?竞争除CPU外的其它资源(互斥):共享资源是多任务系统中主要关心的问题,在系统中,大多数的资源在某一时刻仅
3、能被某一任务使用,并且在使用过程中不能被其它任务中断。这些资源主要包括特定的外设、共享内存等。当CPU禁止并发操作时,那些包含了使用CPU之外的共享资源的代码就不能同时被多个任务调用执行。这样的代码称为“临界区域”。如果两个任务同时进入临界区域,将会产生意想不到的错误。?同步:协调彼此运行的步调。?通信:彼此间传递数据和信息,以协调完成某项工作。通信可以是在任务与任务之间,或中断服务程序(ISR)与任务之间。在嵌入式多任务应用程序中,一项工作的完成往往要通过多个任务或多个任务与多个中断处理程序共同完成。它们之间必须协调工作、相互配合,彼此还需要交
4、换信息。交换信息的方式一般采用:¾单向同步或通信。¾双向同步或通信。另外,在嵌入式多任务系统中,如果任务之间的通信信息较大,则相应的系统开销就大,他们之间的耦合程度较高;如果两个任务之间不存在信息的交换,其间的同步关系很弱,甚至不需要同步或互斥,则它们的耦合程度就低,系统的开销也就小。研究任务之间耦合程度的高低对于合理地设计应用系统和划分任务有很主要的作用。二、共享内存任务间最直接最明显的通信方法是访问共享数据结构,即不同的任务都可以访问同一地址空间。由于大部分嵌入式系统的任务共存于单一的线性地址空间,在多个任务间共享数据结构是非常容易的。因此,
5、共享内存为多任务提供了一种非常简单而且高效的通信机制。只要通信任务双方采用了协商一致的数据结构,包括各种类型的全局变量、双向链表、环行队列等复杂的数据结构,都可以被所用任务直接访问。一个例子如图5.1.1所示。为了方便编程,一般的嵌入式系统都定义了几种数据结构类型:线性缓冲、环行缓冲、连接链5-1第5章任务间通信等,这些类型可以被运行在不同上下文的代码引用。1、连接链连接链是一种双向连接的数据结构,例如VxWorks定义在tornadotargethstLib.h头文件中。VxWorks提供的LstLib库用于设置和控制连接链。这些函数允许
6、用户以多种方式操作一个链,提供以下几种操作。?在链中任意位置插入或删除节点。?在链尾增加一个节点。?链接两个链。?从一个链中提取一个子链。?删除并返回链首节点。?计算链中节点数。图5.1.2一个连接链图5.1.1多个任务间共享数据结构图5.1.2示意了一个连接链结构。由图可以看出,每个节点包含了一个指向前一个节点的指针和一个指向后一个节点的指针,所以这个链是双向连接的。因而连接链可以在任意环节增长和收缩,所以连接链是一种功能非常强大的数据结构。2、环形缓冲环形缓冲是一种环形缓冲数据库。定义在tornadotargethrngLib.h头文件
7、中。环形缓冲在用于任务和中断服务程序间传送字符时非常有用。环形缓冲大小固定,以先进现出方式工作。如图5.1.3所示。VxWorksrngLib库提供环形缓冲管理函数,实现以下功能:?创建和删除环形缓冲。?从环形缓冲取得字符。?向环形缓冲添加字符?以不同方式操纵环形缓冲。图5.1.3环形缓冲工作示意图但共享内存带来的问题是:当有多个读任务或多个写任务进行互斥访问时,就需要使用信号量来解决。三、互斥“互斥”即以某种手段来保证当一个进程在使用一个共享变量、共享地址或文件时,其它进程不能对这些资源同时做操作。例如当一个共享地址空间简单地用于交换数据时,为
8、避免竞争,需要对该内存的访问上锁,以保证访问互斥进行。实现资源互斥访问的方法很多,不同之处仅在于互斥的范围和程度。这些方法包括禁止中断、
此文档下载收益归作者所有