目录

(1)操作系统实验2内容:

(2)完成方式:

(3)使用函数和功能:

1.pipe函数与有关的功能

2.pipe的返回值

3.pipe的参数

4.使用事项:

(4)实现代码

(5)实现效果


(1)操作系统实验2内容:

创建三个并行的进程,分别完成计算F(x),F(y),F(x,y)三个函数的计算

(2)完成方式:

实验环境:ubuntn22.04  vscode2023

函数计算:其中两个一维函数可以使用递归计算(fy即为斐波那契数列的计算方式,这两个函数可以使用dp的方式完成优化,这里因为数据量较小不再实现) , 计算二维函数需要使用管道通信,将前两个进程的数据通过管道发送到另一个管道中,实现进程的通信.

并行进程:三个并行进程建立方式是,每次建立子进程后,判断当前的进程是否为父进程,如果当前为父进程,则可以再创建一个进程,这就是三个并行进程的创建方式.

其实这就是fork函数的本质:当某个进程根据fork函数创建子进程的时候,会给根据这个函数创建的两个进程分别配一个返回值,父进程得到的返回值是大于0的,而子进程得到的返回值是0.

一个fork函数只能针对两个进程赋值,但是一个进程(比如父进程)可以得到很多fork函数的返回值

(3)使用函数和功能:

1.pipe函数与有关的功能

int pipe(int port[2]);

在cpp中,使用这样的方式创建管道,管道也是一种资源,不应该独属于某个进程.

 管道的特点就是只有管道为满的时候,才能读取.在管道为空的时候才能读入,不存在两个端口都开放的情况

在cpp中的体现为:只有用close关闭指定的端口,另一个端口才能正常工作:例如没有关闭管道输入端口,就从管道的输出端口读取数据,会发生阻塞

2.pipe的返回值

数值,当返回值为0的时候,代表这个管道成功创建

3.pipe的参数

是一个两个长度的整数数组,port[0]为管道的输出端口的表示(可以读出),port[1]为管道的输入端口的表示(可以写入)

当一个pipe创建成功的时候,端口的标识符会自动打入这个数组中

4.使用事项:

(1)读取时:要先关闭管道的写入端口,才能从输出端口进行读出

read函数的三个参数分别为:

close(port[1]);
read(port[0],数据,要传输的数据长度);

注意read的第二个函数要传入引用的形式

(2)输出时:大同小异

close(port[0]);
write(port[1],数据,要传输的数据长度);

(4)实现代码

#include <bits/stdc++.h>
using namespace std;
int fx(int x){if(x==1)  return 1;else      return fx(x-1)*x;
}
int fy(int y){if(y==1||y==2) return 1;else           return fy(y-1)+fy(y-2);
}
int main(int args,char * arg[]){// try to create a son_processint Fx[2];if(pipe(Fx)==0)   cout<<"pipe Fy is created"<<endl;int Fy[2];if(pipe(Fy)==0)   cout<<"pipe Fy is created"<<endl;//create a process as my first son processpid_t pid=fork();if(pid==0){// Fxclose(Fx[0]);int x;              cout<<"please input a number as x"<<endl;cin>>x;x=fx(x);write(Fx[1],&x,8);  cout<<"F(x)="<<x<<endl;}else if(pid>0){pid_t pid1=fork();    //create a process as my second son processif(pid1==0){//Fyclose(Fy[0]);int y;               cout<<"please input a number as y"<<endl;cin>>y;y=fy(y);write(Fy[1],&y,8);   cout<<"F(y)="<<y<<endl;}else if(pid1>0){//Fxyclose(Fx[1]);close(Fy[1]);int x,y;read(Fx[0],&x,8);read(Fy[0],&y,8);    cout<<"F(x,y)="<<x+y<<endl;}}return 0;
}

(5)实现效果

