赞
踩
★观前提示:本篇内容为操作系统实验内容,代码等内容经测试没有问题,但是可能会不符合每个人实验的要求,因此以下内容建议仅做思路参考。
进程和程序
的区别。并发执行的实质
。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;
}
③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;
}
③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;
}
③gcc test3.c
对test3程序进行编译
④./a.out
测试,输出程序运行结果
(1)通过本次实验,加深了对进程等知识的理解,能够清晰地区分进程和程序。
(2)了解了fork( )系统调用的返回值,基本掌握了调用fork( )创建进程的方法。
(3)熟悉掌握了进程并发执行的原理,理解了进程并发执行的特点。
2022.9.21记录:Code_流苏(CSDN)
如有任何疑问,评论回复,看到即回,欢迎大家多多交流学习!
★以上实验内容仅供参考。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。