当前位置:首页 > 进程通信 实验
大作业二 进程通信
姓名 学号: 班级:
日期:2015年7月
1 需求说明
(1) 掌握进程间通讯的编程方法;
(2) 加深对进程并发执行的理解;
(3) 学习利用消息队列和共享存储区实现进程通信的方法。
2 设计说明
(1)接收键盘输入进程
负责接收用户的键盘输入,并以适当的方式将由键盘获得的数据交给其它进程处理。
(2)显示进程
负责全部数据显示任务,包括键盘输入数据的显示和提示信息的显示。
(3)分发数据进程
将键盘输入的数据分为3类,即字母、数字和其它,并分别将字母写入文件letter.txt中,数字写入文件
number.txt中,除字母和数字外其它数据丢弃。
2.1 结构设计
1、 程序能以适当的方式提示用户输入数据;
2、 提示用户有数据被丢弃;
3、 全部的显示任务必须由显示进程完成;
4、 整个程序能够连续处理多组输入数据,直到用户输入“quit”字符串,整个程序结束;
5、 进一步要求:同时采用共享存储区和消息2种方法实现进程之间的通信,并比较这2种通信方法的利弊。 2.2 功能设计
1、 利用fork()函数创建2个子进程,用一个父进程和两个子进程完成上面的三个实验
任务,用子进程1实现分发数据任务,子进程2实现接受键盘输入任务,父进程实现全部的显示任务。
2、 同时通过共享存储区和消息队列两种进程通讯方式实现上面三个进程之间的同步和互斥。
3、 利用while()循环、kill()函数和signal()函数实现连续多组数据输入。
3 测试和使用说明
比较消息队列和共享存储区在消息通信机制中的数据传输的时间和性能: 由于两种机制实现的机理和用处都不一样,难以直接进行时间上的比较。如果比较其性能,应更加全面地分析。
3.1 使用说明
2、有关字符数组初始化函数的使用:
在本实验中频繁使用了memset()函数,且第二个参数均为’\\0’,是为了将每次从键盘输入的字符串都能存到一个空的字符数组中,以防止字符的重复和覆盖。
3、在本程序中,需要合理安排父进程和2个子进程的任务,由父进程来负责显示任务是最合理和最简单的情况,因为父进程与子进程在某些方面是共享的,无需另外启用消息通信机制。而且在实现多组数据的输入、显示和分发方面能实现很好的同步和互斥。
4、注意消息缓冲区的数据结构,主要用来存放需要发送或者接收的消
息
类
型
和
消
息
正
文
,
在
/usr/src/linux-2.4/include/linux/msg.h中描述如下:
共分享92篇相关文档