中山大学软件工程操作系统实验一报告

欢迎访问我的个人博客:Talk is cheap. Show me the code!。我相信会有所收获的。

实验一 进程和进程通信


一、 实验目的
1. 加深对进程概念的理解,明确进程和程序的区别。进一步认识并发执行的实质。
2. 了解信号处理。
3. 认识进程间通信(IPC):进程间共享内存。
4. 实现shell:了解程序运行。


二、 实验运行环境
虚拟机VMware下的Ubuntu16.04系统


三、 实验内容
1. 进程的创建实验
2. 信号处理实验
3. 进程间共享内存实验
4. 实现shell的要求


四、 实验过程
①进程的创建实验
(1) 将下面的程序编译运行,并解释现象

这里写图片描述

编译运行得到的结果如下图:

这里写图片描述

注意可能得到的结果不止一个,但是每一个结果中都有两个1、四个2、四个3、两个4,这里选取上图的结果来作分析。
可能的原因如下:
这里先用进程树来分析:
这里写图片描述
接下来是各个进程之间的竞争关系导致输出结果不同:
1. 首先执行父进程main,它创建子进程m-p1,进而输出1,再创建子进程m-p2,再输出2,然后执行if判断,此时pid1不为0,所以再输出4。main执行完毕,此过程输出1、2、4;
2. 两个子进程相互竞争,先执行子进程m-p2,它执行后面的代码,先输出2,然后执行if判断,此时该子进程继承了父进程main的pid1值,pid1不为0,所以输出4。m-p2执行完毕,此过程输出2、4;
3. 接着执行子进程m-p1,先输出1,再创建一个子进程m-p1-p2,继续输出2,然后执行if判断,此时pid1为0,创建子进程m-p1-p3,然后输出3。m-p1执行完毕,此过程输出1、2、3;
4. 然后执行子进程m-p1-p3,输出3。m-p1-p3执行完毕;
5. 接着执行m-p1-p2,先输出2,然后执行if判断,此时pid1为0,创建子进程m-p1-p2-p3,输出3。m-p1-p2执行完毕,此过程输出2、3;
6. 最后执行子进程m-p1-p2-p3,直接输出3。m-p1-p2-p3执行完毕。

所以:该结果为1、2、4、2、4、1、2、3、3、2、3、3.


(2) 编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符a;子进程分别显示字符b和字符c。试观察记录屏幕上的显示结果并分析原因。

所编写的程序如下:

这里写图片描述

编译运行得到的结果如下:

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值