预览加载中,请您耐心等待几秒...
1/6
2/6
3/6
4/6
5/6
6/6

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

精品文档精品文档精品文档精品文档精品文档精品文档内蒙古师大计算机与信息工程学院《操作系统》课程实验报告实习题目实验三进程的软中断通信指导教师职称学生姓名学号日期实现工具C语言实现环境Linux实习内容(功能、目标)内容:编写一段程序,父进程创建一个子进程p1;并使子进程利用系统调用kill()向父进程发送信号,父进程得到信号后输出字符串“receivedp1signal.”。目的:(1)理解掌握软中断的概念和技术;(2)掌握进程之间基于软中断的通信技术。要求:(1)正确应用系统调用signal()建立进程与信号(异步事件)之间的联系,理解信号机制;(2)正确应用系统调用getppid()、kill(),进步理解广义同步的含义。实现的思想、方法和技术(含数据结构、算法)系统调用kill(pid,sig)和signal(sig,func)被用来传递和接受软中断信号,一个用户通过调用kill(pid,sig)向另一个标识号为pid的用户进程发送软中断信号sig。用户可以定义的软中断信号是10或12,。另外标识号为pid的进程通过signal(sig,func)捕捉到信号sig之后,执行预先约定的动作func,从而达到这两个进程的通信目的。通过系统调用getpid()可以获得当前正在执行的进程的进程标识号。通过系统调用getppid()可以获得父进程的进程标识号。主要代码注释#include<stdio.h>#include<stdlib.h>#include<signal.h>#include<sys/types.h>Voiddiaoyong(){Printf(“receivep1singnal!\n”);}main(){intp1,x,y;signal(20,message);while((p1=fork())==-1);if(p1==0){x=getppid();kill(x,10);x=getpid();printf("p1:%d\n",x);exit(0);}else{wait(0);y=getpid();printf("father:%d\n",y);TheQian掑浗Yuerudder墍鏈?DoestheYing︽牎Qianfry効鍥?}}TheLuц繍strand嬫晠The鍌ㄥ瓨鍖?The鐗╂祦Qi℃伅TheChan╃劧Yinginsect伅The鍏Fan闆嗚GengchangestheFuQi珯\\标识号为p1捕捉到终端号Thestrandу搧鍥炴敹为20的中断信号后执行message{}\\子进程抢上CPU获得父进程的进程标识号TheMei佷笟鐗╂祦\\子进程向父进程发送中断信号The鍒嗛攢Wei犻亾\\获得当前进程(子进程)的进程号,输出。\\父进程抢上CPU\\获得当前进程(父进程)的进程号,输出。结果分析(含实现中出错原因分析)思考问题(1)为什么说系统调用signal()是建立进程与信号之间的联系,而不是接收信号的操作?答:系统调用kill(pid,sig)和signal(sig,func)被用来传递和接受软中断信号,进程号为pid的进程通过signal(sig,func)捕捉到信号sig之后,执行预先约定的动作func,从而达到这两个进程的通信目的。(2)若子进程向父进程发送信号,父进程接到信号后可以缺省操作、或忽视信号、或执行一函数,各是什么含义?答:缺省操作:进程捕捉到信号之后不作任何指定的工作而忽略中断信号的影响。执行一函数:进程通过signal(sig,func)捕捉到中断信号后执行预定的函数funcgetpid()是获得当前进程的进程标识号getppid()是获得父进程的进程标识号指导教师评语、评分评分:指导教师:年月日