操作系统实验报告进程间通信.docVIP

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统实验报告进程间通信

《计算机操作系统》 实验报告(二) 学号:030702412 姓名: 陈楠 学院: 数计学院 专业: 计算机类 年级: 2007级 班级: 4班 实验时间:2009-2010学年第一学期 指导教师:丁善镜、黄志华 目录 1、 实验题目 3 2、 实验目的 3 3、 实验环境 3 4、 实验原理 3 5、 实验内容 3 5.1、 fork()函数机理探索 3 5.1.1、 原始代码段 3 5.1.2、 代码段修改一 3 5.1.3、 结论(1) 4 5.1.4、 fock()函数原理 4 5.1.5、 代码段修改二 4 5.2、 并发执行测猜测 5 5.2.1、 并发执行改进 5 5.2.2、 代码段修改(3) 5 5.3、 小结 6 实验题目 实验目的 掌握用邮箱方式进行进程通信的方法,并通过设计实现简单邮箱理解进程通信中的同步问题以及解决该问题的方法。 实验环境 Windows XP SP3 实验原理 邮箱机制类似于日常使用的信箱。对于用户而言使用起来比较方便,用户只需使用send()向对方邮箱发邮件 receive()从自己邮箱取邮件, send()和 receive()的内部操作用户无需关心。因为邮箱在内存中实现,其空间有大小限制。其实send()和 receive()的内部实现主要还是要解决生产者与消费者问题。 实验内容 进程通信的邮箱方式由操作系统提供形如send()和receive()的系统调用来支持,本实验要求学生首先查找资料了解所选用操作系统平台上用于进程通信的系统调用具体形式,然后使用该系统调用编写程序进行进程间的通信,要求程序运行结果可以直观地体现在界面上。在此基础上查找所选用操作系统平台上支持信号量机制的系统调用具体形式,运用生产者与消费者模型设计实现一个简单的信箱,该信箱需要有创建、发信、收信、撤销等函数,至少能够支持两个进程互相交换信息,比较自己实现的信箱与操作系统本身提供的信箱,分析两者之间存在的异同。 Mutex和Semaphore区别 在windows环境下两者有着类似之处但不完全相同。 Semaphore可以比喻成是一个银行(临界区)有N人的服务窗口(最大允许同步进程数量),如果申请的客户(进程)少于N就可以办理业务,如果客户满了,就要等待某一个客户服务的结束。 Mutex可以比喻成是一个银行只有1各服务窗口,如果客户A正在办理,那么后续客户申请时只能等待,只有当客户A办理结束离开服务窗口时,后续客户依据申请顺序逐一获得被服务的资格。 Mutex在没有被任何线程所拥有时是有信号的,这时任何线程可以使用Wait functions去获取该对象的所有权。当Mutex被某个线程拥有后就处于没信号状态,并且只有当该线程使用ReleaseMutex释放该互斥对象时,它才能被其它线程获得。 在windows环境下一个线程中试图释放另个线程所拥有的Mutex是不会成功的,Mutex只能被所有者线程所释放。 在前面的例子中就是不允许插队。 Semaphore可以被其他进程释放 在前面的例子中就是允许插队,这样会导致超过允许服务的进程上限 共享内存实现邮箱的数据结构 由于共享内存的方法不直接提供队列功能故采用循环队列思想模拟缓冲区,下面是共享内存的头部,用来存储索引信息 struct { DWORD MsgSize; //单个消息大小:字节数 int MsgMaxCount; //消息的总数 int MsgNum; //消息的个数 int ReadIndex; //可读消息索引 int WriteIndex; //可写消息索引 }; “实时”显示内容的处理与内存泄漏50ms执行一次,所以实际上是是查询方式来实现实时显示 在此模式下可以发现一些被人遗忘的内存释放,我在实现这个函数时候发现进程占用内存和执行时间成正比,最后才发现内存泄漏的地方,尤其是读取共享内存的指针特别占内存 相关代码 声明类 enum operation {SpaceEnum,SendEnum,ReceiveEnum,MutexEnum}; typedef struct _MSGQ_HEADER { DWORD MsgSize; //单个消息大小:字节数 int MsgMaxCount; //消息的总数 int MsgNum; //消息的个数 int ReadIndex; //可读消息索引 int WriteIndex; //可写消息索引 }MSGQ_HEADER, *PMSGQ_HEADER; class CMsgQ

您可能关注的文档

文档评论(0)

wuyuetian + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档