实验 4:进程间通信(IPC)
实验目的
了解IPC通信中的信号、管道、消息、共享存储区的通信原理和基本技术 掌握linux环境中构造这些通信机制的方法和步骤;
熟悉在实现通信中使用的系统调用和编程方式,以及这类程序的调试和技巧。 实验内容
1、编写一个多进程使用信号通信的程序;
2、建立一个父子进程通信管道进行通信和程序;
3、构建客户进程和服务进程使用消息进行通信的机制; 4、用共享存储区方式实现多个进程的通信。
实验原理
8. 对信号的认识。
信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
可以使用系统自带的信号,用户也可以自己定义。
9. 对消息的认识。
消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。
10. 对管道的认识。
管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘
关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
11. 对共享内存的认识。
共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如:信号量配合使用,来实现进程间的同步和通信。
实验环境:
硬件环境:个人PC机电脑。软件环境:我是通过Telnet登陆一台已经安装linux操作系统的电脑进行如下实验,带编译软件GCC。
实验过程:
3. 进程间通信-信号方式的示例代码。
11 / 13
4. 进程间通信-消息方式的示例代码。
5. 进程间通信-管道方式的示例代码。
6. 进程间通信-共享内存的示例代码。
12 / 13
实验结果:
1. 信号传输的优点:
实现效率高,信号产生随机,事先不需要约定。 信号传输的缺点:
实现复杂,系统提供的信号类型有限,大多数信号需要系统权限才能使用。
2. 管道传输的优点:
所有的UNIX实现都支持, 并且在最后一个访问管道的进程终止后,管道就被完全删
除。
管道传输的缺点:
传递数据少。只能单向传输或只能在父子进程之间传输。
3. 消息传输的优点:
消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等
缺点。
消息的实现是一个多对多的关系,它允许一个或多个进程将消息发送到消息队列中,也允许一个或多个进程从消息队列中读出消息。
消息传输的缺点:
消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
4. 共享内存的优点:
效率高,同一块内存直接映射到多个进程。因而进程可以直接读写内存,而不需要任何数据的拷贝。传输数据量大。 共享内存的缺点:
代价高,要占用大量的内存。
实验总结:
系统的学习了linux进程通信的多种方式。对进程通信有了更深一步的了解。
13 / 13