山东大学2023操作系统实验2
目录
(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.写在前面 2.关于环境 3.关于函数和操作 4.具体代码 1.写在前面 2023年山东大学操作系统实验,第一次实验肥肠简单,压缩以后代码仅仅几行罢了 实验要求只是:创建一个父进程,然后创建子 ...
- 山东大学linux实验四CSDN,山东大学操作系统实验报告材料4进程同步实验
<山东大学操作系统实验报告材料4进程同步实验>由会员分享,可在线阅读,更多相关<山东大学操作系统实验报告材料4进程同步实验(15页珍藏版)>请在人人文库网上搜索. 1.实用标准 ...
- 山东大学2022操作系统期末
接力:山东大学2021操作系统期末 2022-2023山东大学计算机操作系统期末考试回忆版 简答题(4 × 10 points) (1)用户态,核心态是什么 (2)这种区分对现代操作系统的意义 (3) ...
- 山东大学2021操作系统期末
2021-2022山东大学计算机操作系统期末考试回忆版 简答题(4 ×\times× 10 points) (1) 进程切换的时机 以及 哪些能抢先 (2) 好像是磁盘管理的一个题 忘记了 IO内核子 ...
- 山东大学软件学院操作系统课程设计Nachos-实验一
说明:blog 中写到的这几个实验,不全面而且也不是上交实验报告的最终版本(是自己实验过程中用typora简单记录的笔记),完整内容(含代码+实验报告)可以通过(山东大学软件学院操作系统课设)下载,或 ...
- 山东大学软件学院操作系统课程设计Nachos-实验四-基本文件系统扩展
说明:blog 中写到的这几个实验,不全面而且也不是上交实验报告的最终版本(是自己实验过程中用typora简单记录的笔记),完整内容(含代码+实验报告)可以通过(山东大学软件学院操作系统课设)下载,或 ...
- 山东大学软件学院操作系统课程设计Nachos-实验七-虚拟内存
说明:blog 中写到的这几个实验,不全面而且也不是上交实验报告的最终版本(是自己实验过程中用typora简单记录的笔记),完整内容(含代码+实验报告)可以通过(山东大学软件学院操作系统课设)下载,或 ...
- 软件工程专业大二操作系统实验报告
目录 实验一 Linux 安装 一.实验目的 二.预习报告 1. Linux背景 1.1 Red Hat 1.2 Fedora Linux 1.3 Ubuntu 2. Linux安装 2.1 安装步骤 ...
- 实验报告Linux操作系统基本命令,linux操作系统实验报告全部.doc
linux操作系统实验报告全部 计算机操作系统 实验报告 学 号:姓 名:提交日期:2014.12.15成 绩: 东北大学秦皇岛分校 [实验题目]熟悉Linux/UNIX操作系统[实验目的]1.熟悉L ...
最新文章
- 国外计算机音乐专业,音乐留学干货 | 国外电子音乐专业留学如何?
- DataGridView中获取与设置当前选中行以及SelectedRows和CurrentRow注意区分
- linux unix系统区别,Unix和Linux操作系统有什么区别?看这里!
- Liunx 重新mount
- Android简单实现将手机图片上传到服务器中
- C#中利用委托实现多线程跨线程操作
- SPH(光滑粒子流体动力学)流体模拟实现二:SPH算法(3)-光滑核函数
- varchar2(100 char)是什么意思
- 蔡崇信完成对布鲁克林篮网和巴克莱中心的全资收购
- python之文件操作read
- PyTorch学习—23.PyTorch的基本使用
- Eclipse使用问题
- php jmail 乱码,Jmail发送邮件与带附件乱码解决办法分享
- 计算机四级数据库工程师考什么,计算机四级《数据库工程师》考试大纲
- 怎样查找MP3音乐链接地址 用于QQ空间背景
- 【已解决】 ‘gbk‘ codec can‘t decode byte 0x93 in position 3136: illegal multibyte sequence
- 2021-10-30 字典
- 预测《权游》角色生死,AI算法魔力何在?
- MEDLINE与PubMed有什么区别?检索范围包含哪些?
- 魔兽争霸的历史(ZT)第三章