操作系统实验二实验报告
基本信息
实验题目
线程和进/线程管道通信实验
王召德
2015-4-9
实验内容简要描述
l通过 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> 2)
f(y)=1 (y=1,2)
请编程建立 3 个并发协作进程,它们分别完成 f(x,y)、f(x)、f(y)
intelPC
报告的主要内容l
根据上面例子提示,建立一个进程并生成两个子进程,分别把x,y通过管道通信传递给子进程1和子进程2l,子进程1计算出f(x)回传给父进程,子进程2计算出f(y)回传给父进程,父进程对f(x),f(y)求和得到f(x,y)
无l
无
无l
无
实验过程和结果l
1学时l
在调试过程中,两个子进程id搞错导致发送数据错误l
无
实验的总结
根据实验可以发现进程间可以通过通信协作完成任务;进程协作可以通过共享内存和消息传递的方式通信,此实验通过消息传递的方式进行通信,其特征是通信过程是同步的。进程通信是通过管道进行通信,管道是采用阻塞机制,一方发送未被读取便产生阻塞,一方接受时管道没有信息则产生阻塞,从而达到同步。
附录
程序源代码
#include <>
#include <>
#include <>
int f(int a);
int g(int b);
int main(int argc, char *argv[])
{
int x,y;
printf("请输入x,y的值:\n");
scanf("%d,%d",&x,&y);
int pid1,pid2;
int pipe1[2]; //存放第一个无名管道标号
int pipe2[2]; //存放第二个无名管道标号
int pipe3[2]; //存放第三个无名管道标号
int pipe4[2]; //存放第四个无名管道标号
// 存放要传递的整数
//使用 pipe()系统调用建立两个无名管道。建立不成功程序退出,执行终止
if(pipe(pipe1) < 0){
perror("pipe not create");
exit(EXIT_FAILURE);
}
if(pipe(pipe2) < 0){
perror("pi
操作系统实验二实验报告 来自淘豆网m.daumloan.com转载请标明出处.