消息传递
考试要求: 掌握     
知识路径:  > 嵌入式系统软件基础知识  > 嵌入式操作系统基础知识  > 处理器管理  > 任务间通信(共享内存、消息、邮箱、管道、信号等)  > 任务间通信


 
       消息是内存空间中一段长度可变的缓冲区,其长度和内容均由用户定义。从操作系统的角度来看,所有的消息都是单纯的字节流,既没有确切的格式,也没有特定的含义。对消息内容的解释是由应用来完成的,应用根据自定义的消息格式,将消息解释成特定的含义,如某种类型的数据、数据块的指针或空。
       消息传递指的是任务与任务之间通过发送和接收消息来交换信息。
       消息机制由操作系统来维护,包括定义寻址方式、认证协议、消息的数量等。一般提供两个基本的操作:send操作,用来发送一条消息;receive操作,用来接收一条消息。如果两个任务想要利用消息机制来进行通信,它们首先要在两者之间建立一个通信链路,然后就可以使用send和receive操作来发送和接受消息。
       任务之间的通信方式可以分为直接通信和间接通信两种。
       (1)直接通信。在直接通信方式下,通信双方必须明确知道与之通信的对象。采用类似下面的通信原语:
       .send(P,message):发送一条消息给任务P;
       .receive(Q,message):从任务Q那里接收一条消息。如果没有收到消息,可以阻塞起来等待消息的到来,也可以立即返回。
       在通信双方之间存在一条通信链路,该链路具有如下特征:
       .通信链路是自动建立的,由操作系统来维护;
       .每条链路只涉及一对相互通信的任务,每对任务之间仅存在一条链路;
       .通信链路可以是单向或双向的。
       (2)间接通信。在间接通信方式下,通信双方不需要指出消息的来源或去向,而是通过共享的邮箱(mailbox)来发送和接收消息,每个邮箱都有一个唯一的标识。采用类似下面的通信原语:
       .send(A,message):发送一条消息给邮箱A;
       .receive(A,message):从邮箱A接收一条消息。
       间接通信的特点:
       .对于一对任务,只有当它们共享一个公共邮箱时才能进行通信;
       .一个邮箱可以被多个任务访问,每对任务也可以使用多个邮箱来通信;
       .通信可以是单向或双向的。
       邮箱只能存放单条消息,它提供了一种低开销的消息传递机制,其状态只有两种:空或满。另外一种间接通信机制是消息队列。它与邮箱是类似的,但可以同时存放若干条消息,提供了一种任务间缓冲通信的方法。如下图所示,发送消息的任务将消息放入队列,而接收消息的任务则将消息从队列中取出。
       
       消息队列示意图
 

更多复习资料
请登录电脑版软考在线 www.rkpass.cn

京B2-20210865 | 京ICP备2020040059号-5
京公网安备 11010502032051号 | 营业执照
 Copyright ©2000-2025 All Rights Reserved
软考在线版权所有