网站大量收购闲置独家精品文档,联系QQ:2885784924

操作系统原理进程通信共享内存.docx

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统原理进程通信共享内存

课程实践报告书课程名称: 操作系统原理 题 目: 进程通信-共享内存 学生姓名: 专 业: 计算机科学与技术(网络方向) 班 别: 计科本113班 学 号: 1104402308 指导老师: 日 期: 2013 年 06 月 25 日目录一、基本要求3二、流程图分析3三、共享内存描述和使用103.1共享内存的概述103.2共享内存的原理113.3共享内存的分配123.4 共享内存的访问133.5共享内存的应用133.6共享内存的意义14四、实验构思144.1 main()的使用144.2 shmget()调用164.3 fork()的调用164.4 子进程调用shmat()174.5子进程调用shmdt()174.6 父进程调用 shmctl()174.7父进程调用shmat(),shmdt(),shmctl()18五、实验的调试与测试18六、实验结果20七、源程序21八、实验感受23九、参考文献24一、基本要求1.1实验题目:进程通信共享内存1.2实践目的:用代码实现进程通信共享内存1.3实践内容:用C语言代码创建进程,实现进程通信共享内存(父进程和子进程通过共享内存实现信息的交流)1.4实验环境:linux操作系统及gcc工具二、流程图分析 图1-1如图1-1首先父进程调用shmget()函数建立一个共享内存,该函数返回一内存的标识符。 图1-2如图1-2父进程调用fork()产生一个子进程 图1-3如图1-3子进程调用shmat()函数将该共享内存连接到自己的虚存空间中 图1-4如图1-4写完数据后,子进程调用shmdt()函数断开与该进程的连接 如图1-5如图1-5父进程调用shmctl()函数得到关于这块共享内存的相关信息,并打印出来 图1-6如图1-6父进程调用shmat()函数将这块共享内存连接到自己的虚存空间图1-7如图1-8父进程调用shmdt()函数断开与该共享内存的连接 图1-8如图1-8父进程调用shmctl()函数,销毁该共享进程。三、共享内存描述和使用3.1共享内存的概述 针对消息缓冲需要占用CPU进行消息复制的缺点,操作系统提供了一种进程间直接进行数据交换的通信方式——共享内存。顾名思义,这种通信方式允许多个进程共享同一块物理内存空间来实现进程之间的信息交换,其特点是没有中间环节,直接将共享的内存页面通过附接,映射到相互通信的进程各自的虚拟地址空间中,从而使多个进程可以直接访问同一个物理内存页面,如同访问自己的私有空间一样(但实质上不是私有的而是共享的)。因此这种进程间通信方式是在同一个计算机系统中的诸进程间实现通信的最快捷的方法,而它的局限性也在于此,即共享内存的诸进程必须共处同一个计算机系统,有物理内存可以共享才行。 3.2共享内存的原理共享内存是由IPC为一个进程所创建并且出现在这个进程的地址空间中的一段特殊的地址序列。其他的进程可以将同样的共享内存段关联到他们自己的地址空间中。所有的进程都可以访问这段内存地址,就如同这段内存是由malloc所分配的。如果一个进程写入共享内存,这些改变立即就可以为访问相同共享内存的其他进程所见。 就其自身而言,共享内存并没有提供任何共享方法。并没有自动的方法来阻止在第一个进程完成写入共享内存之前第二个进程开始读取共享内存。 3.3共享内存的分配要使用一块共享内存,进程必须首先分配它。随后需要访问这个共享内存块的每一个进程都必须将这个共享内存绑定到自己的/view/1507129.htm地址空间中。当完成通信之后,所有进程都将脱离共享内存,并且由一个进程释放该共享内存块。 尽管每个进程都有自己的/view/404417.htm内存地址,不同的进程可以同时将同一个内存页面映射到自己的/view/1507129.htm地址空间中,从而达到共享内存的目的。分配一个新的共享内存块会创建新的内存页面。因为所有进程都希望共享对同一块内存的访问,只应由一个进程创建一块新的共享内存。再次分配一块已经存在的内存块不会创建新的页面,而只是会返回一个标识该内存块的/view/390932.htm标识符。一个进程如需使用这个共享内存块,则首先需要将它绑定到自己的/view/1507129.htm地址空间中。这样会创建一个从进程本身虚拟地址到共享页面的映射关系。当对共享内存的使用结束之后,这个映射关系将被删除。当再也没有进程需要使用这个共享内存块的时候,必须有一个(且只能是一个)进程负责释放这个被共享的内存页面。 所有共享内存块的大小都必须是系统页面大小的整数倍。系统页面大小指的是系统中单个内存页面包含的字节数。进程通过调用shmget来分配一个共享内存块。该函数的第二个参数指定了所申请的内存块的大小。因为这些内存块是以页面为单位进行分配的,实际分配

您可能关注的文档

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档