山东大学2023操作系统实验2相关推荐

  1. 山东大学软件学院操作系统实验1(关于环境)

    目录 1.写在前面 2.关于环境 3.关于函数和操作 4.具体代码 1.写在前面 2023年山东大学操作系统实验,第一次实验肥肠简单,压缩以后代码仅仅几行罢了 实验要求只是:创建一个父进程,然后创建子 ...

  2. 山东大学linux实验四CSDN,山东大学操作系统实验报告材料4进程同步实验

    <山东大学操作系统实验报告材料4进程同步实验>由会员分享,可在线阅读,更多相关<山东大学操作系统实验报告材料4进程同步实验(15页珍藏版)>请在人人文库网上搜索. 1.实用标准 ...

  3. 山东大学2022操作系统期末

    接力:山东大学2021操作系统期末 2022-2023山东大学计算机操作系统期末考试回忆版 简答题(4 × 10 points) (1)用户态,核心态是什么 (2)这种区分对现代操作系统的意义 (3) ...

  4. 山东大学2021操作系统期末

    2021-2022山东大学计算机操作系统期末考试回忆版 简答题(4 ×\times× 10 points) (1) 进程切换的时机 以及 哪些能抢先 (2) 好像是磁盘管理的一个题 忘记了 IO内核子 ...

  5. 山东大学软件学院操作系统课程设计Nachos-实验一

    说明:blog 中写到的这几个实验,不全面而且也不是上交实验报告的最终版本(是自己实验过程中用typora简单记录的笔记),完整内容(含代码+实验报告)可以通过(山东大学软件学院操作系统课设)下载,或 ...

  6. 山东大学软件学院操作系统课程设计Nachos-实验四-基本文件系统扩展

    说明:blog 中写到的这几个实验,不全面而且也不是上交实验报告的最终版本(是自己实验过程中用typora简单记录的笔记),完整内容(含代码+实验报告)可以通过(山东大学软件学院操作系统课设)下载,或 ...

  7. 山东大学软件学院操作系统课程设计Nachos-实验七-虚拟内存

    说明:blog 中写到的这几个实验,不全面而且也不是上交实验报告的最终版本(是自己实验过程中用typora简单记录的笔记),完整内容(含代码+实验报告)可以通过(山东大学软件学院操作系统课设)下载,或 ...

  8. 软件工程专业大二操作系统实验报告

    目录 实验一 Linux 安装 一.实验目的 二.预习报告 1. Linux背景 1.1 Red Hat 1.2 Fedora Linux 1.3 Ubuntu 2. Linux安装 2.1 安装步骤 ...

  9. 实验报告Linux操作系统基本命令,linux操作系统实验报告全部.doc

    linux操作系统实验报告全部 计算机操作系统 实验报告 学 号:姓 名:提交日期:2014.12.15成 绩: 东北大学秦皇岛分校 [实验题目]熟悉Linux/UNIX操作系统[实验目的]1.熟悉L ...

最新文章

  1. 国外计算机音乐专业,音乐留学干货 | 国外电子音乐专业留学如何?
  2. DataGridView中获取与设置当前选中行以及SelectedRows和CurrentRow注意区分
  3. linux unix系统区别,Unix和Linux操作系统有什么区别?看这里!
  4. Liunx 重新mount
  5. Android简单实现将手机图片上传到服务器中
  6. C#中利用委托实现多线程跨线程操作
  7. SPH(光滑粒子流体动力学)流体模拟实现二:SPH算法(3)-光滑核函数
  8. varchar2(100 char)是什么意思
  9. 蔡崇信完成对布鲁克林篮网和巴克莱中心的全资收购
  10. python之文件操作read
  11. PyTorch学习—23.PyTorch的基本使用
  12. Eclipse使用问题
  13. php jmail 乱码,Jmail发送邮件与带附件乱码解决办法分享
  14. 计算机四级数据库工程师考什么,计算机四级《数据库工程师》考试大纲
  15. 怎样查找MP3音乐链接地址 用于QQ空间背景
  16. 【已解决】 ‘gbk‘ codec can‘t decode byte 0x93 in position 3136: illegal multibyte sequence
  17. 2021-10-30 字典
  18. 预测《权游》角色生死,AI算法魔力何在?
  19. MEDLINE与PubMed有什么区别?检索范围包含哪些?
  20. 魔兽争霸的历史(ZT)第三章

热门文章

  1. Echarts 下载图片的名字修改
  2. 拜耳阵列(拜耳马赛克)简介
  3. 禁止VSCode生成ipch文件
  4. 第二章 2.2 什么是抽象数据类型?
  5. OPLSAA力场参数之快速建模—MS+Moltemplate
  6. 那些年,我们北漂的日子--(工作第1天)
  7. 微信小程序-绑定事件以及bindtap和catchtap的区别
  8. “三单匹配”与采购付款流程
  9. node爬虫伪造ip与请求头
  10. css概述、选择器以及样式属性