欢迎来到天天文库
浏览记录
ID:26245840
大小:408.50 KB
页数:8页
时间:2018-11-25
《进程和进程管道通信实验》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、操作系统实验报告实验题目:线程和进/线程管道通信实验学号:201000301161日期:2012年04月12日班级:软件10级(1)班姓名:盛宇帆实验目标通过Linux系统中线程和管道通信机制的实验,加深对于线程控制和管道通信概念的理解,观察和体验并发进/线程间的通信和协作效果,练习利用无名管道进行进/线程间通信的编程和调试技术。实验要求设有二元函数f(x,y)=f(x)+f(y)其中:f(x)=f(x-1)*x(x>1)f(x)=1(x=1)f(y)=f(y-1)+f(y-2)(y>2f(y)=1(y=1,2)请编程建立3个并发协作进程,
2、它们分别完成f(x,y)、f(x)、f(y)实验的软硬件环境CPU英特尔酷睿i7四核2.53GHz主板LENOVO-英特尔HM65(CougarPoint)[B3]内存RamaxelTechnology4GDDR3SDRAM1333MHz双通道显卡ATIMobilityRadeonHD6500M主硬盘希捷500GB声卡HighDefinitionAudioController[B3]网卡英特尔WiFiLink1000BGN实验思路本实验的设置首先要参考到实验一中的协同进程运行。首先创建3个子进程,分别处理f(x)、f(y)、f(x,y)。由
3、于f(x)和f(x,y)、f(y)和f(x,y)之间需要交换数据,参考实验手册可以发现:管道是半双工的,所以需要4个管道。再加上管道默认的同步方式是同步读写,所以可以建立低些的循环,进行运算。实验的模型描述1、进程创建2、管道通信:主要数据结构分析说明intpid1,pid2,pid3;创建将要生成的3个进程号intpipe1[2];传递X数据的无名管道标号intpipe2[2];传递y数据的无名管道标号intpipe3[2];传递fX数据的无名管道标号intpipe4[2];传递fy数据的无名管道标号intx,y;存放自变量intx_ma
4、x=10;inty_max=10;存放自变量的最大值intfx,fy;存放函数值intfx_t;存放f(x-1)intfy_a;存放f(y-2)intfy_b;存放f(y-1)实验投入的实际学时数2+4个学时(1个学时差不多1小时)2个小时是在实验室的,4个小时是课余的调试排错过程的记录调试中的错误,这个怎么说呢?由于看题目没有仔细看。将f(x)函数的运算式看成①x=1;f(x)=1②x>1;f(x)=x*(x-1)所以测试的结果一直和别人的答案不一样,最后经过仔细检查,才发现这个极其粗心的错误。多种方式探测结果的记录(图片可以放大看)(图
5、片可以放大看)实验结果的分析综合首先进程3向管道1中写入x=1,进程1从管道1中读取x进行运算,然后将fx向管道3中写入。然后循环将y=1~10依次写入管道2,进程2从管道2中读取y然后进行运算,将fy向管道4写入,进程3从管道4读取fy然后运算。进程3和进程2之间的循环读取完毕后。X加1存入管道1。继续一个新的循环。实验中遇到哪些问题和解决的办法问题就是f(x)、f(y)的运算。需要考虑到f(x-1)、f(y-1)一类的。最后的解决办法,就是定义几个临时变量用于存放,运算后更新数值。实验结果达到设计目标的程度100%,我肯定还可以进行哪些
6、改进暂时没有想到,如果有的话,就是,单独输出f(x),f(y)。之后再输出f(x,y)。实验得到哪些收获和启发熟悉了Linux的进程创建过程,和进程间的调度。父子进程的执行顺序。熟悉了进程间通信。学会使用管道传递消息。参考文献1、操作系统概念(第七版)郑扣根翻译2、C程序设计(第四版)谭浩强著3、操作系统实验指导书2012版张鸿烈著程序源代码/**Filename:ppipe.c*Copyright:(C)2012bysyhily*Function:利用管道实现在三个并发子进程间的消息通信*/#include#includ
7、e#include#include//进程自定义的键盘中断信号处理函数typedefvoid(*sighandler_t)(int);voidsigcat(){}intmain(){intpid1;intpid2;intpid3;//创建将要生成的3个进程号intpipe1[2];//存放X数据的无名管道标号intpipe2[2];//存放y数据的无名管道标号intpipe3[2];//存放fX数据的无名管道标号intpipe4[2];//存放fy数据的无名管道标号intx;int
8、y;//存放自变量intx_max=10;inty_max=10;//存放自变量的最大值intfx;intfy;//存放函数值intfx_t;//存放f(x-1)intfy_a;
此文档下载收益归作者所有