西工大操作系统实验os2.docVIP

  • 15
  • 0
  • 约2.48千字
  • 约 9页
  • 2016-08-22 发布于重庆
  • 举报
西工大操作系统实验os2

评语: 课中检查完成的题号及题数: 课后完成的题号与题数: 成绩: 指导教师: 实验报告五 实验名称: 构造进程的家族树/19 班级:学号: 2012302495 姓名: 李帅杰 一、实验目的: 通过创建若干个子进程,构造进程家族树,分析进程家族树的结构关系;学习相关系统调用(getpid()和getppid()等)的使用方法。 二、实验内容: 进程的创建。编制一段程序,使用系统调用fork()创建三个子进程,在各个子 进程中再使用系统调用fork()进一步创建子进程,如此重复,构造一棵具有图1形状的进程家族树。分别使用系统调用getpid()和getppid()获取当前进程和父进程的进程标识号并输出。 项目要求及分析: 学习进程构造的有关知识,fork()函数创建子进程再用fork()子进程,利用进程号的进程如下 四、具体实现: 4.1 流程图 1.流程图如下: 4.2 添加函数的代码 #include stdio.h #include stdlib.h #include sys/types.h int main() { int pid_1,pid_2_1,pid_2_2,pid_3; pid_1 = fork(); if(pid_1 0 ) printf(“ERROR!\n”); else if(pid_1 == 0 ) { printf(“child =- %d\t parent = %d”,getpid(),getppid()); } else if(pid_1 0) { pid_2 = fork(); if(pid_2 0 ) printf(“ERROR!\n”); else if(pid_2 == 0) { pid_2_1 = fork(); if(pid_2_1 0 ) printf(“ERROR!\n”); else if(pid_2_1 == 0 ) { printf(“child = %d\t parent = %d”,getpid(),getppid()); } else if(pid_2_1 0) { pid_2_2 = fork(); if(pid_2_2 0 ) printf(“ERROR!\n”); else if(pid_2_2 == 0 ) { printf(“child = %d\t parent = %d”,getpid(),getppid()); } } else if(pid_2 0) { pid_3 =fork(); if(pid_30 ) printf(“ERROR!\n”); else if(pid_3 == 0 ) { printf(“child = %d\t parent = %d”,getpid(),getppid()); } } } return 0; } 五、调试运行结果: 六、实验总结: 刚开始对实验把握不够准确,以为只要利用fork()构造几个子进程尽可以,实验就是要按照要求来,给出的家族树来创建的子进程。子进程,要注意创建时机,按照家族树来创建正确的子进程。的进程家族树如下: 实验报告六 实验名称: 理解进程的独立空间/19 班级:学号: 2012302495 姓名: 李帅杰 一、实验目的: 理解进程是操作系统独立分配资源的单位,进程拥有自己相对独立的程序空间。 二、实验内容: (1)编写一个程序,在其main()函数中定义一个变量shared,对其进行循环 加/减操作,并输出每次操作后的结果; (2)使用系统调用fork()创建子进程,观察该变量的变化; (3)修改程序把shared 变量定义到main()函数之外,重复第(2)步操作, 观察该变量的变化。 三、项目要求及分析: 了解进程创建和构造的相关知识,了解C语言编写程序的相关知识,观察程序执行结果,根据进程执行关系思考与线程的不同。 四、具体实现: 4.1 流程图 4.2 添加函数的代码 #include stdio.h #include stdlib.h #include sys/types.h #include unistd.h int shared = 1; int main() { int pid; pid = fork(); if(pid 0 ) printf(“ERROR!\n”); e

文档评论(0)

1亿VIP精品文档

相关文档