μCOS-邮箱机制的分析与改进-_第1页
μCOS-邮箱机制的分析与改进-_第2页
μCOS-邮箱机制的分析与改进-_第3页
μCOS-邮箱机制的分析与改进-_第4页
μCOS-邮箱机制的分析与改进-_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、第28卷第12期2004年12月信息技术I NFORM ATI ON TECH NO LOGYVO L.28NO.12Dec.2004COS-邮箱机制的分析与改进丁国超,李全利(哈尔滨理工大学计算机与控制学院,哈尔滨150080摘要:COS-是源码公开的实时操作系统,在嵌入式系统中应用广泛。对于实时操作系统,任务间通信是一个影响系统性能的重要因素,所以邮箱机制的分析和研究有重要的意义。在研究COS-邮箱机制的基础上提出了一个邮箱查询的方法,使得邮箱查询的安全性得到保证。关键词:通信机制;实时操作系统;邮箱;消息中图分类号:TP31612文献标识码:A文章编号:1009-2552(200412-

2、0053-03 Analysis and improvement ofCOS-m ailbox mechanismDI NG G uo2chao,LI Quan2li(H arbin U niversity Of Science and T echnology,H arbin150080,ChinaAbstract:COS-is a real-time operating system with open s ource code,used extensivly in the embed2 ded system.T o the real-time operating system,the co

3、mmunication am ong the tasks is an im portant factor of in fluencing systematic function,and studying the mechanism of the mailbox has im portant meaning.This text puts forward one method of mailbox inquire which makes the security of mailbox inquiry get the assurance on the basis of studying mechan

4、ism of the mailbox ofCOS-.K ey w ords:communication mechanism;RT OS;mailbox;message0引言在实时操作系统中1,任务间或中断服务与任务间经常需要信息交换。这种信息交换被称为任务间通信。经验表明,任务间通信的好坏是影响实时操作系统实时性的一个关键因素。因此,改进任务间通信的方法是提高实时操作系统实时性的一个主要途径2。本文对实时操作系统COS-的邮箱机制上进行了阐述,并提出了一个邮箱查询的方法,从而使其获得更好的性能3。1邮箱机制的分析1.1与邮政系统的比较为了能够将对邮箱机制的阐述形象化,不妨将COS-的邮箱与现实

5、中的邮政系统进行对比。在现实邮政系统中,一次信件的传递有2个邮箱存在,一个是公用的发件邮箱,一个是私用的收件邮箱,邮递员完成2个邮箱之间的传递。收信人从邮箱中取邮件或发信人向邮箱里发邮件。为了使收信人和邮递员对信件进行识别,信件上还必须写明收件人和发件人地址。在COS-的邮箱通信中,完成一次2个任务间的消息传递,只需要一个邮箱,并且邮箱中只能存放一个消息。在消息没有取走前,无法往邮箱里存放新的消息。与邮政系统的另一个不同点是,邮政传送中邮箱存放和传递的是信件内容本身,COS-只是存放和传递消息内容缓冲区的指针。收稿日期:2004-09-01作者简介:丁国超(1980-,男,哈尔滨理工大学硕士研

6、究生,研究方向为嵌入式系统。35假设系统中2个任务只使用一个邮箱,那么,通信只能是实现简单ARQ协议,即无窗口的半双工通信。在COS-中,调度系统不能自动通知某个任务邮箱中已经有消息,需要任务主动去取邮件(调用函数OS MboxPend(,这种情况与邮政系统中的平信传递非常相似。邮局负责将所谓平信放入邮箱,但并不通知收信人,如果我们一直未开邮箱,那么邮件就不会被取走。在很多应用中,人们希望一种类似邮政快件的通信机制,在有信件后,收信人应自动并立即得到通知,而不同于平信机制,既使一年中只有一封信,每天也都要开一次信箱。另外,对于同一邮箱的取信操作和发信操作,从时间上有两种情况,即先发后取和先取后

7、发。在先取后发的情况下,取信任务在取不到信件后会进入挂起状态,同时进行登记,调度系统可以在另一任务发信后,自动调度事先取信的任务立即执行。这好像在取信未果时在邮箱里给邮递员留个便条,让他在信来时给自己挂个电话。1.2邮箱的操作过程COS-邮箱通信的过程首先建立一个数据缓冲区,即创建邮箱。一个系统中或者一个任务可以建立多个邮箱,不同邮箱通过邮箱指针来识别,该指针在建立邮箱时产生。邮箱由使用邮箱的任务函数建立,也可在系统初始化函数中建立,邮箱一旦建立,建立后将得到“OS E VE NT”类型的结构指针,任务函数通过该指针可对邮箱进行存取操作。一个系统中可以存在多个邮箱,对于接收消息的任务函数来说,

8、应该知道从哪个邮箱中取消息,邮箱的识别是创建邮箱时“OS MboxCreate(”函数的返回值来得到的。互相发送和接收消息的2个任务使用同一个全局变量(“OS E VE NT”类型来标识一个邮箱。从两个任务存取邮箱操作的时间先后来看,有两种情况,分别为先发后取与先取后发。前一种情况较为简单。如果是后一种情况,则取消息的任务会因为取不到消息而进入挂起状态,如图1所示。同时在一个被称为“事件链表”的数据结构中进行登记。这样,当发送消息时,函数会自动检查该“事件链表”,发现已经有任务等待该消息,则会立即执行它。1.3邮箱数据结构和变量和邮箱相关的数据结构主要是“OS E VE NT”, 另图1先收后

9、发时的任务挂起外一个结构“OS M BOX DA T A”在函数中作为局部变量使用。此外,在先收后发的情况下,也使用了结构“OS T C B”的“OST C BMsg”分量来存储消息指针。邮箱消息处理的数据结构如下定义如下:typedef structv oid3OSEventPtr;3消息指针3I NT8U OSEventTblOS E VE NT T BL SIZE;3所有等待某个事件的任务列表3I NT16U OSEventCnt;3信号量事件的使用数量3I NT8U OSEventT ype;3邮箱事件-OS E VE NT TY PE M BOX,消息列表时间-OS E VE NT

10、TY PE Q信号量事件-OS E VE NT TY PE SE M3I NT8U OSEventG rp;3等待某个事件的任务所属组号3OS E VE NT;该结构在COS-中被称为“事件”,原因是不仅用于邮箱消息,也用于任务之间的事件通知,所以定义了一些其他变量,对于邮箱通信,只需要其中的“OSEventPtr”、“OSEventTbl”和“OSEventG rp”3个域就可以了。1.4邮箱的容量在邮箱创建时,系统并不分配邮箱的大小,邮箱的存储空间实际上是发信任务定义的。消息传递过程中,只传递所发消息的指针,函数OS MboxP ost(将消息指针传递给“OS E VE NT”的“OSEv

11、entPtr”域。对于使用消息的任务函数来说,由于是指针传递,使用局部变量来存储发送消息,消息可能会在被收到前消失。所以,建议用全局变量来存储发送消息。1.5邮箱消息的通知机制“OSEventTbl”、和“OSEventG rp”变量用于记录任45务在等待邮箱消息或者其他事件,记录的方式和就绪表“OSRdyTbl”、“OSRdyG rp”是一致的,查找方式也一样,使用了“OS UnMapTbl”映射表。下面代码说明了“T ask1(“T ask2(”2个任务间的邮箱通信过程,在这里,使用了两个邮箱实现了全双工的应答式通信:v oid T ask1(v oid3datachar txmsg;I

12、NT8U err;data=data;txmsg=A;for(;while(txmsg<=ZOS MboxP ost(T xMbox,(v oid3&txmsg;3发消息到T xMbox邮箱中3OS MboxPend(AckMbox,0,&err;3从邮箱“AckMbox”中取一个消息3txmsg+;txmsg=A;v oid T ask2(v oid3datachar3rxmsg;I NT8U err;data=data;for(;rxmsg=(char3OS MboxPend(T xMbox,0, &err;3从“T xMbox”邮箱中取消息3PC DispC

13、har(70,18,3rxmsg,DISP FG ND YE LLOW+DISP BG ND RE D;OST imeDlyH MS M(0,0,1,0;OS MboxP ost(AckMbox,(v oid31;3发送一个消息到“AckMbox”31.6需要的邮箱数量需要的邮箱数量和2个因素相关,一个是任务的数量,二是任务之间的通信要求,后者比较复杂,可以归纳为以下几点:单工通信还是双向通信。是否每个任务之间均需要两两通信。对于双向通信,是连续无窗口的,还是应答式的(发信者在收到对方应答后才发下个消息。在一般情况下,为每个任务申请一个邮箱就可以满足任意任务之间的通信要求,也就是说,邮箱个数等

14、于任务个数,任务发消息时,应使用接收任务的邮箱,邮箱的I D号(OS E VE NT指针和任务是对应的。2关于邮箱查询的一个方法在COS-中经常有应用程序需要查询邮箱当前的状态,在此实时操作系统中,查询函数就能实现此功能,很显然,查询的意思就是只要能够看到邮箱当前的状态就可以,而不需要改动邮箱中消息的内容。在此系统的查询函数中,查询邮箱的指针和消息创建者的指针一样都能够指向消息,从而能够修改消息。如果这样,消息中的内容就有可能遭到破坏。如果能够使查询邮箱的指针每次指向的并不是消息的原本,那样,就会将消息有效的保护起来,使其不能够被查询邮箱的指针所修改。实现保护消息的方法是,如果能够使查询邮箱的指针每次只能指向所要查询消息的一个副本,也就是说,邮箱中有消息时,系统应自动复制出一个该消息的副本,并且使查询邮箱消息的指针指向这个副本。这样,邮箱中的消息的原本查询邮箱的指针便接触不到,从而,邮箱中的

温馨提示

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

评论

0/150

提交评论