实验六 进程间通信-共享存储区

实验六 进程间通信-共享存储区

ID:12330684

大小:37.00 KB

页数:5页

时间:2018-07-16

实验六 进程间通信-共享存储区_第1页
实验六 进程间通信-共享存储区_第2页
实验六 进程间通信-共享存储区_第3页
实验六 进程间通信-共享存储区_第4页
实验六 进程间通信-共享存储区_第5页
资源描述:

《实验六 进程间通信-共享存储区》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验六进程间通信―共享存储区的创建、附接和断接实验目的了解和熟悉共享存储机制实验内容编制一长度为1k的共享存储区发送和接收的程序。程序设计(1)为了便于操作和观察结果,用一个程序作为“引子”,先后fork()两个子进程,SERVER和CLIENT,进行通信。(2)SERVER端建立一个key为75的共享区,并将第一个字节设置为-1,。作为数据空的标志。等待其他进程发来的消息。当字节的值发生变化时,表示收到了信息,进行处理。然后再次把它的值设为-1。如果遇到的值为0,则视为结束信号,取消该队列,并退出S

2、ERVER。SERVER每接收到一个数据后显示“(server)receive”。(3)CLIENT端建立一个key为75的共享区,当共享取得第一个字节为-1时,Server端空闲,可发送请求。CLIENT随即填入9到0。期间等待server端的再次空闲。进行完这些操作后,CLIENT退出。CLIENT每发出一次数据后显示“(client)sent”。(4)父进程在SERVER和CLIENT均退出后结束。实验指导一、共享存储区1、共享存储区机制的概念共享存储区(ShareMemory)是UNIX系统中

3、通信速度最高的一种通信机制。该机制可使若干进程共享主存中的某一个区域,且使该区域出现(映射)在多个进程的虚地址空间中。另一方面,一个进程的虚地址空间中又可连接多个共享存储区,每个共享存储区都有自己的名字。当进程间欲利用共享存储区进行通信时,必须先在主存中建立一共享存储区,然后将它附接到自己的虚地址空间上。此后,进程对该区的访问操作,与对其虚地址空间的其它部分的操作完全相同。进程之间便可通过对共享存储区中数据的读、写来进行直接通信。图示列出二个进程通过共享一个共享存储区来进行通信的例子。其中,进程A将建

4、立的共享存储区附接到自己的AA’区域,进程B将它附接到自己的BB’区进程A的虚空间内存空间进程B的虚空间正文数据栈共享存储区正文数据BB’栈AA’应当指出,共享存储区机制只为进程提供了用于实现通信的共享存储区和对共享存储区进行操作的手段,然而并未提供对该区进行互斥访问及进程同步的措施。因而当用户需要使用该机制时,必须自己设置同步和互斥措施才能保证实现正确的通信。二、涉及的系统调用1、shmget()创建、获得一个共享存储区。系统调用格式:shmid=shmget(key,size,flag)该函数使用

5、头文件如下:#include#include#include参数定义intshmget(key,size,flag);key_tkey;intsize,flag;其中,key是共享存储区的名字;size是其大小(以字节计);flag是用户设置的标志,如IPC_CREAT。IPC_CREAT表示若系统中尚无指名的共享存储区,则由核心建立一个共享存储区;若系统中已有共享存储区,便忽略IPC_CREAT。附:操作允许权八进制数用户可读00

6、400用户可写00200小组可读00040小组可写00020其它可读00004其它可写00002控制命令值IPC_CREAT0001000IPC_EXCL0002000例:shmid=shmget(key,size,(IPC_CREAT

7、0400))创建一个关键字为key,长度为size的共享存储区2、shmat()共享存储区的附接。从逻辑上将一个共享存储区附接到进程的虚拟地址空间上。系统调用格式:virtaddr=shmat(shmid,addr,flag)该函数使用头文件如下:#include

8、ys/types.h>#include#include参数定义char*shmat(shmid,addr,flag);intshmid,flag;char*addr;其中,shmid是共享存储区的标识符;addr是用户给定的,将共享存储区附接到进程的虚地址空间;flag规定共享存储区的读、写权限,以及系统是否应对用户规定的地址做舍入操作。其值为SHM_RDONLY时,表示只能读;其值为0时,表示可读、可写;其值为SHM_RND(取整)时,表示操作系统在必要时

9、舍去这个地址。该系统调用的返回值是共享存储区所附接到的进程虚地址viraddr。3、shmdt()把一个共享存储区从指定进程的虚地址空间断开。系统调用格式:shmdt(addr)该函数使用头文件如下:#include#include#include参数定义intshmdt(addr);charaddr;其中,addr是要断开连接的虚地址,亦即以前由连接的系统调用shmat()所返回的虚

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。