操作系统实验4-4实验报告(共8页).docx

上传人:飞****2 文档编号:14453460 上传时间:2022-05-04 格式:DOCX 页数:8 大小:31.22KB
返回 下载 相关 举报
操作系统实验4-4实验报告(共8页).docx_第1页
第1页 / 共8页
操作系统实验4-4实验报告(共8页).docx_第2页
第2页 / 共8页
点击查看更多>>
资源描述

《操作系统实验4-4实验报告(共8页).docx》由会员分享,可在线阅读,更多相关《操作系统实验4-4实验报告(共8页).docx(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上操作系统实验报告实验4-4: Linux共享存储通信1. 实验目的(1) 掌握Linux提供的共享存储区通信方式的使用方法。(2) 了解共享存储区通信方法的特点。(3) 了解实现进程间通信的不同方法之间的区别、特点和适用情况。2. 实验内容(1)编写发送信息程序shmsnd.c和接受信息程序shmrcv.c,其功能分别为: /shmsnd.c/ 创建一个共享存储区间; 将它附接到自己的地址空间; 循环写入若干信息,以“end”结束(提示:信息以追加方式存放到共享区中,可以用strcat()函数实现追加); 断开共享区; 结束。 /shmrcv.c/ 创建/获取同一个共

2、享存储区; 将它附接到自己的地址空间; 输入其中已经由发送地方输入的内容; 断开共享区 删除共享区 结束。 采用先执行发送进程、后执行接受进程来实现同步。 (2) 父进程创建一个共享存储区,然后创建子进程;采用终端实现父进程发送信息和子进程接受信息的同步;信息以“end”作为结束标志。3. 实验思考(1) 共享存储区间通信有哪些优点?使用上有哪些限制?适用于哪种场合?答:优点:这种通讯方式允许多个进程共享同一块物理内存空间来实现进程之间的信息交换,取消了中间环节是同一个计算机系统中多个进程间实现通讯的最快捷的方法。限制:共享内存必须共处同一个计算机系统,有物理内存可以共享才行。适用:同一台电脑

3、。(2) 总结共享存储区通信与消息缓冲通信、管理通信方式各有哪些特点?答:共享存储区通信:快捷、信息量大,但是不带同步工具,同步和互斥问题需要各进程利用其他同步工具解决,而且要求这些进程都在同一存储介质上运行,不方便网络通信。消息缓冲通信:可以在任意进程之间通信,并且自带同步工具,使用方便,但是信息复制消耗CPU的时间,不适宜信息量大或操作频繁的场合。管理通信:方便简单,但工作在单项通信方式,且只能在创建它的进程及其子孙进程之间共享。4. 实验代码4-4-1:#include#include#include#include#include#include#includemain()int sh

4、mid,running=1;char *viraddr;char bufferBUFSIZ;shmid=shmget(1234,BUFSIZ,0666|IPC_CREAT);viraddr=shmat(shmid,0,0);while(running)puts(Enter some text:);fgets(buffer,BUFSIZ,stdin);strcat(viraddr,buffer);if(strncmp(buffer,end,3)=0)running=0;shmdt(viraddr);exit(0);#include#include#include#include#include#

5、include#includemain()int shmid;char *viraddr;shmid=shmget(1234,BUFSIZ,0666|IPC_CREAT);viraddr=shmat(shmid,0,0);printf(Your message is:n%s,viraddr);shmdt(viraddr);shmctl(shmid,IPC_RMID,0);exit(0);4-4-2:#include#include#include#include#include#include#include#includevoid int_func(int sig);int k;void i

6、nt_func(int sig) /*定义中断后要执行的函数*/k=0; /*修改循环变量的值*/main() int chld,shmid,running=1; char *viraddr1,*viraddr2; char bufferBUFSIZ; signal(SIGUSR1,int_func);/*预置信号对应的函数*/ k=1; shmid=shmget(1234,BUFSIZ,0666|IPC_CREAT); /*创建共享存储区*/ while(chld=fork()=-1); if(chld0) viraddr1=shmat(shmid,0,0); /*将共享存储区附接到父进程的

7、虚地址空间*/while(running) /*循环输入消息内容*/ puts(Enter some text:); fgets(buffer,BUFSIZ,stdin); strcat(viraddr1,buffer); /*采用追加方式输入信息*/ if(strncmp(buffer,end,3)=0) /*输入为end结束*/ running=0;shmdt(viraddr1); /*断开附接*/kill(chld,SIGUSR1); /*父进程向子进程发软中断信号*/wait(0); shmctl(shmid,IPC_RMID,0); /*删除共享内存*/exit(0); else w

8、hile(k=1); /*循环等待父进程发软中断信号*/ /*收到信号后接受消息*/viraddr2=shmat(shmid,0,0); /*将共享存储区附接到子进程的虚地址空间*/ printf(Your message is :n%s,viraddr2); /*输出信息内容*/ shmdt(viraddr2); /*断开附接*/exit(0); 5. 程序运行结果4-4-1:4-4-2:6. 实验心得 经过这次试验我学会了如何在LINUX的环境下实现共享存储通信,这种通信方式快捷,而且容量信息量大,并且学会了进程之间同步的方法,但是在实验过程中还是发现了很多不足,在今后的学习中慢慢体会程序中的思想和方式,提高自己的水平。专心-专注-专业

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

当前位置:首页 > 教育专区 > 教案示例

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