问题
广东开放大学操作系统原理与应用(本)实操作业二:进程控制
广东开放大学操作系统原理与应用(本)实操作业二:进程控制、
按照"实验二 进程控制.pdf"文件的要求,验证文件中的程序,运行出结果并分析产生结果的原因,以文件的形式提交运行结果截图及结果原因分析(一个文件中)。
实验二:进程控制
实验简介:本次实验主要理解程序和进程的关系,进程的创建,多进程的运行以及同步互斥的控制。
实验目标:
(1)加深对进程概念的理解,明确进程和程序的区别。(2)进一步认识并发执行的实质。(3)分析进程竞争资源现象,学习解决进程互斥的方法。实验内容:
(1)进程的创建
编写一段源程序,使系统调用 fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。试观察纪录屏幕上的显示结果,并分析原因。(2)进程的控制
修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,在观察程序执行时屏幕出现的现象,并分析原因。如果在程序中使用调用 lockf()来给每一个子进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。(3)进程的管道通信
编制一段程序,实现进程的管理通信。使用系统调用 pipe()建立一条管道线;两个子进程P1 和P2分别向管道中写一句话:
Child 1 is sending a message!
Child 2 is sending a message!
而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。
要求父进程先接收子进程 P1 发来的消息,然后再接收子进程P2发来的消息。
实验所需基础:
操作系统:Linux RHEL 6.0
实验是否需要联网:否
实训步骤:
步骤一:进程的创建
编写一段程序,使用系统调用 fork( )创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符;父进程显示字符“a”,子进程分别显示字符“b”和“
c”。试观察记录屏幕上的显示结果,并分析原因。〈程序〉
#include
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'); /*父进程执行*/
}
}
步骤二:进程的控制
修改已编写好的程序,将每个程序的输出由单个字符改为一句话,再观察程序执行时屏幕上出现的现象,并分析其原因。如果在程序中使用系统调用lockf()来给每个程序加锁,可以实现进程之间的互斥,观察并分析出现的现象。
〈程序 1〉
#include
main()
{
int p1,p2,i;
while((p1=fork())==-1);
if(p1==0)
for(i=0;i<50000;i++)
printf("child %d\n",i);
else
{
while((p2=fork())==-1);
if(p2==0)
for(i=0;i<50000;i++)
printf("son %d\n",i);
else
for(i=0;i<50000;i++)
printf("daughter %d\n",i);
}
}
〈程序 2〉
include
main()
{
int p1,p2,i;
while((p1=fork())==-1);
if(p1==0)
{
lockf(1,1,0);
for(i=0;i<50000;i++)
printf("child %d\n",i);
lockf(1,0,0);
}
else
{
while((p2=fork())==-1);
if(p2==0)
{
lockf(1,1,0);
for(i=0;i<50000;i++)
printf("son %d\n",i);
lockf(1,0,0);
}
else
{
lockf(1,1,0);
for(i=0;i<50000;i++)
printf("daughter %d\n",i);
lockf(1,0,0);
}
}
}
比较<程序 1>和<程序 2>的运行结果,分析lockf()函数的作用。步骤三:管道通信
编制一段程序,实现进程的管道通信。使用系统调用pipe()建立一条管道线。两个子进程 p1 和 p2 分别向通道个写一句话:child1 process is sending message!
child2 process is sending message!
而父进程则从管道中读出来自两个进程的信息,显示在屏幕上。〈程序〉
#include
#include
#include
int pid1,pid2;
main( )
{
int fd[2];
char outpipe[100],inpipe[100];
pipe(fd); /*创建一个管道*/
while ((pid1=fork( ))==-1);
if(pid1==0)
{ lockf(fd[1],1,0);
sprintf(outpipe,"child 1 process is sending message!");
/*把串放入数组 outpipe 中*/
write(fd[1],outpipe,50); /*向管道写长为50 字节的串*/
sleep(5); /*自我阻塞 5 秒*/
lockf(fd[1],0,0);
exit(0);
}
else
{ while((pid2=fork( ))==-1);
if(pid2==0)
{ lockf(fd[1],1,0); /*互斥*/
sprintf(outpipe,"child 2 process is sending message!");write(fd[1],outpipe,50);
sleep(5);
lockf(fd[1],0,0);
exit(0);
}
else
{ wait(0); /*同步*/
read(fd[0],inpipe,50); /*从管道中读长为50 字节的串*/printf("%s\n",inpipe);
wait(0);
read(fd[0],inpipe,50);
printf("%s\n",inpipe);
exit(0);
}
}
}
分析 wait()系统调用、sleep()系统调用的作用。
您可能感兴趣的试题
-
投资学 智慧树网课章节测试答案
点击下方查看答案 第一章 章节测试1、下列不属于投资行为的是( ) A:购买衣服与食物B:购买上市公司股票C:修建地铁网络D:新建一条生产线答案: 【】2、除发电外,三峡工程的建设还有利于长江上游的航运以及下游的防洪,这是该工程的( ) A:直接效益B:宏观效益C:社会效益D:财务效益答案: 【...
查看答案 -
江苏开放市场调查与预测第二单元复习题参考答案
江苏开放市场调查与预测第二单元复习题参考答案单元二自测 一、判断题1.文案调查也称案头调查,收集的资料也叫案头资料或一手资料。( )2.文案调查发比实地调查法更...
查看答案 -
湖南城市学院机电传动与控制期末复习题
一、单项选择题(共20小题,共50分)第1 题:电动机所产生的转矩在任何情况下,总是由轴上的负载转矩和()之和所平衡。A. 静态转矩B. 加速转矩C. 减速转矩...
查看答案 -
投资学 智慧树网课章节测试答案(湖南大学)
点击下方查看答案 绪论 章节测试1、关于金融资产说法错误的是 A:金融资产不是社会财富的直接代表B:金融资产往往同时出现在资产负债表的两端C:金融资产一定是无形资产D:金融资产在使用过程中自然损耗答案: 【】2、James在孤岛捡到了一百万美元现钞并带回家,如果其他条件不变并且不考虑法律风险,下列说...
查看答案 -
江苏开放市场调查与预测第四单元复习题参考答案
江苏开放市场调查与预测第四单元复习题参考答案单元四自测 一、判断题1.调查内容较少,项目简单可采用面谈访问或留置问卷方式进行调查。( ) 2. 调查人员要尽量提...
查看答案