【操作系统】实验四:进程通信(二)【完整版实验报告】

本文介绍了如何利用消息缓冲队列进行进程间通信,重点讲解了msgget()、msgsnd()、msgrcv()、msgctl()等系统调用的使用。通过一个父子进程通信的例子,展示了消息队列在实际操作中的应用,并讨论了消息队列的同步机制和适用场景。实验结果显示,消息队列简化了进程同步,但可能不适合大量数据交换的场合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验四:进程通信(二)

实验目的:
学习如何利用消息缓冲队列进行进程间的通信,并加深对消息缓冲队列通信机制的理解。
实验内容:
(1) 了解系统调用msgget()、msgsnd()、msgrcv()、msgctl()的功能和实现过程。
(2) 编写一段程序,使其用消息缓冲队列来实现父进程和子进程之间的通信。

0.父进程先建立一个关键字为MSGKEY(如75)(即#define MSGKEY 75)的消息队列,然后等待接收类型为1的消息;
1.在收到请求消息后,它便显示字符串“serving for client ”和接收到的子进程的进程标识数,表示正在为子进程服务;
2.然后再向子进程发送一应答消息,该消息的类型是该子进程的进程标识数,而正文则是父进程自己的标识数。
3.子进程则向消息队列发送类型为1的消息(消息的正文为自己的进程标识数),以取得父进程的服务,并等待父进程发来的应答;然后显示字符串“receive reply from ”和接收到的父进程的标识数。
消息的结构为:
struct msgform{
long mtype; //消息类型
char mtext[1024]; //消息正文
};
思考:
(1)消息缓冲机制是否提供了发送进程和接收进程之间的同步功能?同步是如何进行的?
答:
首先进程同步的定义是:我们把异步环境下的一组并发进程因直接制约而互相发送消息、进行互相合作、互相等待,使得各进程按一定的速度执行的过程称为进程间的同步。
消息队列允许任意进程通过共享队列来进行进程间通信。并由系统调用函数来实现消息发送和接收之间的同步。从而使得用户在使用消息缓冲进行通信时不再需要考虑同步问题,使用相对方便。

(2) 消息缓冲机制有什么特点,它适合于何种场合?
答:
消息队列与管道方式的区别在于,消息队列可以实现多对多,并需要在内存中实现,而管道可以在内存或磁盘上实现。
消息队列中信息的复制需

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值