《操作系统》实验报告
指导老师: 赵 正 德
1
实验三 进程管理及进程通信
一. 实验目的
利用Linux提供的系统调用设计程序,加深对进程概念的理解。 体会系统进程调度的方法和效果。 了解进程之间的通信方式以及各种通信方式的使用。
二. 实验准备
复习操作系统课程中有关进程、进程控制的概念以及进程通信等内容(包括软中断 通信、管道、消息队列、共享内存通信及信号量概念)。 熟悉本《实验指导》第五部分有关进程控制、进程通信的系统调用。它会引导你学 会怎样掌握进程控制。 阅读例程中的程序段。
三. 实验方法
用vi 编写c 程序(假定程序文件名为prog1.c)
编译程序 $ gcc -o prog1.o prog1.c 或 $ cc -o prog1.o prog1.c 运行 $./prog1.o
四. 实验内容及步骤
用
vi
编写使用系统调用的
C
语言程序。
1. 编写程序。显示进程的有关标识(进程标识、组标识、用户标识等)。经过5 秒
钟 后,执行另一个程序,最后按用户指示(如:Y/N)结束操作。
2
编译运行结果:
2. 编写程序。实现父进程创建一个子进程。体会子进程与父进程分别获得 不同
返回值,进而执行不同的程序段的方法。
编译运行:
思考:子进程是如何产生的? 又是如何结束的?子进程被创建后它的运行环境是怎样建立的?
答:子进程由fork()函数创建,通过exit()函数自我结束,子进程被创建后核心将为其分配一个进程表项和进程标识符,检查同时运行的进程数目,并且拷贝进程表项的数据,由子进程继承父进程的所有文件。
3
3. 编写程序。父进程通过循环语句创建若干子进程。探讨进程的家族树以
及子进程继承父进程的资源的关系。 程序如下:
编译运行:
思考:① 画出进程的家族树。子进程的运行环境是怎样建立的?反复运行此程序 看会有什么情况?解释一下。 1839 2247 2248 2252 2254 2249 2251 2253 2250
4
每一次运行返回的进程号都不相同,但是都符合家族进程树,出现这样的情况是由于系统本身就是随机分配进程号的。 ② 修改程序,使运行结果呈单分支结构,即每个父进程只产生一个子进 程。画出进程树,解释该程序。
用一个break;语句使父进程在子进程结束后跳出循环,运行结果如下:
进程家族树如下:
2004 2401 2402 2403 2404 4. 编写程序。使用fork( )和exec( )等系统调用创建三个子进程。子进程
分别启动 不同程序,并结束。反复执行该程序,观察运行结果,结束的先后,看是否有不同次序。 编译代码如下:
5