收藏 分享(赏)

操作系统实验报告2-进程间通信.doc

上传人:精品资料 文档编号:10624889 上传时间:2019-12-09 格式:DOC 页数:6 大小:172.50KB
下载 相关 举报
操作系统实验报告2-进程间通信.doc_第1页
第1页 / 共6页
操作系统实验报告2-进程间通信.doc_第2页
第2页 / 共6页
操作系统实验报告2-进程间通信.doc_第3页
第3页 / 共6页
操作系统实验报告2-进程间通信.doc_第4页
第4页 / 共6页
操作系统实验报告2-进程间通信.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、实 验 报 告( 2013 / 2014 学年 第 1 学期)课程名称 操作系统原理实验名称 实验 2:进程间通信实验时间 2013 年 10 月 10 日指导单位 软件工程系指导教师 杨 健学生姓名 班级学号学院(系) 软件工程系 专 业 计算机软件与服务外包0实验名称 实验 2:进程间通信 指导教师 杨健实验类型 验证 实验学时 2 实验时间一、 实验目的1了解 Linux 中的信号,熟悉 Linux 系统中进程之间软中断通信的基本原理。2Linux 系统的进程通信机构(IPC)允许在任意进程间大批量地交换数据,学习如何利用消息缓冲队列进行进程间的通信,并加深对消息通信机制的理解。二、实验

2、环境(实验设备)Windows 2000 + VMWare + RedHat Linux 8三、实验内容1编写程序:用 fork()创建两个子进程,再用系统调用 signal()让父进程捕捉键盘上来的中断信号(即按c 键) ;捕捉到中断信号后,父进程用系统调用 kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息,然后终止:Child process1 is killed by parent!Child process2 is killed by parent!父进程等待两个子进程终止后,输出如下的信息后终止:Parent process is killed!2分析利用软中断通

3、信实现进程同步的机制。3消息的创建,发送和接收。4使用系统调用 msgget(),msgsnd(),msgrev() ,及 msgctl()编制消息的发送和接收程序。5server.c 程序后台运行, client.c 程序前台运行,server.c 先于 client.c 运行。程序代码#include #include #include void waiting( ),stop( );int wait_mark;main( )int p1,p2,stdout;while(p1=fork( )= =-1); /*创建子进程 p1*/if (p10)while(p2=fork( )= =-1)

4、; /*创建子进程 p2*/if(p20)wait_mark=1;signal(SIGINT,stop); /*接收到c 信号,转 stop*/waiting( );1kill(p1,16); /*向 p1 发软中断信号 16*/kill(p2,17); /*向 p2 发软中断信号 17*/wait(0); /*同步*/wait(0);printf(“Parent process is killed!n“);exit(0);elsewait_mark=1;signal(17,stop); /*接收到软中断信号 17,转 stop*/waiting( );lockf(stdout,1,0);pr

5、intf(“Child process 2 is killed by parent!n“);lockf(stdout,0,0);exit(0);elsewait_mark=1;signal(16,stop); /*接收到软中断信号 16,转 stop*/waiting( );lockf(stdout,1,0);printf(“Child process 1 is killed by parent!n“);lockf(stdout,0,0);exit(0);void waiting( )while(wait_mark!=0);void stop( )wait_mark=0;#include#in

6、clude#include#include2#include#define MSGKEY 75struct msgformlong mtype;char mtext256;main()struct msgform msg;int msgqid,pid,*pint;msgqid=msgget(MSGKEY,0777);pid=getpid();pint=(int*)msg.mtext;*pint=pid;msg.mtype=1;msgsnd(msgqid,msgrcv(msgqid,printf(“client:receive from pid %dn“,*pint);exit(0);#incl

7、ude#include#include#include#include#define MSGKEY 75struct msgformlong mtype;char mtext256;main()struct msgform msg;int msgqid,pid,*pint;msgqid=msgget(MSGKEY,0777|IPC_CREAT);for(;)msgrcv(msgqid,pint=(int*)msg.mtext;3pid=*pint;printf(“server:receive from pid %dn“,pid);msg.mtype=pid;*pint=getpid();msg

8、snd(msgqid,4四、实验小结(针对实验内容逐项小结实验中发现的问题、自己的解决方法、心得体会等)这次程序相比于上次实验,难度稍有点大,程序也复杂了,通过对此次实验的学习,了解了 linux 系统中的信号,熟悉了进程之间软中断通信的基本原理。信号本质:信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进程有哪些事情发生了。信号机制经过 POSIX 实时扩展后,功能更加强大,除了基本通知功能外,还可以传递附加信息。进程用 kill( )向一个进程或一组进程发送一个信号;当一个进程要进入或退出一个低优先级睡眠状态时,或一个进程即将从核心态返回用户态时,核心都要检查该进程是否已收到软中断另外,最重要的是学会了 kill()函数和 signal()函数的调用,当然在实验中也遇到了很多问题,不过好在同学的帮忙下都得到了解决。五、指导教师评语成 绩 批阅人 日 期

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报