上海大学操作系统_实验六 下载本文

内容发布更新时间 : 2024/12/24 8:57:38星期一 下面是文章的全部内容请认真阅读。

《操作系统》实验报告

指导老师: 赵 正 德

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