操作系统实验 进程通信

操作系统实验 进程通信

ID:9416601

大小:521.00 KB

页数:9页

时间:2018-04-30

操作系统实验 进程通信_第1页
操作系统实验 进程通信_第2页
操作系统实验 进程通信_第3页
操作系统实验 进程通信_第4页
操作系统实验 进程通信_第5页
资源描述:

《操作系统实验 进程通信》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、进程通信(实验二)【实验目的】:掌握用邮箱方式进行进程通信的方法,并通过设计实现简单邮箱理解进程通信中的同步问题以及解决该问题的方法。【实验原理】:邮箱机制类似于日常使用的信箱。对于用户而言使用起来比较方便,用户只需使用send()向对方邮箱发邮件receive()从自己邮箱取邮件,send()和receive()的内部操作用户无需关心。因为邮箱在内存中实现,其空间有大小限制。其实send()和receive()的内部实现主要还是要解决生产者与消费者问题。进程A进程B信箱A信箱BSend()Send()receive()receive()【实验内容】

2、:进程通信的邮箱方式由操作系统提供形如send()和receive()的系统调用来支持,本实验要求学生首先查找资料了解所选用操作系统平台上用于进程通信的系统调用具体形式,然后使用该系统调用编写程序进行进程间的通信,要求程序运行结果可以直观地体现在界面上。在此基础上查找所选用操作系统平台上支持信号量机制的系统调用具体形式,运用生产者与消费者模型设计实现一个简单的信箱,该信箱需要有创建、发信、收信、撤销等函数,至少能够支持两个进程互相交换信息,比较自己实现的信箱与操作系统本身提供的信箱,分析两者之间存在的异同。实验背景介绍进程间通信有如下目的:数据的传输

3、,共享数据,通知事情,资源共享,进程控制。进程间的通信机制(IPC),就是多进程相互通信,交换信息的方法。LinuxIPC机制包括,信号和管道是其中的两个,还支持传统的UNIXSYSTM-V的IPC机制。信号主要用来通知进程异步事情的发生,最初信号设计的目的是为了处理错误,他们也用来作为最基本的IPC机制。管道是单向的,先进先出,先入先出,无结构的,固定大小的数据流。UNIXSystemV机制中的三种进程间通信机制,它们是:消息队列:用于进程之间传递分类的格式化数据信号量:用于通信之间的同步控制。信号量通常与共享存储器方式一起使用。共享内存:使不同进

4、程通过共享彼此的虚拟空间而达到相互对共享区操作和数据通信。它们之间有一个共同的特点,就是它们使用相同的认证方法,一个进程只有通过系统调用想内核传递一个唯一的引用标识符才能访问这些资源。实验环境:ubuntulinux操作系统实验原理分析:进程A和进程B共享内存C和D,并通过用P,V原理来控制它们对共享内存的读写。共享内存通过PV控制读写。信号量S0,S1,S2,S3其中S0,S1控制C,S2,S3控制D。其中S0表示内存中有几个信息,S1表示内存还可以存几个信息。同理可得S2,S3.PV简略图:进程A:发送信息......P(S1)Send()V(S

5、0)……接受消息……P(S2)Receive()V(S3)……..进程B:发送信息......P(S3)Send()V(S2)……接受消息……P(S0)Receive()V(S1)……..函数调用分析:共享内存的创建,读,写,删除相当于信箱的创建,收信,发信,撤销等。共享内存区域是被多个进程共享的一部分物理内存,进程可以把这些区域映射到它们地址空间的任一适合的虚拟地址范围。这些地址范围对每一个进程来说都是不同的,映射后这些区域就可以像任何其他内存位置那样被访问,而不需要对它们使用读写调用。进程向共享内存中写入数据,那么这个区域的所有进程可以立即看见共

6、享区的新内容。shmget(key_tkey,size_tsize,intshmflg);key标识共享内存的键值:0/IPC_PRIVATE。当key的取值为IPC_PRIVATE,则函数shmget()将创建一块新的共享内存;如果key的取值为0,而参数shmflg中设置了IPC_PRIVATE这个标志,则同样将创建一块新的共享内存。size是要建立共享内存的长度。shmflg主要和一些标志有关。其中有效的包括IPC_CREAT和IPC_EXCL,它们的功能与open()的O_CREAT和O_EXCL相当。IPC_CREAT如果共享内存不存在,则

7、创建一个共享内存,否则打开操作。IPC_EXCL只有在共享内存不存在的时候,新的共享内存才建立,否则就产生错误。成功返回共享内存的标识符;不成功返回-1,errno储存错误原因。例如:shmid=shmget(SHMKEY,256,IPC_CREAT

8、0600);创建了一个key=SHMKEY,大小为256的共享内存。并把值给了shmid.shmat(intshmid,char*shmaddr,intshmflag);shmat()是用来允许本进程访问一块共享内存的函数。  intshmid是那块共享内存的ID。  char*shmaddr是共享内存

9、的起始地址  intshmflag是本进程对该内存的操作模式。如果是SHM_RDONLY的话,就是只读模式。

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

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

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