进程通信-用共享内存和PV操作实现邮箱通信.pptVIP

进程通信-用共享内存和PV操作实现邮箱通信.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
共享存储区机制 共享存储区(Shared Memory)机制是UNIX系统中通信速度最高的一种通信机制。该机制一方面可使若干进程共享主存中的某个区域,且使该区域出现在多个进程的虚地址空间中。另一方面,在一个进程的虚地址空间中又可连接多个共享存储区,每个共享存储区都有自己的名字。当进程间欲利用共享存储区进行通信时,须首先在主存中建立一个共享存储区,然后将该区附接到自己的虚地址空间上。此后,进程之间便可通过对共享存储区中数据的读和写来实现直接通信。 共享存储区机制 共享内存通常由一个进程创建,其余进程对这块内存区进行读写。 int shmget(key_t key, int size, int flag); /* 获得一个共享存储标识符 */ 该函数使得系统分配size大小的内存用作共享内存; void *shmat(int shmid, void *addr, int flag); /* 将共享内存连接到自身地址空间中*/ shmid为shmget函数返回的共享存储标识符,addr和flag参数决定了以什么方式来确定连接的地址,函数的返回值即是该进程数据段所连接的实际地址。此后,进程可以对此地址进行读写操作访问共享内存。 while(1){ printf(please input the order:\n); scanf( %c,c); if(c==r) { printf(port b receive..\n); p(Bfull); printf(port b receive mail %s sucessfully\n,addr-ch); addr++; shmdt(addr); v(Bavail);} if(c==b) { printf(input the content:\n); scanf(%s,w.ch);} else if(c==s){ printf(port b send..); p(Aavail); strcpy(addr2-ch,w.ch); printf(send mail:%s sucessfully\n,(*addr2).ch); addr2++; v(Afull); } else if(c==c) { strcpy(w.ch,); printf(cancel the mail!\n);}} return 0;} 实际实验结果 实际实验结果 缺点与不足 程序存在不稳定性,在运行时,有时会出现段错误。 两个程序在一台机子上运行,难以做到两个窗口同时输入命令。 程序还存在诸多不足,例如必须先开具有信号量设置的进程,才能使信号量有共同的初值。 计算机操作系统教程实验 ——进程通信 08级计算机1班 小组成员:郭静男 陈明 敖炳 实验目的 掌握用邮箱方式进行进程通信的方法,并通过设计实现简单邮箱理解进程通信中的同步问题以及解决该问题的方法。 实验原理 邮箱机制类似于日常使用的信箱。对于用户而言使用起来比较方便,用户只需使用send()向对方邮箱发邮件 receive()从自己邮箱取邮件, send()和 receive()的内部操作用户无需关心。因为邮箱在内存中实现,其空间有大小限制。其实send()和 receive()的内部实现主要还是要解决生产者与消费者问题。 实验内容 进程通信的邮箱方式由操作系统提供形如send()和receive()的系统调用来支持,本实验要求学生首先查找资料了解所选用操作系统平台上用于进程通信的系统调用具体形式,然后使用该系统调用编写程序进行进程间的通信,要求程序运行结果可以直观地体现在界面上。在此基础上查找所选用操作系统平台上支持信号量机制的系统调用具体形式,运用生产者与消费者模型设计实现一个简单的信箱,该信箱需要有创建、发信、收信、撤销等函数,至少能够支持两个进程互相交换信息,比较自己实现的信箱与操作系统本身提供的信箱,分析两者之间存在的异同。 实验内容 进程A 进程B 信箱A 信箱B Send() Send() receive() receive() 背景知识介绍 实验所涉及的理论知识: 进程间通信: 1.邮箱通信的工作方式 2.信号量的使用 3.共享存储区 4.PV操作 邮箱通信的工作方式 邮箱通信是由发送进程申请建立一语接收进程连接的邮箱。 它最大的好处就是发送进程和接收进程间没有处理时间上的限制。 邮箱应满足的条件: 1.发送进程发消息时,邮箱中至少要有一个空格能存放该消息。 2.接收进程接收消息时,邮箱中至少要有一个消息存在。 信号量的使用 三个重要函数: 1.Semget(); 2.Semop()

文档评论(0)

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

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

1亿VIP精品文档

相关文档