实验三-进程通讯实验报告.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验三 进程通讯实验报告 【姓名】 【学号】 【实验题目】进程通讯——消息队列与共享存储区 【实验目的】 掌握进程间通讯的编程方法; 加深对进程并发执行的理解; 学习利用消息队列和共享存储区实现进程通信的方法。 【实验内容】 设计一个多进程并发运行的程序,它由不同的进程完成下列工作: (1)接收键盘输入进程 负责接收用户的键盘输入,并以适当的方式将由键盘获得的数据交给其它进程处理。 (2)显示进程 负责全部数据显示任务,包括键盘输入数据的显示和提示信息的显示。 (3)分发数据进程 将键盘输入的数据分为3类,即字母、数字和其它,并分别将字母写入文件letter.txt中,数字写入文件number.txt中,除字母和数字外其它数据丢弃。 【实验要求】 程序能以适当的方式提示用户输入数据; 提示用户有数据被丢弃; 全部的显示任务必须由显示进程完成; 整个程序能够连续处理多组输入数据,直到用户输入“quit”字符串,整个程序结束; 进一步要求:同时采用共享存储区和消息2种方法实现进程之间的通信,并比较这2种通信方法的利弊。 【实验方法】 利用fork()函数创建2个子进程,用一个父进程和两个子进程完成上面的三个实验任务,用子进程1实现分发数据任务,子进程2实现接受键盘输入任务,父进程实现全部的显示任务。 同时通过共享存储区和消息队列两种进程通讯方式实现上面三个进程之间的同步和互斥。 利用while()循环、kill()函数和signal()函数实现连续多组数据输入。 【程序结构】 ·数据结构:消息队列、字符数组; ·程序结构:顺序结构、if-else分支结构和while循环结构; ·主要算法:无特别算法 【实验结果】 1、有代表性的执行结果: [stud13@localhost stud13]$ cc ipc.c [stud13@localhost stud13]$ ./a.out Please input a line: ∟operatingsystem01234-=,. Your message is: operatingsystem01234-=,. The characters deserted are: -=,. Please input a line: ∟xushengju6651001!@#$%^*() Your message is: xushengju6651001!@#$%^*() The characters deserted are: !@#$%^*() Please input a line: ∟Hello123 Your message is: Hello123 Please input a line: ∟quit [stud13@localhost stud13]$ cat letter.txt OperatingsystemxushengjuHello[stud13@localhost stud13]$ cat number.txt 012346651001123[stud13@localhost stud13]$ 2、结果分析及解释: 在创建子进程1时,由于先返回子进程的ID号,msgrcv(msgid,msg,BUFSIZE,0,0)一直都是非0值,故循环等待。接着返回父进程ID,父进程负责全部的显示任务,先提示用户输入“Please input a line:”,然后等待子进程2的16信号所以当子进程2负责从键盘接收字符,当输入“operatingsystem01234-=,.”后,由子进程2发送消息(内容为:operatingsystem01234-=,.)给子进程1,由子进程1实现分发任务,将字符输出到文件“letter.txt”,将数字输出到文件“number.txt”,将其他字符写到“抛弃字符共享存储区array”并将从消息队列中读取的字符串写到字符共享存储区addr中,再向父进程发送16信号,实现进程之间的同步;之后由父进程接收16信号后,从addr共享存储区中获取由键盘输入的字符串,并由终端输出显示,若有字符丢弃,同时也提醒用户有哪些字符被丢弃了,显示到终端。通过while()循环,实现多组数据输入并显示和分发写入文件。当用户需要退出时,从终端输入”quit”,所有子进程退出,由父进程断开和共享存储区的附接并删除消息队列,之后也退出。 【问题分析】 实验中出现的问题及解决办法: 1、比较消息队列和共享存储区在消息通信机制中的数据传输的时间和性能: 由于两种机制实现的机理和用处都不一样,难以直接进行时间上的比较。如果比较其性能,应更加全面地分析。

文档评论(0)

js1180 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档