栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

实现工具: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 
#include 

int main() { 
    int p1,p2; 
    while((p1=fork())==-1); 
    if(p1==0) 
    { 
        printf("brother1n"); 
        exit(0); 
        sleep(5); 
    } 
    else{ 
        while((p2=fork())==-1); 
        if(p2==0) 
        { 
            printf("brother2n"); 
            exit(0); 
            sleep(0); 
        } 
        wait(0); 
        printf("fathern"); 
    } 
}

注释:

1.创建子进程 1 
2.如果 p1 是 0,执行子进程 1 中的内容 
3.否则将创建子进程 2

结果分析:

实验截图:

创建子进程 1;
如果 p1 是 0,执行子进程 1 中的内容;
否则将创建子进程 2


错误一: 
忘加头文件 : #include
                     #include
 

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

思考题:
(1)为什么各字符串的输出顺序会是任意的?
           答:进程并发执行,子进程与父进程抢占处理机,所以输出字符顺序不同。
(2)改写程序,将字符串用循环语句一个一个字符输出,再查看执行结果如何?
           答:当sleep ()语句不存在的时候,随机输出,在 brotherl输出的过程中,可能中途将brother2先输出再输出 brother1后边的字符,反之存在时顺序输出,当然顺序输出是建立在一个良好的控制的前提下的,否则也可能会乱序
 

实验心得:

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

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

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

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/875853.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号