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

实现工具: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)认真阅读实验材料中进程管理部分,分析多个进程的运行情况。 

猜你喜欢

转载自blog.csdn.net/m0_50962679/article/details/124707266
今日推荐