版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机科学与技术学院实验报告实验题目:实验四、进彳是同步实验学号:日期20230409班级:计基地12姓名:实验目的:加深对并发协作进程同步与互斥概念的理解,观测和体验并发进程同步与互斥操作的效果,分析与研究经典进程同步与互斥问题的实际解决方案。了解Linux系统中IPC进程同步工具的用法,练习并发协作进程的同步与互斥操作的编程与调试技术。实验内容:抽烟者问题。假设一个系统中有三个抽烟者进程,每个抽烟者不断地卷烟并抽烟。抽烟者卷起并抽掉一颗烟需要有三种材料:烟草、纸和胶水。一个抽烟者有烟草,一个有纸,另一个有胶水。系统中尚有两个供应者进程,它们无限地供应所有三种材料,但每次仅轮流提供三种材料中的两种。得到缺失的两种材料的抽烟者在卷起并抽掉一颗烟后会发信号告知供应者,让它继续提供此外的两种材料。这一过程反复进行。请用以上介绍的IPC同步机制编程,实现该问题规定的功能。硬件环境:解决器:Intel®CoreNi3—2350MCPU@2.3OGHzX4图形:Intel®SandybridgeMobilex86/MMX/SSE2内存:4G操作系统:32位磁盘:20.1GB软件环境:ubuntul3.04实验环节:(1)新建定义了Producer和consumer共用的IPC函数原型和变量的ipc.h文献。(2)新建ipc.c文献,编写producer和consumer共用的IPC的具体相应函数。(3)新建Producer文献,一方面定义producer的一些行为,运用系统调用,建立共享内存区域,设定其长度并获取共享内存的首地址。然后设定生产者互斥与同步的信号灯,并为他们设立相应的初值。当有生产者进程在运营而其他生产者请求时,相应的信号灯就会阻止他,当共享内存区域已满时,信号等也会提醒生产者不能再往共享内存中放入内容。(4)新建Consumer文献,定义consumer的一些行为,运用系统调用来创建共享内存区域,并设定他的长度并获取共享内存的首地址。然后设定消费者互斥与同步的信号灯,并为他们设立相应的初值。当有消费进程在运营而其他消费者请求时,相应的信号灯就会阻止它,当共享内存区域已空时,信号等也会提醒生产者不能再从共享内存中取出相应的内容。
❷.⑥Ukun(0)Ukun-Lenovo-ldeaPad-Y471A:~/lab4likun@likun-Lenovo-IdeaPad-Y471A:~$cdIab4likun@likun-Lenovo-IdeaPad-Y471A:~/lab4$./consumer23319TheconsumerTheconsumergets3319TheconsumerTheconsumergets3319TheconsumerTheconsumergets3319TheconsumerTheconsumergets3319TheconsumerTheconsumergets3319TheconsumerTheconsumergets3319TheconsumerTheconsumergets3319TheconsumerTheconsumergets3319TheconsumerTheconsumergets3319TheconsumerTheconsumergets3319TheconsumerTheconsumergetshastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaper分析:hastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaperhastobacco,glueandpaper多进程的系统中避免不了进程间的互相关系。进程互斥是进程之间发生的一种间接性作用,一般是程序不希望的。通常的情况是两个或两个以上的进程需要同时访问某个共享变量。我们一般将发生可以问共享变量的程序段称为临界区。两个进程不能同时进入临界区,否则就会导致数据的不一致,产生与时间有关的错误。解决互斥问题应当满足互斥和公平两个原则,即任意时刻只能允许一个进程处在同一共享变量的临界区,并且不能让任一进程无限期地等待。进程同步是进程之间直接的互相作用,是合作进程间故意识的行为,典型的例子是公共汽车上司机与售票员的合作。只有当售票员关门之后司机才干启动车辆,只有司机停车之后售票员才干开车门。司机和售票员的行动需要一定的协调。同样地,两个进程之间有时也有这样的依赖关系,因此我们也要有一定的同步机制保证它们的执行顺序。信号量机制就是其中的一种。信号灯机制即运用Pv操作来对信号量进行解决。PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下:P(S):①将信号量S的值减1,即S=S-1;②假如S3。,则该进程继续执行;否则该进程置为等待状态,排入等待队列。V(S):①将信号量S的值加14US=S+1;②假如S>0,则该进程继续执行;否则释放队列中第一个等待信号量的进程。PV操作的意义:我们用信号量及PV操作来实现进程的同步和互斥。信号量的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程。信号量的值与相应资源的使用情况有关。当它的值大于0时,表达当前可用资源的数量;当它的值小于0时,其绝对值表达等待使用该资源的进程个数。信号量的值仅能由PV操作来改变。一般来说,信号量S3。时,S表达可用资源的数量。执行一次P操作意味着请求分派一个单位资源,因此S的值减1;当S<0时,表达已经没有可用资源,请求者必须等待别的进程释放该类资源,它才干运营下去。而执行一个V操作意味着释放一个单位资源,因此S的值加1;若S£0,表达有某些进程正在等待该资源,因此要唤醒一个等待状态的进程,使之运营下去。使用多于4个的生产者和消费者,以各种不同的启动顺序、不同的执行速率检测以上示例程序和独立实验程序也能满足同步的规定。由于使用信号量满足进程互斥的规定,任意时刻进入临界区的进程只有一个。而进程是通过信号量唤醒阻塞进程,仍然可以实现进程同步。调试过程中碰到的重要问题及解决过程:(1)在修改程序时,最开始使用了read。、scheduaI。、Iock(),但是编译出现错误。解决方法:使用sleep。函数。(2)exit()缺少头文献。解决方法:加头文献#include<stdlib.h>osleep。等Iinux系统调用缺少头文献。解决方法:加头文献#include<unistd.h>体会和收获:通过本次实验,初步了解操作系统的进程同步的过程。我对生产者-消费者问题的解决办法有了更全面的结识,同时对调试代码更加纯熟。本次实验最大的体会就是,做东西要细心,在写代码的过程中,稍不留意就给后期调试工作带来很多问题。运营的消费者应行与相应的生产者相应起来,只有这样运营结果才会对的。结论分析与体会:实现方式:Consumer:#incIude"ipc.h"intmain(intargc,char*argv口){。intrate=3;intconsumerid=atoi(argv[1]);buff_h=101;buff_number=1;cget_h=103;eget_number=1;shm_fIg=IPC_CREAT|0644;buff_ptr=(char*)set_shm(buff_h,buff_number,shm_fig);ocget_ptr=(int*)set_shm(cget_h,cget_number,shm_fIg);prod_h=201;。pmtx_h=202;cons_h=301;。cmtx_h=302;。sem_fIg=IPC_CREAT|0644;osem_vaI=buff_number;prod_sem=set_sem(prod_h,sem_vaI,sem_fIg);sem_vaI=0;ocons_sem=set_sem(cons_h,sem_vaI,sem_fIg);。sem_vaI=1;cmtx_sem=set_sem(cmtx_h,sem_vaI,sem_fig);。if(consumerid==O)。*cget_ptr=O;°whiIe(1){。if(buff_ptr[O]-'A,==consumerid){3down(cons_sem);o。down(cmtx_sem);。。sleep(rate);。oif(buff_ptr[O]='A')(ooprintf("%dTheconsumerhasglue.\nTheconsumergetstobaccoandpaper\n",getpid());0ft)o。if(buff_ptr[O]=='B'){。。printf("%dTheconsumerhaspaper.\nTheconsumergetstobaccoandgIue\n",getpid());0)if(buff_ptr[0]=='C){。o。oprintf("%dTheconsumerhastobacco.\nTheconsumergetsglueandpaper\n",getpid());0o}。*cget_ptr=(*cget_ptr+1);if(*cget_ptr%2==0)obuff_ptr[0]="D';。buff_ptr[0]='E';。。up(cmtx_sem);o3oup(prod_sem);00})breturnEXIT_SUCCESS;}Producer:#incIude"ipc.h"intmain(intargc,char*argv[]){。intrate=3;。intproducerid=atoi(argv[1]);。buff_h=101;buff_number=1;。pput_h=102;pput_number=1;shm_fIg=lPC_CREAT|0644;fbuff_ptr=(char)set_shm(buff_h,buff_number,shmpput_ptr=(int*)set_shm(pput_h,pput_number,shm_fIg);prod_h=201;pmtx_h=202;®cons_h=301;cmtx_h=302;osem_fIg=IPC_CREAT|0644;sem_vaI=buff_number;prod_sem=set_sem(prod_h,sem_vaI,sem_fIg);sem_vaI=0;conssem=setsem(consh,semvaI,semfIg);sem_vaI=1;pmtx_sem=set_sem(pmtx_h,sem_vaI,sem_fIg);oif(producerid==0){obuff_ptr[0]='D';*pput_ptr=0;。)whiIe(1){。if(buff_ptr[0]-"D'~producerid){o。down(prod_sem);®o。down(pmtx_sem);®*pput_ptr=(*pput-ptr+1)%3;。if(*pput_ptr==0){。。buff_ptr[0]='A';o6oprintf("%dTheproducergivestobaccoandpaper\n",getpid());00)。。if(*pput-ptr==1){。o。buff_ptr[0]='B';3oprintf("%dTheproducergivestobaccoandgIue\n",getpid());6O}。。if(*pput_ptr==2){o。。buff_ptr[0]='C';。oprintf("%dTheproducergivesglueandpaper\n",getpid());00}osIeep(rate);。up(pmtx_sem);。。up(cons_sem);))。returnEXIT_SUCCESS;Ipc.h:#incIude"ipc.h"intget_ipc_id(char*proc_fiIe,h_th){。FILE*pf;intm,n;ocharline[BUFSZ],colum[BUFSZ];if((pf=fopen(proc_fiIe,"r"))==NULL)(。perror("ProcfiIenotopen");exit(EXIT_FAILURE);0)fgets(line,BUFSZ,pf);。whiIe(!feof(pf))(om=n=0;fgets(Iine,BUFSZ,pf);。while(Iine[m]=='')0om++;whiIe(Iine[m]!='')。o。coIum[n++]=line[m++];。coIum[n]='\0';。if(atoi(colum)!=h)ocontinue;。n=0;whiIe(Iine[m]=='')o®m++;while(line[m]!='')°ocoIum[n++]=Iine[m++];colum[n]='\0';m=atoi(coIum);。fcIose(pf);。returnm;。)。fclose(pf);return—1;]intdown(intsem_id)(ostructsembufbuf;obuf.sem_op=-1;。buf.sem_number=0;buf.sem_fIg=SEM_UND0;。if((semop(sem_id,&buf,1))<0){®perror("downerror");ooexit(EXIT_FAILURE);。)returnEXIT_SUCCESS;1intup(intsem_id)(structsembufbuf;buf.sem_op=1;buf.sem_number=0;buf.sem_fIg=SEM_UND0;oif((semop(semid,&buf,1))<0){。perror("uperror");。exit(EXIT_FAILURE);)。returnEXITSUCCESS;1intset_sem(h_tsem_h,intsem_vaI,intsem_fIg){intsem_id;Sem_unssem_arg;。if((sem_id=get_ipc_id("/proc/sysvipc/sem",sem_h))<0)(。if((sem_id=semget(sem_h,1,sem_fIg))<0){operror("semaphorecreateerror");ooexit(EXIT_FAILURE);00)。»sem_arg.vaI-sem_vaI;。if(semctI(sem_id,0,SETVAL,sem_arg)<0){3perror("semaphoreseterror");exit(EXIT_FAILURE);。1)returnsem_id;]一char*set_shm(h_tshm_h,intshm_number,intshm_fIg){ointm,shm_id;char*shm_buf;oif((shm_id=get_ipc_id("/proc/sysvipc/shm",shm_h))<0)(一一if((shm_id=shmget(shm_h,shm_number,shm_fIg))<0)(。。perror("shareMemoryseterror");3exit(EXIT_FAILURE);00)。oif((shm_buf=(char*)shmat(shm_id,0,0))<(char*)0)(operror("getshareMemoryerror");exit(EXIT_FAILURE);。)。。for(m=0;m<shm_number;m++)。shm_buf[m]=0;0)if((shm_buf=(charshmat(shm_id,0,0))<(char*)0){。perror("getshareMemoryerror");exit(EXIT_FAILURE);0)。returnshm_buf;1intset_msq(h_tmsq_h,intmsq_fIg){intmsq_id;®if((msq_id=get_ipc_id("/proc/sysvipc/msg",msq_h))<0)(。oif((msq_id=msgget(msq_h,msq_fIg))<0){。。perror("messageQueueseterror");。。exit(EXIT_FAILURE);})。returnmsq_id;}实验结果:❷.⑥Ukun(0)Ukun-Lenovo-ldeaPad-Y471A:~/lab4likun@likun-Lenovo-IdeaPad-Y471A:~$cdIab4likun@ltkun-Lenovo-IdeaPad-Y471A:~/lab4$./producer0
3320Theproducergivestobaccoandglue3320Theproducergivesglueandpaper3320Theproducergivestobaccoandglue3320Theproducergivestobaccoandpaper3320Theproducergivesglueandpaper3320Theproducergivestobaccoandglue3320Theproducergivestobaccoandpaper3320Theproducergivesglueandpaper3320Theproducergivestobaccoandglue3320Theproducergivestobaccoandpaper3320Theproducergivesglueandpaper3320Theproducergivestobaccoandglue3320Theproducergivestobaccoandpaper3320Theproducergivesglueandpaper3320Theproducergivestobaccoandglue3320Theproducergivestobaccoandpaper6—管Ukun(0)Ukun-Lenovo-ldeaPad-Y471A:~/lab4likunglikun-Lenovo-IdeaPad-Y471A:*/lab4$./producer13321Theproducergivestobaccoandpaper3321Theproducergivesglueandpaper3321Theproducergivestobaccoandglue3321Theproducergivestobaccoandpaper3321Theproducergivesglueandpaper3321Theproducergivestobaccoandglue3321Theproducergivestobaccoandpaper3321Theproducergivesglueandpaper3321Theproducergivestobaccoandglue3321Theproducergivestobaccoandpaper3321Theproducergivesglueandpaper3321Theproducergivestobaccoandglue3321Theproducergivestobaccoandpaper3321Theproducergivesglueandpaper3321Theproducergivestobaccoandglue3321Theproducergivestobaccoandpaper3321Theproducergivesglueandpaper3321Theproducergivestobaccoandglue3321Theproducergivestobaccoandpaper3321Theproducergivesglueandpaper3321Theproducergivestobaccoandglue3321Theproducergivestobaccoandpaper1❷一⑥Ukun(fl)Ukun-Lenovo-ldeaPad-Y471A:~/lab4
Itkun@ltkun-Lenovo-IdeaPad-Y471A:,lab4$./consumer©bash:./consumerQ:没有那个文件或目录likunglikun-Lenovo-IdeaPad-Y471A:~/Lab4$3096Theconsumerhasglue../consumer0Theconsumergets3096Theconsumertobaccoandhasglue.paperTheconsumergets3096Theconsumertobaccoandhasglue.paperTheconsumergets3096Theconsumertobaccoandhasglue.paperTheconsume
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度健身服务会员合同说明
- 2024年度特许经营合同(具体经营范围和许可条件)
- 2024年度旅游服务管理合同
- 2024年度智能工厂生产线升级与维护合同
- 2024年度深圳光伏发电项目合同
- 自行车减震器市场需求与消费特点分析
- 水上起重机市场需求与消费特点分析
- 04版两托盘租赁合同:租赁物的维修与保养责任
- 化妆用过氧化氢市场发展现状调查及供需格局分析预测报告
- 2024年度二手房交易新政推行合同
- 小学道法小学道法1我们的好朋友--第一课时ppt课件
- 标签打印机验证方案(共20页)
- XRF定性和定量分析ppt课件
- 配电箱安装规范
- 中英文商务派遣函样板
- 幼儿园大班主题教案《超市》含反思
- 弯臂车床夹具设计说明书
- 企业员工健康管理存在的问题与解决途径探讨
- 浅谈初中数学教学新课标理念的运用
- 12种业务招待费处理技巧汇总
- 1到13之内的24点全题及解(整理版
评论
0/150
提交评论