操作系统实验二进程的创建控制实验(含代码及实验心得)

  • Post author:
  • Post category:其他



实现工具:PC机



实现环境:Linux



实习内容(功能、目标):

实验目的:

创建进程,体会进程间的并发特征。


实验内容:

编写一段程序,使用系统调用 fork() 创建两个子进程 p1 和 p2。而且父进程输出字符串“ father ”,第一个子进程输出字符串“ borther1 ”,第二个子进程输出字符串“ borther2 ”。


实验要求:

(1)掌握系统调用 fork() 的使用方法及其功能;

(2)利用系统调用 sleep() 调整父进程及各子进程的并发执行过程;

(3)认真查看和比较每次执行结果,分析原因。

实现的思想、方法和技术(含数据结构、算法):

使用系统调用 fork() 创建两个子进程 p1 和 p2,并且通 过 getpid() 输出其进程号 ,在子进程中输出各自的标识。 完成了进程的创建, 利用系 统调用 sleep()调整父进程及各子进程的并发执行过程体会了进程间的 并发特征。 本次实验比较简单,主要是运用 fork() 、getpid()、sleep() 这几个系统调用函数,没有涉及算法问题。


函数功能:

1. Fork()

(1) 功能:创建一子进程;

(2) 返回值

0   : 从进程返回;

>0 : 从父进程返回,返回值为子进程的进程标识号;

-1  : 创建失败返回。

主要代码:

#include<stdio.h> 
#include<stdlib.h> 

int main() { 
    int p1,p2; 
    while((p1=fork())==-1); 
    if(p1==0) 
    { 
        printf("brother1\n"); 
        exit(0); 
        sleep(5); 
    } 
    else{ 
        while((p2=fork())==-1); 
        if(p2==0) 
        { 
            printf("brother2\n"); 
            exit(0); 
            sleep(0); 
        } 
        wait(0); 
        printf("father\n"); 
    } 
}

注释:

1.创建子进程 1

2.如果 p1 是 0,执行子进程 1 中的内容

3.否则将创建子进程 2

结果分析:

实验截图:

创建子进程 1;

如果 p1 是 0,执行子进程 1 中的内容;

否则将创建子进程 2


错误一:

忘加头文件 : #include<stdlib.h>

#include<wait.h> ;

错误二:

没见 wait(0),父进程没有等待子进程的创建,先上 CPU;

思考题:

(1)为什么各字符串的输出顺序会是任意的?




答:进程并发执行,子进程与父进程抢占处理机,所以输出字符顺序不同。


(2)改写程序,将字符串用循环语句一个一个字符输出,再查看执行结果如何?


答:当sleep ()语句不存在的时候,随机输出,在 brotherl输出的过程中,可能中途将brother2先输出再输出 brother1后边的字符,反之存在时顺序输出,当然顺序输出是建立在一个良好的控制的前提下的,否则也可能会乱序

实验心得:

(1)加深对进程概念的理解,明确进程和程序的区别。

(2)进一步认识并发执行的实质。

(3)分析进程争用资源的现象,学习解决进程互斥的方法。

(4)复习课本关于进程控制和进程同步的内容,加深对进程管理概念的理解。

(5)认真阅读实验材料中进程管理部分,分析多个进程的运行情况。



版权声明:本文为m0_50962679原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。