山大操作系统实验二

山大操作系统实验二

ID:44149772

大小:62.00 KB

页数:10页

时间:2019-10-19

山大操作系统实验二_第1页
山大操作系统实验二_第2页
山大操作系统实验二_第3页
山大操作系统实验二_第4页
山大操作系统实验二_第5页
资源描述:

《山大操作系统实验二》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、山东大学软件学院实验报告实验题目:线程和进/线程管道通信实验实验目的:通过Linux系统屮线程和管道通信机制的实验,加深对丁线程控制和管道通信概念的理解,观察和体验并发进/线程间的通信和协作的效杲,练习利用无名管道进行进/线程间通信的编程和调试技术。硬件环境:CPU:P4/1.8MHZ内存:256MB硬盘:10GB软件环境:Ubuntu08.4-Linux操作系统Gnome桌而2.18.3BASH_VERSION二32.33⑴-releasegccversion4.1.2vi3.1.2gedit2.18.2OpenOffice2.3实验步骤:仁问题分析设冇二元函数f(x,y)

2、=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>2)f(y)=i(7=1.2)请编程建立3个并发协作进程,它们分别完成f(x,y)、f(x)、f(y)由问题分析可知应当用父子进程Z间的I•办作,父进程用于实现f(x,y),分别创建两个子进程用于实现f(x)、f(y),父子进程之间用管道进行通信。2、算法设计说明为实现进程间的通信、协作完成函数f(x,y)=f(x)+f(y),运用进程间通信,分别创建四个管道,用于父了进程间的通信read和write。一共创建了三个进程:一个父进程和两个子进程。结论分

3、析与体会:整个编写过程遇到了很多不懂的地方,犯了很多的错误。K管道的数量的选择在编写Z初不够明确,使得在后面编写时还耍进行修改,主要原因是分析时不够深入和细致。2、管道的通信端口定义不明确,致使在后面编写时错误始终得不到解决。3、函数编写错误。附录代码:#include#includevunistd.h>#includeintmain(intargc,char*argv[]){intpid1,pid2;//进程号intpipe11[2],pipe12[2];//存放第一、第二个无名管道标号,用于父子进程间通信intpipe21[2],pi

4、pe22[2];M放第三、第四个无名管道标号,用于父子进程间通信int乙f_x=1,f_y=1,f_y1,f_y2=1;〃存放要传递的整数〃使用pipe()系统调用建立两个无名管道。建立不成功程序退出,执行终止if(pipe(pipe11)<0){perrorf'pipelnotcreate");exit(EXIT_FAILURE);}if(pipe(pipe12)<0){perror("pipe2notcreate");exit(EXIT_FAILURE);}if(pipe(pipe21)<0){perror(npipe11notcreate'*);exit(EXIT_FA

5、ILURE);}if(pipe(pipe22)<0){perror(Hpipe12notcreate'*);exit(EXIT_FAILURE);}〃使用fork()系统调用建立第一个子进程,建立不成功程序退岀,执行终止if((pid1=fork())<0){perror(”processnotcreate*1);exit(EXIT_FAILURE);〃子进程号等于0表示子进程在执行,elseif(pid1==0){intx=1;//子进程1负责从管道12的0端读,管道11的1端写,〃所以关掉管道12的1端和管道"的0端。close(pipe11[0]);close(pipe

6、12[1]);〃每次循环从管道门的0端读一•个整数放入变量z屮,〃并对f_x计算后写入管道12的1端,直到f_x满足条件do{read(pipe12[0],&z,sizeof(int));if(z==1){//此处犯了一个简单错误,将赋值符号错用了f_x=1;//ls_x=f_x;}else{f_x=f_x*z;//ls_x=f_x;}printffchildl%dread:%d”,getpid(),f_x);write(pipe11[1],&f_x,sizeof(int));〃x++;}while(z<=7);〃读写完成后,关闭管道close(pipe11[1]);cl

7、ose(pipe12[0]);〃子进1程执行结束exit(EXIT_SUCCESS);}〃使用fork()系统调用建立第二个了进程,建立不成功程序退出,执行终止elseif(pid1>0){if((pid2=fork())<0){perror(Hprocessnotcreate11);exit(EXIT_FAILURE);}〃子进程号等于0表示子进程在执行,elseif(pid2==0){//inty=1;//intf_y1,f_y2=1;〃子进程负责从管道21的0端读,管道22的1端写,〃所以关掉管道

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。