计算机操作系统实验资料

上传人:Sc****h 文档编号:144828175 上传时间:2022-08-28 格式:DOC 页数:9 大小:105KB
收藏 版权申诉 举报 下载
计算机操作系统实验资料_第1页
第1页 / 共9页
计算机操作系统实验资料_第2页
第2页 / 共9页
计算机操作系统实验资料_第3页
第3页 / 共9页
资源描述:

《计算机操作系统实验资料》由会员分享,可在线阅读,更多相关《计算机操作系统实验资料(9页珍藏版)》请在装配图网上搜索。

1、操作系统实验报告课程名操作系统班级物联网一班称名姓号学实验名称进程间的通信实验序3号1. 实验目的及要求了解什么是信号。熟悉 LINUX 系统中进程之间软中断通信的基本原理。2. 实验环境VMware Workstation 12 Player3. 实验内容编写一段程序,使用系统调用fork( ) 创建两个子进程,再用系统调用 signal( )让父进程捕捉键盘上来的中断信号(即按ctrl+c键),当捕捉到中断信号后,父进程用系统调用kill( ) 向两个子进程发出信号,子进程捕捉到信号后,分别输出下列信息后终止:Child process 1 is killed by parent!Chil

2、d process 2 is killed by parent!父进程等待两个子进程终止后,输出以下信息后终止:Parent process is killed!程序实例#include#include#includeint wait_mark;void waiting();void stop();void main()int p1,p2;signal(SIGINT,stop);/signal()初始位置while(p1=fork()=-1);if(p10) signal(SIGINT,stop); while(p2=fork()= -1);if(p20)signal(SIGINT,stop)

3、;wait_mark=1;waiting();kill(p1,10);kill(p2,12);wait();wait();printf(parent process is killed!n);exit(0);elsewait_mark=1;signal(12,stop);waiting();lockf(1,1,0);printf(child process 1 is killed by parent!n); lockf(1,0,0);exit(0);elsewait_mark=1;signal(10,stop);waiting();lockf(1,1,0);printf(child proce

4、ss 2 is killed by parent!n); lockf(1,0,0);exit(0);void waiting()while(wait_mark!=0);void stop()wait_mark=0;程序结果以及分析分析 :程序执行时,首先会先在父程序中创建一个子程序,然后父程序向子程序发送一个信号(kill 方法 ),子进程在接收到父程序发送的信号后, 会在控制台打印一句话,这时因为有两个子进程接收到信号,他们都要对控制台操作,这时会发生互斥操作。lockf(1,1,0);printf(child process 2 is killed by parent!n);lockf(1

5、,0,0);再打印后子程是分别加锁和解锁操作,lockf(1,0,0) 和 lockf(1,1,0) 序会退出。在程序中加入wait() 是等待两个程序都结束了父程序在控制台打印输出。exit(0) 的作用是退出子程序。修改上面的程序,增加语句signal(SIGINT,SIG_IGN) 和语句signal(SIGQUIT,SIG_IGN) ,再观察程序执行时屏幕上出现的现象,并分析其原因。示例程序#include#include#includevoid IntDelete();void Int1();void Int2();intpid1,pid2;intEndFlag=0;void mai

6、n()int exitcode;signal(SIGINT,SIG_IGN);signal(SIGQUIT,SIG_IGN);while(pid1=fork()= -1);if(pid1=0)signal(SIGUSR1,Int1);signal(SIGINT,SIG_IGN);pause();elsewhile(pid2=fork()=-1);if(pid2=0)signal(SIGUSR2,Int2);signal(SIGINT,SIG_IGN);pause();elsesignal(SIGINT,IntDelete);waitpid( -1,&exitcode,0);printf(par

7、ent process is killed n);void IntDelete()kill(pid1,10);kill(pid2,12);EndFlag=1;void Int1()printf(child process 1 is killed by parent !n);exit(0);void Int2()printf(child process 2 is killed by parent !n);exit(0);程序分析1.首先在主进程中创建一个子进程1,并将自定义中断信号挂起并监听中断信1 上去,子进程Int1() 注册到函数SIGUSR1 号,当接收到中断信号子进程1 会打印一句话并

8、退出;2.父进程还会创建一个子进程2,并将自定义中断信号SIGUSR2注册到函数Int2() 上去,子进程2 挂起并监听中断信号,当接收到中断信号子进程2 会打印一句话并退出;3.父进程将中断信号SIGINT 上注册到了IntDelete 函数上,当父进程接收到中断后, 会向两个子进程发送软中断信号,子进程接收到软中断信号后会执行响应的响应;以下是截图 :4. 实验问题从执行结果上来看, 按照程序执行的顺序是父进程先接收到中断信号那么为什么父进程反而最后打印输出?这是因为 pid_t waitpid(pid_t pid,int * status,int options);pid=-1 等待任何子进程 ,相当于wait() 。5. 实验总结通过本次试验学习了解到进程如何接受中断信号,以及发出软中断信号,以及进程间的等待问题。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!