搜索
您的当前位置:首页正文

观察进程的并发性

来源:尚车旅游网
 计算机操作系统实验报告

实验报告

四 观察进程的并发性

实验名称:

五 构造进程家族树 六 理解进程的独立空间

日期:

2014.5

班级:

一、实验目的

1.观察进程的并发性

姓名:

1)、通过创建子进程,观察父子进程的并发执行过程,区别顺序执行和并发执行; 明确进程和程序的区别; 2)、加深对操作系统进程概念和进程并发特性的理解 2. 构造进程家族树

通过创建若干个子进程,构造进程家族树,分析进程家族树的结构关系;学习相关系统调用(例如,getpid()和getppid()等)的使用方法。 3. 理解进程的独立空间

理解进程是操作系统独立分配资源的单位,进程拥有自己相对独立的程序空间。

二、实验内容

1.观察进程的并发性 1、学习进程的基础知识;

2、了解Linux系统中进程创建的基本原理;

3、熟悉进程的创建、控制、执行和终止等系统调用函数; 4、进程的创建

1

计算机操作系统实验报告

编制一段程序,使用系统调用fork()创建两个子进程,在此程序运行时,系统中就 有一个父进程和两个子进程在活动。 让每一个进程在屏幕上显示一个字符:父进程显示字符a,两个子进程分别显示字 符b和字符c。 观察、记录并分析屏幕上进程调度和并发执行的情况: 此时,在程序中使用系统调 用nice()来改变各进程的优先级, 观察、 记录并分析屏幕上进程调度和并发执行的情况

2. 构造进程家族树

学习进程构造的相关知识,学习获取进程相关信息的系统调用函数。 3. 理解进程的独立空间

预习进程创建和构造的相关知识,了解C语言程序编写的相关知识。

三、项目要求及分析

1. 构造进程家族树

进程的创建。编制一段程序,使用系统调用fork()创建三个子进程,在各个子进程中再使用系统调用fork()进一步创建子进程,如此重复,构造一棵具有图1形状的进程家族树。分别使用系统调用getpid()和getppid()获取当前进程和父进程的进程标识号并输出。

Parent Pid2 Pid3 Pid1 Pid11 Pid12

2

计算机操作系统实验报告

2. 理解进程的独立空间

a. 编写一个程序,在其main()函数中定义一个变量shared,对其进行循环加/减操作,并输出每

次操作后的结果;

b. 使用系统调用fork()创建子进程,观察该变量的变化;

c. 修改程序把shared 变量定义到main()函数之外,重复第(2)步操作,观察该变量的变化。

四、具体实现

1. 流程图 a. 构造进程家族树

开始 创建子进程Pid1 Pid1=0? >0 创建子进程Pid2 =0 =0 =0 打印 创建子进程Pid11 Pid11=0? >0 创建子进程Pid12 Pid2=0? >0 创建子进程Pid3 Pid11=0? =0 打印 Pid3=0? >0 结束 =0

b. 理解进程的独立空间

3

计算机操作系统实验报告

开始 调用父进程,执行shared 输出shared值 调用子进程,执行shared 输出shared值 结束

2. 添加函数的代码 a.构造进程家族树

4

计算机操作系统实验报告

b.理解进程的独立空间

5

计算机操作系统实验报告

五、调试运行结果

1.实验4:

6

计算机操作系统实验报告

2.实验5:

3.实验6:

7

计算机操作系统实验报告

六、实验总结

本次实验理解了进程的并发执行,进程家族树及进程独立空间的概念。深入理解了fork()、getpid()、getppid()函数的作用。认识到fork()函数在创建新的进程成功时,同时有两个返回值,pid为0则表示子进程,否则表示父进程。getpid()函数返回当前进程id,getppid()函数返回其父进程id。这些函数对我们理解进程及后续学习有很大帮助。以后还需继续巩固!

8

因篇幅问题不能全部显示,请点此查看更多更全内容

Top