下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验四Linux进程互斥一、实验目的熟悉Linux下信号量机制,能够使用信号量实现在并发进程间的互斥和同步。二、实验题目使用共享存储区机制,使多个并发进程分别模拟生产者一消费者模式同步关系、临界资源的互斥访问关系,使用信号量机制实现相应的同步和互斥。三、背景材料(一)需要用到的系统调用实验可能需要用到的主要系统调用和库函数在下面列出,详细的使用方法说明通过“man2系统调用名”或者“man3函数名”命令获取。fork()创建一个子进程,通过返回值区分是在父进程还是子进程中执行;wait()等待子进程执行完成;shmget()建立一个共享存储区;shmctl()操纵一个共享存储区;shmat()把一个共享存储区附接到进程内存空间;shmdt()把一个已经附接的共享存储区从进程内存空间断开;semget()建立一个信号量集;semctl()操纵一个信号量集,包括赋初值;semop()对信号量集进行wait和signal操作;signal()设置对信号的处理方式或处理过程。(二)模拟生产者一消费者的示例程序本示例主要体现进程间的直接制约关系,由于使用共享存储区,也存在间接制约关系。进程分为服务进程和客户进程,服务进程只有一个,作为消费者,在每次客户进程改变共享存储区内容时显示其数值。各客户进程作为生产者,如果共享存储区内容已经显示(被消费),可以接收用户从键盘输入的整数,放在共享存储区。编译后执行,第一个进程实例将作为服务进程,提示:ACTCONSUMER!!!Toend,tryCtrl+Corusekill.服务进程一直循环执行,直到用户按Ctrl+C终止执行,或使用kill命令杀死服务进程。其他进程实例作为客户进程,提示:Actasproducer.Toend,input0whenprompted.客户进程一直循环执行,直到用户输入0。示例程序代码如下:#include<sys/types.h>#include<unistd.h>#include<signal.h>#include<stdio.h>#include<string.h>#include<sys/ipc.h>#include<sys/shm.h>#include<sys/sem.h>
//needtochange//needtochange#defineMY_SHMKEY10071500#defineMY_SEMKEY10071500voidsigend(int);intshmid,semid;intmain(void){int*shmptr,semval,local;structsembufsemopbuf;/*//needtochange//needtochangeif((shmid=shmget(MY_SHMKEYsizeof(int),IPC_CREAT|IPC_EXCL|0666))<0){/*sharedmemoryexists,actasclient*/shmid=shmget(MY_SHMKEYsizeof(int),0666);〃建立一个信号量集函数执行成功,则返回信号量集的标识符(一个大于等于0的整数),失败,则返回Tsemid=semget(MY_SEMKEY2,0666);〃返回共享内存的起始地址。失败时返回-1。允许本进程使用这块共享内存shmptr=(int*)shmat(shmid,0,0);printf("Actasproducer.Toend,input0whenprompted.\n\n");printf("Inputanumber:\n");scanf("%d”,&local);while(local){semopbuf.sem_num=0;semopbuf.sem_op=-1;semopbuf.sem_flg=SEM_UNDO;semop(semid,&semopbuf,1);/*P(S1)对信号量集进行wait和signal操作;*/*shmptr=local;semopbuf.sem.numT;//正数:释放相应的资源数,将sem_op的值加到信号量的值上semopbuf.sem_op=1;//执行释放的资源semopbuf.sem_flg=SEM_UNDO;semop(semid,&semopbuf,1);/*V(S2)*/printf("Inputanumber:\n");scanf("%d”,&local);}}else/*actsasserver*/{〃建立一个信号量集〃参数nsems表示创建的信号量集中的信号量的个数,该参数只在创建信号量集时有效。semid=semget(MY_SEMKEY2,IPC_CREATI0666);shmptr=(int*)shmat(shmid,0,0);semval=1;〃操纵一个信号量集,包括赋初值;SETVAL设置信号量集中的一个单独的信号量的值semctl(semid,0,SETVAL,semval);/*setS1=1第二个参数是信号量数目*/semval=0;semctl(semid,1,SETVAL,semval);/*setS2=0*/〃对信号的处理方式或处理过程signal(SIGINT,sigend);由InterruptKey产生,通常是CTRL+C或者DELETEo发送给所有ForeGroundGroup的进程按下CTRL+C产生SIGINTsignal(SIGTERM,sigend);请求中止进程,kill命令缺省发送printf("ACTCONSUMER!!!Toend,tryCtrl+Corusekill.\n\n");while(1){semopbuf.sem_num=1;semopbuf.sem_op=-1;semopbuf.sem_flg=SEM_UNDO;semop(semid,&semopbuf,1);/*P(S2)*/printf("Sharedmemorysetto%d\n",*shmptr);semopbuf.sem_num=0;semopbuf.sem_op=1;semopbuf.sem_flg=SEM_UNDO;semop(semid,&semopbuf,1);/*V(S1)*/}}}voidsigend(intsig){shmctl(shmid,IPC_RMID,0);semctl(semid,IPC_RMID,0);exit(0);}(三)模拟临界资源访问的示例程序本示例的临界资源是一个建立在共享存储区的栈,由服务进程建立并初始化。初始状态下共享栈满,里面顺序放置一系列正整数(自栈顶向下:1,2,3…),代表空闲块号。客户进程利用共享栈进行数据块的分配和释放,以得到、归还一个块号代表,并不进行任何后续操作。程序中getblock过程从共享栈中弹出一个块号(分配),relblock过程把一个已分配块号压入共享栈(释放)。为简单起见,已分配块号在本地也使用栈结构保存,因而每次释放的是最后分配的块号。编译后执行,第一个进程实例将作为服务进程,提示:NOOTHEROPERATIONbutpressCtrl+Corusekilltoend.服务进程完成初始化后将进入睡眠状态,直到用户按Ctrl+C终止执行,或使用kill命令杀死服务进程。其他进程实例作为客户进程,进入后首先有命令帮助提示,然后显示命令提示符“?>,”在命令提示下可以使用的命令包括:help显示可用命令list列出所有已分配块号get分配一个新块rel释放最后分配块号end退出程序示例程序的代码如下:#include<sys/types.h>#include<unistd.h>#include<signal.h>#include<stdio.h>#include<string.h>#include<sys/ipc.h>#include<sys/shm.h>#defineMY_SHMKEY10071800//needtochange#defineMAX_BLOCK1024#defineMAX_CMD8structshmbuf(inttop;intstack[MAX_BLOCK];}*shmptr,local;charcmdbuf[MAX_CMD];intshmid,semid;voidsigend(int);voidrelblock(void);intgetblock(void);voidshowhelp(void);voidshowlist(void);voidgetcmdline(void);intmain(void){if((shmid=shmget(MY_SHMKEYsizeof(structshmbuf),IPC_CREAT|IPC_EXCL|0666))<0){/*sharedmemoryexists,actasclient*/shmid=shmget(MY_SHMKEYsizeof(structshmbuf),0666);shmptr=(structshmbuf*)shmat(shmid,0,0);local.top=-1;showhelp();getcmdline();while(strcmp(cmdbuf,"end\n")){if(!strcmp(cmdbuf,"get\n"))getblock();elseif(!strcmp(cmdbuf,"rel\n"))relblock();elseif(!strcmp(cmdbuf,"list\n"))showlist();elseif(!strcmp(cmdbuf,"help\n"))showhelp();getcmdline();}}else/*actsasserver*/{inti;shmptr=(structshmbuf*)shmat(shmid,0,0);signal(SIGINT,sigend);signal(SIGTERM,sigend);printf("NOOTHEROPERATIONbutpressCtrl+Corusekilltoend.\n");shmptr->top=MAX_BLOCK-1;for(i=0;i<MAX_BLOCK;i++)shmptr->stack[i]=MAX_BLOCK-i;sleep(1000000);/*causesleepforever.*/}}voidsigend(intsig){shmctl(shmid,IPC_RMID,0);semctl(semid,IPC_RMID,0);exit(0);}voidrelblock(void){if(local.top<0){printf("Noblocktorelease!");return;}shmptr->top++;shmptr->stack[shmptr->top]=local.stack[local.top--];}intgetblock(void){if(shmptr->top<0){printf("Nofreeblocktoget!");return;}local.stack[++local.top]=shmptr->stack[shmptr->top];shmptr->top--;}voidshowhelp(void){printf("\navailableCOMMAND:\n\n");printf("help\tlistthishelp\n");printf("list\tlistallgottenblocknumber\n");printf("get\tgetanewblock\n");printf("rel\treleasethelastgottenblock\n");printf("end\texitthisprogram\n");}voidshowlist(void){inti;printf("Listallgottenblocknumber:\n");for(i=0;i<=local.top;i++)printf("%d\t”,local.stack[i]);}voidgetcmdline(void){printf("\n?>");fgets(cmdbuf,MAX_CMD-1,stdin);}四、实验内容本实验要求内容如下:1、模拟生产者一消费者实现相应的示例程序功能,记录执行结果;改造该程序,取消所有的同步机制,记录执行结果,看
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《GBT 9969-2008工业产品使用说明书 总则》专题研究报告:面向未来的产品信息沟通战略与合规实践深度
- 《GB-T 26179-2010光源的光谱辐射度测量》专题研究报告
- 《GBT 21611-2008 危险品 易燃固体自燃试验方法》专题研究报告
- 《GBT 2423.21-2008电工电子产品环境试验 第2部分:试验方法 试验M:低气压》专题研究报告
- 《GBT 22231-2008 颗粒物粒度分布纤维长度和直径分布》专题研究报告-深度与前瞻应用
- 道路安全培训活动方案课件
- 2026年鲁教版九年级语文上册期末综合考核试题及答案
- 2025脓胸:全面解析与治疗指南课件
- 达内网络安全培训教程课件
- 车险培训课件2017
- 非职业一氧化碳中毒课件
- 保定市道路野生地被植物资源的调查与分析:物种多样性与生态功能的探究
- smt车间安全操作规程
- JJF 2254-2025戥秤校准规范
- 强制医疗活动方案
- DB42T 850-2012 湖北省公路工程复杂桥梁质量鉴定规范
- 月经不调的中医护理常规
- 2024-2025学年江苏省南通市如东县、通州区、启东市、崇川区高一上学期期末数学试题(解析版)
- 瑞幸ai面试题库大全及答案
- 现代密码学(第4版)-习题参考答案
- 缝纫车间主管年终总结
评论
0/150
提交评论