惠州学院操作系统实验二惠州学院操作系统实验二
实验二 进程控制
一、 实验目的
(1) 理解进程的同步、互斥、撤消等控制方法 (2) 熟悉进程间通过软中断传递控制信息的方法(低级通信)
二、 实验器材
微型计算机、Ubuntu版本的Linux系统
三、 实验内容
任务1:并发进程间通过软中断传递控制信号,实现进程同步。运行程序,观察运
行结果,并分析。
程序源代码如下:
#include
#include
#include
int wait_mark;
void waiting(), stop();
main() ...
惠州学院操作系统实验二
实验二 进程控制
一、 实验目的
(1) 理解进程的同步、互斥、撤消等控制方法 (2) 熟悉进程间通过软中断传递控制信息的方法(低级通信)
二、 实验器材
微型计算机、Ubuntu版本的Linux系统
三、 实验内容
任务1:并发进程间通过软中断传递控制信号,实现进程同步。运行程序,观察运
行结果,并分析。
程序源代码如下:
#include
#include
#include
int wait_mark;
void waiting(), stop();
main()
{
int p1, p2;
while((p1=fork())==-1);
if(p1>0)
{
while((p2=fork())==-1);
if(p2>0)
{
wait_mark = 1;
signal(SIGINT, stop);
waiting();
kill(p1, 16);
kill(p2, 17);
wait(0);
wait(0);
printf("parents is killed\n");
exit(0);
}
else
{
wait_mark = 1;
signal(17, stop);
signal(2, 1);
waiting();
lockf(stdout, 1, 0);
printf("P2 is killed by parent\n");
lockf(stdout, 0, 0);
exit(0);
}
}
else
{
wait_mark = 1;
signal(16, stop);
signal(2, 1);
waiting();
lockf(stdout, 1, 0);
printf("P1 is killed by parent\n");
lockf(stdout, 0, 0);
exit(0);
}
}
void waiting()
{
while(wait_mark != 0); }
void stop()
{
wait_mark = 0;
}
程序运行截图如下:
程序运行结果分析:程序用上锁的方法实现进程的互斥,父进程处理中一直在等待接收
ctrl+c的信号,而p1进程一直在等待接收16信号,p2进程一直在等待接收17信号。一
旦父进程接收到该信号,就分别向p1和p2发送16和17这两个信号。在各个信号接收
到各自的信号之后,执行自己的处理过程。
四、 思考题解答(包括需要改写的程序的源码及适当注释) 1. 在本程序中,进程的同步和互斥是如何实现的,
答:同步是通过系统调用wait()使父进程等待子进程结束,否则父进程一直处于等
待的状态。一旦子进程暂停或终止,则调用进程做适当处理后便返回。这样实现了
进程的同步。
互斥是通过系统调用lockf()使输出段上锁,实现了各个进程的互斥。
2. 在本实验程序中调用lockf(),参数stdout指的是什么,
答:stdout表示的是输出段。
3. 将子进程P1、P2的程序段改为2个独立的函数,好后给父进程调用,程序应
该如何改写,(实验报告上给出完整的源码,并在机器上运行。)
答:修改后的源代码如下:
#include
#include
#include
int wait_mark;
void waiting(), stop();
void pFunc1(), pFunc2();
int p1, p2;
main()
{
while((p1=fork())==-1);
if(p1>0)
{
while((p2=fork())==-1);
if(p2>0)
{
wait_mark = 1;
signal(SIGINT, stop);
waiting();
kill(p1, 16);
kill(p2, 17);
wait(0);
wait(0);
printf("parents is killed\n");
exit(0);
}
else
{
pFunc2();
}
}
else
{
pFunc1();
}
}
void pFunc1()
{
wait_mark = 1;
signal(17, stop);
signal(2, 1);
waiting();
lockf(stdout, 1, 0);
printf("P2 is killed by parent\n");
lockf(stdout, 0, 0);
exit(0);
}
void pFunc2()
{
wait_mark = 1;
signal(17, stop);
signal(2, 1);
waiting();
lockf(stdout, 1, 0);
printf("P2 is killed by parent\n");
lockf(stdout, 0, 0);
exit(0);
}
void waiting()
{
while(wait_mark != 0); }
void stop()
{
wait_mark = 0;
}
修改后的运行结果如下:
本文档为【惠州学院操作系统实验二】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。