当前位置:   article > 正文

操作系统实验二 进程管理_让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程显示字符“b”和字

让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程显示字符“b”和字

★观前提示本篇内容为操作系统实验内容,代码等内容经测试没有问题,但是可能会不符合每个人实验的要求,因此以下内容建议仅做思路参考

一、实验目的
  1. 加深对进程概念的理解,明确进程和程序的区别
  2. 进一步认识并发执行的实质
  3. 分析进程争用资源的现象,学习解决进程互斥的方法。
二、实验内容
  1. 进程创建
  2. 进程控制
三、具体实现

1️⃣进程创建

编写一段程序,利用系统调用fork( )创建两个进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。

让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。

①先创建c语言文件——test1.c

vi test1.c

② i 键进行代码输入,如下

#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>

int main()
{
	int p1,p2;
	while((p1=fork())==-1);
		if(p1==0)
			putchar('b');
		else
		{
			while((p2=fork())==-1);
				if (p2==0)
					putchar('c');
				else
					putchar('a');
		}
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

③gcc test1.c

对test1程序进行编译

④./a.out

测试,输出程序运行结果

在这里插入图片描述

2️⃣进程控制

修改已经编好的程序,将每个进程输出一个字符改为每个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。
如果在程序中使用系统调用lockf()来给每一个进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。

1、程序一

①先创建c语言文件——test2.c

vi test2.c

②i键进行代码输入,如下

#include<stdio.h>
#include<unistd.h>
int main()
{
	int p1,p2;
	while ((p1=fork())==-1);
	if (p1==0)
		for(int i=0;i<50;i++)
			printf("child%d\n",i);
	else
	{
		while((p2=fork())==-1);
			if (p2==0)
				for(int i=0;i<50;i++)
					printf("son%d\n",i);
			else
				for(int i=0;i<50;i++)
			printf("daughter%d\n",i);
	 }
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

③gcc test2.c

对test2程序进行编译

④./a.out

测试,输出程序运行结果

2、程序二

①先创建c语言文件——test3.c

vi test3.c

② i 键进行代码输入,如下

#include<stdio.h>
#include<unistd.h>
int main()
{
	int p1,p2,I;
	while((p1=fork())==-1);
	if(p1==0)
	{
		lockf(1,1,0);
		for(int i=0;i<50;i++)
			printf("child%d\n",i);
		lockf(1,0,0);
	}
	else
	{
		while((p2=fork())==-1);
		if(p2==0)
		{
			lockf(1,1,0);
			for(int i=0;i<50;i++)
				printf("son%d\n",i);
			lockf(1,0,0);
		}
		else
		{
			lockf(1,1,0);
			for(int i=0;i<50;i++)
				printf("daughter%d\n",i);
			lockf(1,0,0);
		}
	}
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

③gcc test3.c

对test3程序进行编译

④./a.out

测试,输出程序运行结果
在这里插入图片描述

四、实验总结

(1)通过本次实验,加深了对进程等知识的理解,能够清晰地区分进程和程序。

(2)了解了fork( )系统调用的返回值,基本掌握了调用fork( )创建进程的方法。

(3)熟悉掌握了进程并发执行的原理,理解了进程并发执行的特点。

2022.9.21记录:Code_流苏(CSDN)
如有任何疑问,评论回复,看到即回,欢迎大家多多交流学习!
★以上实验内容仅供参考。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/968313
推荐阅读
相关标签
  

闽ICP备14008679号