操作系统实验4-4实验报告
更新时间:2023-03-09 07:12:01 阅读量: 综合文库 文档下载
- 操作系统的主要功能有哪些推荐度:
- 相关推荐
操作系统实验报告
实验4-4: Linux共享存储通信
1. 实验目的
(1) 掌握Linux提供的共享存储区通信方式的使用方法。 (2) 了解共享存储区通信方法的特点。
(3) 了解实现进程间通信的不同方法之间的区别、特点和适用情况。
2. 实验内容
(1)编写发送信息程序shmsnd.c和接受信息程序shmrcv.c,其功能分别为: //shmsnd.c//
① 创建一个共享存储区间; ② 将它附接到自己的地址空间;
③ 循环写入若干信息,以“end”结束(提示:信息以追加方式存放到共享区中,可以用strcat()函数实现追加); ④ 断开共享区; ⑤ 结束。 //shmrcv.c//
① 创建/获取同一个共享存储区; ② 将它附接到自己的地址空间; ③ 输入其中已经由发送地方输入的内容; ④ 断开共享区 ⑤ 删除共享区 ⑥ 结束。
采用先执行发送进程、后执行接受进程来实现同步。
(2) 父进程创建一个共享存储区,然后创建子进程;采用终端实现父进程发送信息和子进程接受信息的同步;信息以“end”作为结束标志。
3. 实验思考
(1) 共享存储区间通信有哪些优点?使用上有哪些限制?适用于哪种场合?
答:优点:这种通讯方式允许多个进程共享同一块物理内存空间来实现进程之间的信息交换,取消了中间环节是同一个计算机系统中多个进程间实现通讯的最快捷的
方法。
限制:共享内存必须共处同一个计算机系统,有物理内存可以共享才行。 适用:同一台电脑。
(2) 总结共享存储区通信与消息缓冲通信、管理通信方式各有哪些特点?
答:共享存储区通信:快捷、信息量大,但是不带同步工具,同步和互斥问题需要各进程利用其他同步工具解决,而且要求这些进程都在同一存储介质上运行,不方便网络通信。
消息缓冲通信:可以在任意进程之间通信,并且自带同步工具,使用方便,但是信息复制消耗CPU的时间,不适宜信息量大或操作频繁的场合。
管理通信:方便简单,但工作在单项通信方式,且只能在创建它的进程及其子孙进程之间共享。
4. 实验代码 4-4-1: ①
#include
int shmid,running=1; char *viraddr; char buffer[BUFSIZ];
shmid=shmget(1234,BUFSIZ,0666|IPC_CREAT); viraddr=shmat(shmid,0,0); while(running) {
puts(\fgets(buffer,BUFSIZ,stdin); strcat(viraddr,buffer);
}
if(strncmp(buffer,\
running=0;
shmdt(viraddr); exit(0); }
②
#include
shmid=shmget(1234,BUFSIZ,0666|IPC_CREAT); viraddr=shmat(shmid,0,0);
printf(\ shmdt(viraddr);
shmctl(shmid,IPC_RMID,0); exit(0); }
4-4-2:
#include
void int_func(int sig) { k=0; }
/*修改循环变量的值*/
/*定义中断后要执行的函数*/
main() {
int chld,shmid,running=1; char *viraddr1,*viraddr2; char buffer[BUFSIZ]; signal(SIGUSR1,int_func); k=1;
shmid=shmget(1234,BUFSIZ,0666|IPC_CREAT); /*创建共享存储区*/ while((chld=fork())==-1); if(chld>0) {
viraddr1=shmat(shmid,0,0); /*将共享存储区附接到父进程的虚地址空间*/ while(running) /*循环输入消息内容*/ { }
shmdt(viraddr1); /*断开附接*/
kill(chld,SIGUSR1); /*父进程向子进程发软中断信号*/ wait(0); exit(0);
fgets(buffer,BUFSIZ,stdin);
strcat(viraddr1,buffer); /*采用追加方式输入信息*/ if(strncmp(buffer,\ /*输入为\结束*/ running=0;
/*预置信号对应的函数*/
puts(\
shmctl(shmid,IPC_RMID,0); /*删除共享内存*/ } else {
while(k==1); /*循环等待父进程发软中断信号*/ /*收到信号后接受消息*/
viraddr2=shmat(shmid,0,0); /*将共享存储区附接到子进程的虚地址空间*/ printf(\ /*输出信息内容*/ shmdt(viraddr2); /*断开附接*/ }
exit(0); }
5. 程序运行结果 4-4-1:①
②
4-4-2:
6. 实验心得
经过这次试验我学会了如何在LINUX的环境下实现共享存储通信,这种通信方式快
捷,而且容量信息量大,并且学会了进程之间同步的方法,但是在实验过程中还是发现了很多不足,在今后的学习中慢慢体会程序中的思想和方式,提高自己的水平。
正在阅读:
操作系统实验4-4实验报告03-09
第一次一个人在家作文600字06-21
委托书模板02-22
2016四川二本录取时间02-08
上海市商业建筑现状与发展方向 - 图文04-08
春暖花开作文600字06-17
下课十分钟作文350字06-26
票据法修改10-16
成语故事_成语故事大全_成语典故08-01
科普知识竞赛宣传语-教学范文03-23
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 实验
- 操作系统
- 报告