首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

互斥与同步解决方法:消息传递

互斥与同步解决方法:消息传递

=进程通信的方式
---进程之间的通信内容包括两种类型:控制信息和大批量数据。
---低级通信:进程之间交换控制信息的过程
---高级通信:进程之间交换批量数据的过程
---进程之间同步与互斥是一种低级通信,用来控制进程执行速度。

=常用的进程通讯机制
+邮箱机制
+基于共享存储区方式
---生产者/消费者问题:生产者与消费者通过共享缓冲区,实现数据传递。属于基于共享存储区通信。
---这里的共享数据区属于每一个相互通信进程的组成部分,这种通讯方式不要求数据移动,一般用于本地通讯。
---对于远程通讯来说,每台计算机拥有各自的私有内存区,不易实现共享存储区的访问。
?如何通过共享存储区通讯
---通过程序设计来实现。程序员设计程序时,利用程序指令设置共享存储区,并处理通讯进程之间的同步问题,操作系统只需提供共享存储区。
---有操作系统在内存中划分出一块区域作为共享存储区。进程在通讯前向系统申请共享存储区中的一个分区。然后,申请进程把获得的共享存储分区连接到本进程上,此后便可像读/写普通存储器一样地读/写共享存储分区。该方式下,通讯进程之间的同步与互斥访问共享存储区可以有操作系统实现。
+消息传递方式

---进程之间通信的两条原语:
·Send(destination,message)
·Receive(source,message)
---消息传递的同步
·只当有一个发送进程发出消息以后,接受进程才能接收消息。
·即,当发送进程调用send原语发送消息时,若没有空闲的消息缓冲区,则发送进程阻塞,当接收进程调用receive原语接收消息时,如果没有消息可接收,则接收进程阻塞,直到一条消息到达。
---三种同步方式
·阻塞发送,阻塞接收:进程间的紧密同步
·不阻塞发送,阻塞接收;常用于服务进程为其他进程提供服务
·不阻塞发送,不阻塞接收
#不阻塞发送
&例如,当进程执行过程中需要打印输出,通常让打印任务排队等待,而请求打印的进程无需等待打印完成。即,每当进程需要打印时,都可以以消息形式发出请求,然后继续执行。
&“不阻塞发送”方式容易导致消息的无限发送。无限发送消息会消耗处理机时间,且消息需要占用内存的消息缓冲区,无限发送消息也会占用其他系统资源。
&设计并发进程时,若采用““不阻塞发送”方式,就必须在程序中考虑让接收进程发回应答消息,证实其是否收到消息,这将增加程序设计的难度。
#阻塞接收
&并发程序设计中常用该方式;
&当接收消息的进程未收到期望消息时,需要阻塞等待,直到消息到来。但是,如果消息丢失,或发送进程发送消息之前失败,则接受进程将永久阻塞。
&如果采用“不阻塞接收”方式,则可能因为接收方式的缘故,丢失消息。
#消息传递中的寻址
&寻址方式:直接寻址和间接寻址。
&直接寻址:send原语中必须指定目标进程的具体标识号
&receive原语中的source地址有两种处理方法:
1接收进程显示的指定发送进程标识号,这就要求接收进程必须事先清楚将接受那个进程发来的消息
2接收进程可以不必指定接收哪个进程的消息
继承事业,薪火相传
返回列表