为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > 惠州学院操作系统实验二

惠州学院操作系统实验二

2018-03-14 8页 doc 69KB 45阅读

用户头像

is_266065

暂无简介

举报
惠州学院操作系统实验二惠州学院操作系统实验二 实验二 进程控制 一、 实验目的 (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,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索