本文主要是介绍中山大学软件工程操作系统实验一报告,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
欢迎访问我的个人博客: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。试观察记录屏幕上的显示结果并分析原因。
所编写的程序如下:
编译运行得到的结果如下:
这篇关于中山大学软件工程操作系统实验一报告的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!