付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、河南师范大学计算机学院实验报告操作系统实验报告年月日学号XXX姓名XXX时间XXX专业XXX班级XXX-实验目的:通过生产者-消费者问题的模拟,加深对进程同步、共享存储器通信的理。实验内容与步骤:1 .启动LINUX操作系统,打开终端,输入命令"vis.c进入编辑页面编写程序,主要调用的函数有:<i>shmget()创建、获得一个共享存储区。<2>shmat()共享存储区的附接。从逻辑上将一个共享存储区附接到进程的虚拟地址空间上。<3>shmdt()把一个共享存储区从指定进程的虚地址空间断开。<4>shmctl()共享存储区的控制,对其
2、状态信息进行读取和修改。2 .编译原程序在终端输入命令"gcGlrts.c"若无错误再输入命令”./a.ou即运行出结果。(注:在命令"gcc-lrts.c'中,lrt选项是编译带有信号量的程序,命令”./a.out中./a.out是默认生成的原文件。)3 .实验所需程序及运行结果如下:(1)实验源程序:#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<sys/types.h>#include<sys/ipc.h>#incl
3、ude<sys/sem.h>#include<sys/mman.h>/提供了共享内存的相关操作#include<fcntl.h>#include<sys/stat.h>unionsemunintval;structsemid_ds*buf;unsignedshort*array;arg;生成信号量河南师范大学计算机学院实验报告intsem_creat(key_tkey,intvalue)(unionsemunsem;intsemid;sem.val=value;semid=semget(key,1,IPC_CREAT|0666);if(-1=se
4、mid)(printf("createsemaphoreerrorn");exit(-1);semctl(semid,0,SETVAL,sem);returnsemid;删除信号量voiddel_sem(intsemid)(unionsemunsem;sem.val=0;semctl(semid,0,IPC_RMID,sem);/p操作intp(intsemid)(structsembufsops=0,-1,SEM_UNDO;return(semop(semid,&sops,1);/v操作intv(intsemid)河南师范大学计算机学院实验报告(structsem
5、bufsops=0,+1,SEM_UNDO;return(semop(semid,&sops,1);intbuffer;int*pData;intvalue_read=0,value_write=0;intfull,empty;voidproducer(key_t,key_t);生产者所执行的代码voidconsumer(int,int);intmain(void)key_tkeyFull,keyEmpty;intfd;pid_tpid;void*ptr;指向共享内存的指针/*shm_open是一个POSIX函数,用来打开或创建一个与“/shm联的共享内存区*/if(fd=shm_op
6、en("/shm",O_RDWR|O_CREAT,S_IRUSR|S_IWUSR)=-1)printf("shm_openerror'n");/*出错提示*/if(ftruncate(fd,(sizeof(int)*5)=-1)/*截短共享内存的长度到我们所需要的长度*/printf("ftruncateerrorn");if(ptr=mmap(0,(sizeof(int)*5),PROT_READ|PROT_WRITE,MAP_SHARED,fd,0)=MAP_FAILED)/*将共享内存映射到进程地址空间*/河南师范大学计
7、算机学院实验报告(printf("mmaperror");)pData=(int*)ptr;keyFull=ftok("/",0);keyEmpty=ftok("/",5);full=sem_creat(keyFull,0);empty=sem_creat(keyEmpty,5);switch(pid=fork()(case-1:/*生成子进程失败*/break;case0:/*子进程*/producer(keyFull,keyEmpty);/*子进程是生产者*/sleep(2);break;default:consumer(full
8、,empty);/*父进程是消费者*/break;)wait(0);shm_unlink("/shm");/*删除共享内存区,程序中基本上保证了子进程先退出,因此父进程中无wait操作且这部操作放在父进程这里*/shmctl(shmid,IPC_RMID,&buf);return0;/del_sem(semid);)河南师范大学计算机学院实验报告/*生产者写5次后退出*/voidproducer(key_tkeyFull,key_tkeyEmpty)(intin=0;full=semget(keyFull,1,0);empty=semget(keyEmpty,1,0
9、);while(value_write<10)/*退出条件判定*/(printf("PrepareWrite'n");printf("emptyWriteP1:%dn",semctl(empty,0,GETVAL,0);p(empty);/*是否有空缓冲区,有则占有,无则被挂起,是原子操作*/printf("emptyWriteP2:%dn",semctl(empty,0,GETVAL,0);value_write+;in=in+;pDatain=value_write;in=in%5;printf("in=%
10、dn",in);printf("Write:%5dn",pDatain);printf("fullWriteV1:%dn",semctl(full,0,GETVAL,0);v(full);/*写完一个缓冲区,释放信号量full(值加1)*/printf("fullWriteV2:%dn",semctl(full,0,GETVAL,0);printf("WriteFinish'n");/sleep(1);)/*消费者读5次后退出*/voidconsumer(intfull,intempty)河南师范
11、大学计算机学院实验报告(intout=0;while(value_read<10)/*退出条件判定*/(printf("PrepareRead'n");printf("fullReadP1:%dn",semctl(full,0,GETVAL,0);p(full);/*获取信-号量*/printf("fullReadP2:%dn",semctl(full,0,GETVAL,0);value_read+;out=out+;pDataout=value_read;out=out%5;printf("out=%dn&q
12、uot;,out);printf("Read:%5dn",pDataout);printf("emptyReadV1:%dn",semctl(empty,0,GETVAL,0);*/v(empty);/*读完一个缓冲区,释放信号量empty(值加1)printf("emptyReadV2:%dn",semctl(empty,0,GETVAL,0);printf("ReadFinish'n");)(2)实验运行结果:rootlocalhost#gcc-lrts.crootlocalhost#./a.outPr
13、epareWriteemptyWriteP1:5emptyWriteP2:4in=1Write:1fullWriteV1:0河南师范大学计算机学院实验报告fullWriteV2:1WriteFinishPrepareWriteemptyWriteP1:4emptyWriteP2:3in=2Write:2fullWriteV1:1fullWriteV2:2WriteFinishPrepareWriteemptyWriteP1:3emptyWriteP2:2in=3Write:3fullWriteV1:2fullWriteV2:3WriteFinishPrepareWriteemptyWriteP
14、1:2emptyWriteP2:1in=4Write:4fullWriteV1:3fullWriteV2:4WriteFinishPrepareReadfullReadP1:4PrepareWritefullReadP2:3out=1河南师范大学计算机学院实验报告Read:1emptyReadV1:1emptyReadV2:2ReadFinishPrepareReadfullReadP1:3fullReadP2:2out=2Read:2emptyReadV1:2emptyReadV2:3ReadFinishPrepareReadfullReadP1:2fullReadP2:1out=3Read
15、:3emptyReadV1:3emptyReadV2:4ReadFinishPrepareReadfullReadP1:1fullReadP2:0out=4Read:4emptyReadV1:4emptyReadV2:5ReadFinishPrepareReadfullReadP1:0emptyWriteP1:2河南师范大学计算机学院实验报告emptyWriteP2:4in=0Write:5fullWriteV1:0fullWriteV2:0fullReadP2:0out=0Read:5emptyReadV1:4emptyReadV2:5ReadFinishPrepareReadfullRea
16、dP1:0WriteFinishPrepareWriteemptyWriteP1:5emptyWriteP2:4in=1Write:6fullWriteV1:0fullWriteV2:0fullReadP2:0out=1Read:6emptyReadV1:4emptyReadV2:5ReadFinishPrepareReadfullReadP1:0WriteFinishPrepareWrite河南师范大学计算机学院实验报告emptyWriteP1:5emptyWriteP2:4in=2Write:7fullWriteV1:0fullWriteV2:0fullReadP2:0out=2Read:
17、7emptyReadV1:4emptyReadV2:5ReadFinishPrepareReadfullReadP1:0WriteFinishPrepareWriteemptyWriteP1:5emptyWriteP2:4in=3Write:8fullWriteV1:0fullWriteV2:0fullReadP2:0out=3Read:8emptyReadV1:4emptyReadV2:5ReadFinishPrepareReadfullReadP1:0WriteFinish河南师范大学计算机学院实验报告PrepareWriteemptyWriteP1:5emptyWriteP2:4in=4Write:9fullWriteV1:0fullWriteV2:0fullReadP2:0out=4Read:9emptyReadV1:4emptyReadV2:5ReadFinishPrepareReadfullReadP1:0WriteFinishPrepareWriteemptyWriteP1:5emptyWriteP2:4in=0Write:10fullWriteV1:0fullWriteV2:0fullReadP2:0out=0Read:10emptyReadV1:4emptyReadV2:5ReadFinishWriteFinish
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 路面标线涂料工期保障方案
- 疾控中心新建项目社会稳定风险评估报告
- 给排水管网更新改造工程监理规划
- 现代农业产业园项目规划设计方案
- 中医医院数据资产价值评估实施方案
- GBT 47779-2026 纺织品 机织物双轴向拉伸性能 断裂强力和断裂伸长率的测定标准立项发展报告
- 高标准农田节水灌溉施工方案
- 高中信息技术选修1字符串的应用教学设计-基于密码强度检测的项目化学习
- 小学一年级综合实践活动下册“创意剪纸”教学设计(粤教版)
- 起重设备企业销售管理制度
- 新版2026秋新教材湘美版小学美术五年级上册(全册) 教学设计合集
- 2026年青海高职单招(英语)考试试卷(真题)答案解析
- 【新教材】2026秋统编版九年级上册历史第1课 从原始社会到奴隶社会 教案
- 2026年秋季学期沪教版(五四制)新教材小学英语二年级上册教学计划及进度表
- 2026年风机故障检修考试题库(附答案)
- 浙教版一年级英语上册English for kids Grade 1A教案
- 2026中国公证协会招聘5人笔试题库(夺冠)附答案详解
- 2026年全国房地产经纪人之业务操作考试历年考试题(附答案)
- 2026年企业安全生产事故隐患排查治理制度实施指南与案例
- 钢结构网架加固改造施工方案
- 2026年度医师定期考核【执业-5】
评论
0/150
提交评论