山大操作系统实验2.doc
《山大操作系统实验2.doc》由会员分享,可在线阅读,更多相关《山大操作系统实验2.doc(3页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精品文档,仅供学习与交流,如有侵权请联系网站删除操作系统实验报告线程和进/线程管道通信实验张咪 软件四班一、实验要求设有二元函数f(x,y)=f(x)+f(y)其中:f(x)=f(x-1)*x(x1)f(x)=1(x=1)f(y)=f(y-1)+f(y-2)(y2)f(y)=1(y=1,2)请编程建立3个并发协作进程,它们分别完成f(x,y)、f(x)、f(y)。二、实验目的通过Linux系统中线程和管道通信机制的实验,加深对于线程控制和管道通信概念的理解,观察和体验并发进/线程间的通信和协作的效果,练习利用无名管道进行进/线程间通信的编程和调试技术。三、实验环境实验环境均为Linux操作系统
2、,开发工具为gcc和g+。四、实验思路要实现三个函数,要创建三个进程,两个子进程和一个父进程。一个子进程实现f(x),另一个实现f(y)。因为f(x,y)=f(x)+f(y),所以在父进程和子进程间建立通信,子进程将当前值传给父进程,父进程进行计算。而且由于父进程的f(x,y)中的x和f(x)中的x一一对应,所以这些进程应该同步的并发向前走,否则f(x,y)的值就是错的。五、算法设计1.创建进程,每个子进程的执行代码段实现对应函数功能。2.建立父进程和子进程间的通信。由于管道的读写默认的通信方式为同步读写方式,即如果管道读端无数据则读命令阻塞直到数据到达,反之如果管道写端有数据则写命令阻塞直到
3、数据被读走。所以同步并发的问题可以通过管道实现。建立两个管道,pipe1和pipe2,f(x)通过pipe1向父进程写入f(x)的值。同理f(y)通过pipe2向父进程写入f(y)的值。父进程根据这两个值实现函数f(x,y)功能。六、实验过程:新建一个文件夹,在该文件夹中建立以下名为ppipe.c的C语言程序。编写代码,保存。输入gcc ppipe.c命令, 生成默认的可执行文件a.out。执行a.out:。执行并调试ppipe程序。七、调试及实验结果第一次编译时有很多拼写错误,错把perror打成prerror,不确定dowhile()语句的后面需不需要加分号,还漏掉了大括号,太粗心。一开始
4、错把pipe0和pipe1理解为管道1和管道2,后来经过仔细阅读实验指导,知道pipe0和pipe1指的是管道两端。pipe系统调用的语法为: #include int pipe(int pipe_id2); pipe建立一个无名管道,pipe_id0中和pipe_id1将放入管道两端的描述符 如果pipe执行成功返回0。. 出错返回-1.八、源代码#include#include#includeint main(int argc,char *argv) int pid1,pid2;/两个子进程的进程号 int pipe12;/两个无名管道标号 int pipe22; int x=1,y=1;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验
限制150内