操作系统——Linux进程控制

时间:2021-03-29 20:53:14

一、实验目的:

进一步认识并发执行的概念,区别顺序执行和并发执行。

分析进程征用临界资源的现象,学习解决进程互斥的方法。

二、实验环境:

 

一台运行Linux操作系统的计算机。

 

三、实验内容:

(写出主要的内容)

1.实验编程

(1)进入Linux操作系统。

(2)打开终端,进入vi编辑器

(3)输入源程序代码。

源代码如下

:#include<stdio.h>

#include<sys/types.h>

#include<unistd.h>

int main()

{

       intpid1,pid2;

       printf("a\n");

       if((pid1=fork())<0)

       {

              printf("Child1fail create!\n");

              return1;

       }

       elseif(pid1==0)

       {

              printf("b\n");

              return;

       }

       if((pid2=fork())<0)

       {

              printf("Child2fail create!\n");

              return1;

       }

       elseif(pid2==0)

       {

              printf("c\n");

              return;

       }

}

(4)按Esc键,进入命令模式后,输入“:wq文件名”就可以运行该程序了。

操作系统——Linux进程控制

 

2.可选实验

(1)修改在实验编程过程中已编写的程序。

当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示'a',子进程分别显示字符'b'和字符'c'。

截图如下所示     

 操作系统——Linux进程控制

操作系统——Linux进程控制

 (2)在程序中使用系统调用lockf()给每个程序加锁,可以实现进程之间的互斥,观察并分析现象。

操作系统——Linux进程控制

 

四、心得体会:

 

fork可以建立一个新进程,把当前的进程分为父进程和子进程,新进程称为子进程,而原进程称为父进程。父子进程,fork之后,操作系统会复制一个与父进程完全相同的子进程,虽说是父子关系,但更像是兄弟关系,这两个进程共享代码空间,但数据空间是相互独立的。lockf():用作锁定文件的某些段或者整个文件,这样就可以实现进城之间的互斥了,但是因为上述程序执行时,不同进程之间不存在共享临界资源问题,所以,这时候的加锁与不加锁效果相同。