操作系统实验二、进程通信实验——f(x,y) = f(x) + f(y)

本文介绍了如何使用C语言编程实现基于管程的进程通信,以完成并发计算二元函数f(x,y) = f(x) + f(y)。实验涉及创建3个并发进程,分别处理f(x), f(y)和f(x,y),并提供了示例程序和独立实验的详细步骤。通过管程实现进程间互斥,确保正确计算。" 113320160,10294142,数据库面试题:SQLite查询实战与技巧解析,"['数据库查询', 'SQL', 'SQLite', '面试准备', '数据处理']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

设有二元函数 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)

示例程序

使用实验示例程序应实现一个并发的父子程序合作将整数 1 从 1 累加到 10 的功能。
打开命令行终端,新建一个文件夹。
命令:cd 创建路径
Mkdir myfirst3
在新建文件夹中建立以下名为 ppipe.c 的 的 C 语言程序
命令:vi ppipe.c
在这里插入图片描述建立项目管理文件 Makefile(其实后面会发现这个文件不建也可以)
在这里插入图片描述命令生成 ppipe.o 文件
在这里插入图片描述生成 ppipe 执行文件
在这里插入图片描述执行 pctl 程序
在这里插入图片描述

独立实验

请编程建立 3 个并发协作进程,它们分别完成 f(x,y)、f(x)、f(y)
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],f[y],f[x]+f[y],所以这里分别使用 3 个进程来进行这里的控制,首先创建一个子进程 1,用于计算 f[x],在父进程中再次创建一个子进程用于计算 f[y],由于程序的并发执行,可以分别设置两个管程,保证二者之间是互斥的,最后将二者相加即可。
pipe.c

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int f1(int x)
{
   
if(x==1)
{
   
return 1;
}
else
{
   
return f1(x-1)*x;
}
}
int f2(int y)
{
   
if(y ==1||y==2)
{
   
return 1;
}
else
{
   
return f2(y-1)+f2(y-2
### 实验准备 为了顺利开展Linux系统实验,需先完成一系列准备工作。确保拥有合适的实验环境至关重要。创建Linux虚拟机是一个有效的方法来构建这样的环境[^3]。 ```bash sudo apt-get update && sudo apt-get upgrade -y ``` 上述命令用于更新和升级已安装的包到最新版本,有助于保持系统的稳定性和安全性。 ### 基础操作练习 掌握Linux基本指令是进行更复杂实验的基础。通过熟悉命令行界面及其常用命令,能够更好地理解操作系统的工作机制。例如,`ls`, `cd`, `cp`, 和 `mv` 是文件管理不可或缺的部分;而诸如 `ps`, `top`, 或者 `htop` 则帮助监控正在运行的任务和服务状态[^1]。 ### 进程与线程控制 深入了解进程间通信(IPC)机制对于解决并发编程问题是必不可少的。特别是关于不同类型的互斥锁——如 PTHREAD_MUTEX_NORMAL, PTHREAD_MUTEX_ERRORCHECK, PTHREAD_MUTEX_RECURSIVE 及默认类型 PTHREAD_MUTEXT_DEFAULT 的特性,这些知识能增强对多线程应用程序设计的理解,并预防潜在的竞争条件或死锁定情况的发生[^2]。 ### 编写测试程序 尝试在Linux环境中编写简单的Java或其他语言编写的程序可以帮助巩固所学概念。利用Shell脚本自动化日常任务也是一个不错的选择: ```shell #!/bin/bash echo "Hello from shell script!" javac HelloWorld.java java HelloWorld ``` 此段代码展示了如何在一个Bash脚本中调用Java编译器编译源码并立即执行生成的应用程序。 ### 探索经典案例研究 最后,探索经典的计算机科学难题比如生产者-消费者模型或者哲学家就餐问题,不仅有趣而且实用。这些问题涉及到了复杂的同步逻辑,非常适合用来检验自己对线程管理和资源分配技巧的掌握程度。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值