实验报告_实验六.pdf

上传人:赵** 文档编号:20438205 上传时间:2022-06-16 格式:PDF 页数:3 大小:137.46KB
返回 下载 相关 举报
实验报告_实验六.pdf_第1页
第1页 / 共3页
实验报告_实验六.pdf_第2页
第2页 / 共3页
点击查看更多>>
资源描述

《实验报告_实验六.pdf》由会员分享,可在线阅读,更多相关《实验报告_实验六.pdf(3页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、浙江大学城市学院实验报告浙江大学城市学院实验报告课程名称操作系统原理实验实验项目名称实验六进程通信共享内存学生姓名周健专业班级计算 0907学号30901338实验成绩指导老师(签名 )日期注意:务请保存好各自的源代码,已备后用。完成本实验后,将实验项目文件和实验报告,压缩为 rar 文件,上传 ftp。如没有个人文件夹,请按学号_姓名格式建立。ftp:/huommupload:12345610.66.28.222:2007/upload文件名为:学号_日期_实验 XX,如 30801001_20100305_实验 01一. 实验目的和要求1.了解 Linux系统的进程间通信机构(IPC);2

2、.理解 Linux关于共享内存的概念;3.掌握 Linux支持进程间内存共享的系统调用;4.巩固进程同步概念。二、实验内容实现利用共享内存机制的生产者/消费者问题的解决方案。生产者将数据写入共享内存。消费者从共享内存取出数据,在屏幕输出。三、实验步骤1、运行实验指导书给出的代码,回答问题。1) 编译连接通过后,运行程序并查看运行结果。 (用截图方式说明)2) 请说明 Syetem V 使用共享内存的步骤, 并分别说明系统调用 shmget(), shmat () , shmdt()和 shmctl()的功能和使用方法。System VSystem V 要使用共享内存,应该有如下步骤:要使用共享

3、内存,应该有如下步骤:1. 1.开辟一块共享内存开辟一块共享内存 shmget()shmget()2. 2.允许本进程使用某块共享内存允许本进程使用某块共享内存 shmat()shmat()3. 3.数据写入数据写入/ /读出读出4. 4.禁止本进程使用这块共享内存禁止本进程使用这块共享内存 shmdt()shmdt()5. 5.删除这块共享内存删除这块共享内存 shmctl()shmctl()或者命令行下或者命令行下 ipcrmipcrm。使用方法:使用方法:int shmget( key_t shmkey , int shmsiz , int flag )int shmget( key_t

4、 shmkey , int shmsiz , int flag ),key_t shmkeykey_t shmkey 是这块共享内存是这块共享内存的标识符。如果是父子关系的进程间通信的话,这个标识符用的标识符。如果是父子关系的进程间通信的话,这个标识符用 IPC_PRIVIPC_PRIVATEATE 来代替。如来代替。如不是,可用不是,可用 fork()fork()算出来一个标识符使用。算出来一个标识符使用。int shmsizint shmsiz 是这块内存的大小是这块内存的大小int flagint flag 是这块内存的模式是这块内存的模式(mode)(mode)以及权限标识。以及权限标

5、识。作用:作用:shmget()shmget()是用来开辟是用来开辟/ /指向一块共享内存的函数。指向一块共享内存的函数。使用方法:使用方法:void *shmat( int shmid , char *shmaddr , int shmflag );void *shmat( int shmid , char *shmaddr , int shmflag ); int shmidint shmid是那块共享内是那块共享内存的存的 IDID。char *shmaddrchar *shmaddr是共享内存的起始地址是共享内存的起始地址int shmflagint shmflag 是本进程对该内存的

6、操作模式。如果是是本进程对该内存的操作模式。如果是 SHM_RDONLYSHM_RDONLY的话,就是只读模式。的话,就是只读模式。其它的是读写模式其它的是读写模式作用:作用:shmat( )shmat( )是用来允许本进程访问一块共享内存的函数。是用来允许本进程访问一块共享内存的函数。使用方法:使用方法:int shmdt( char *shmaddr );int shmdt( char *shmaddr );char *shmaddrchar *shmaddr是那块共享内存的起始地址。是那块共享内存的起始地址。作用:作用:shmdt()shmdt()与与 shmat()shmat()相反,

7、是用来禁止本进程访问一块共享内存的函数。相反,是用来禁止本进程访问一块共享内存的函数。使用方法:使用方法:int shmctl( int shmid , int cmd , struct shmid_ds *buf );int shmctl( int shmid , int cmd , struct shmid_ds *buf ); int shmidint shmid是共享内存的是共享内存的IDID。intint cmdcmd 是控制命令,可取值如下:是控制命令,可取值如下:IPC_STIPC_STATAT 得到共享内存的状态,得到共享内存的状态,IPC_SETIPC_SET 改变共享改变共

8、享内存的状态内存的状态IPC_RMIDIPC_RMID 删除共享内存。删除共享内存。structstruct shmid_dsshmid_ds *buf*buf 是一个结构体指针。是一个结构体指针。IPC_STIPC_STATAT的时候,取得的状态放在这个结构体的时候,取得的状态放在这个结构体中。如果要改变共享内存的状态,用这个结构体指定。中。如果要改变共享内存的状态,用这个结构体指定。作用:作用:shmctlshmctl实现对共享内存区域的控制操作。实现对共享内存区域的控制操作。3) 阐述共享内存相对于其他进程间通信方法(信号,消息队列,管道)的优缺点。优点:共享内存允许两个或多个进程共享一

9、给定的存储区,因为数据不需要来回复制,优点:共享内存允许两个或多个进程共享一给定的存储区,因为数据不需要来回复制,所以是最快的一种进程间通信机制。所以是最快的一种进程间通信机制。 (对于像管道和消息队列等通信方式,则需要在内(对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据:而共享内存则只拷贝两次数据:一次从输入文件到一次从输入文件到共享内存区,另一次从共享内存区到输出文件。共享内存区,另一次从共享内存区到输出文件。 )采用共享内存的通信方式效率是非常)采用共享内存的通信方式效率是非常高的。高的。缺点:进程间需

10、要共享的数据被放在一个叫做缺点:进程间需要共享的数据被放在一个叫做 IPCIPC 共享内存区域的地方,所有需要访共享内存区域的地方,所有需要访问该共享区域的进程都要把该共享区域映射到本进程的地址空间中去。问该共享区域的进程都要把该共享区域映射到本进程的地址空间中去。由于多个进程共享同一块内存区域,由于多个进程共享同一块内存区域, 必然需要某种同步机制,必然需要某种同步机制, 互斥锁和信号量都可以互斥锁和信号量都可以 (进(进程使用临界资源需要同步)程使用临界资源需要同步) 。2、编写程序:试编写程序,实现父进程和子进程通过共享内存实现信息的交换。例如:子进程先将子进程号写入共享内存,父进程将内容读出并显示。随后,父进程将父进程号写入同一块共享内存,要求子进程读出并显示。四、讨论、心得记录实验感受、 上机过程中遇到的困难及解决办法、 遗留的问题、 意见和建议等。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com