logo资料库

操作系统实验二进程控制 实验报告.doc

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
实验二 进程控制
实验二 进程控制 一、实验目的: (1) 理解进程的同步、互斥、撤消等控制方法 (2) 熟悉进程间通过软中断传递控制信息的方法(低级通信) 二、实验仪器及材料: 微型计算机、红帽子 Linux 系统 三、实验内容: 任务:并发进程间通过软中断传递控制信号,实现进程同步。 #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);/*预设对 SIGINT 信号的处理过程*/ waiting();/*等待接收 ctrl+c 信号*/ kill(p1,16);/*向 p1 发出信号 16*/ kill(p2,17);/*向 p2 发出信号 17*/ wait(0);/*同步*/ wait(0); print(“parents is killed\n”); /*可以增长这个输出,观察它的内 容不会被打断*/ exit(0); } else { /*p2 进程的处理*/ wait_mark=1; signal(17,stop); /*预设对 17 信号的处理过程*/ signal(2,1);/*忽略 ctrl+c*/ waiting();/*等待信号 17*/ lockf(stdout,1,0);/*用上锁的方法实现互斥*/ printf(“P2 is killed by parent\n”); lockf(stdout,0,0);
exit(0);/*P2 正常结束*/ } } else { /*p1 进程的处理*/ wait_mark=1; signal(16,stop); signal(2,1); waiting();/*等待信号 16*/ lockf(stdout,1,0); /*用上锁的方法实现互斥*/ printf(“P1 is killed by parent\n”); lockf(stdout,0,0); exit(0); /*P1 正常结束*/ } } void waiting() { while(wait_mark!=0); } void stop() { wait_mark=0; } 运行结果:
思考题: 1 在本程序中,进程的同步和互斥是如何实现的? 答:同步是通过系统调用 wait()使父进程等待子进程结束,否则父进程一直处 于等待的状态。一旦子进程暂停或终止,则调用进程做适当处理后便返回。这样 实现了进程的同步。 互斥是通过系统调用 lockf()使输出段上锁,实现了各个 进程的互斥。 2 在本实验程序中调用 lockf(),参数 stdout 是什么? 答:表示是输出段。
分享到:
收藏