山东大学linux实验四CSDN,山东大学操作系统实验报告材料4进程同步实验

《山东大学操作系统实验报告材料4进程同步实验》由会员分享,可在线阅读,更多相关《山东大学操作系统实验报告材料4进程同步实验(15页珍藏版)》请在人人文库网上搜索。

1、实用标准文案计算机科学与技术学院实验报告实验题目:实验四、进程同步实验学号:日期:20120409班级:计基地12姓名:实验目的:加深对并发协作进程同步与互斥概念的理解,观察和体验并发进程同步与互斥 操作的效果,分析与研究经典进程同步与互斥问题的实际解决方案。了解Lin ux系统中IPC进程同步工具的用法,练习并发协作进程的同步与互斥操作的编程 与调试技术。实验内容:抽烟者问题。假设一个系统中有三个抽烟者进程,每个抽烟者不断地卷烟并抽烟。 抽烟者卷起并抽掉一颗烟需要有三种材料: 烟草、纸和胶水。一个抽烟者有烟草, 一个有纸,另一个有胶水。系统中还有两个供应者进程,它们无限地供应所有三 种材料,。

2、但每次仅轮流提供三种材料中的两种。得到缺失的两种材料的抽烟者在 卷起并抽掉一颗烟后会发信号通知供应者,让它继续提供另外的两种材料。这一 过程重复进行。请用以上介绍的IPC同步机制编程,实现该问题要求的功能。硬件环境:处理器:In tel? Core? i3-2350M CPU 2.30GHzx 4图形:In tel? Sa ndybridge Mobile x86/MMX/SSE2内存:4G操作系统:32位磁盘:20.1 GB软件环境:ubu ntu13.04实验步骤:(1) 新建定义了 producer和consumer共用的IPC函数原型和变量的ipc.h文件。(2) 新建ipc.c文件,。

3、编写producer 和consumer 共用的IPC的具体相应函数。(3) 新建Producer文件,首先定义producer的一些行为,利用系统调用,建立共享内存区域,设定其长度并获取共享内存的首地址。然后设定生产者互斥与同步的信号灯,并为他 们设置相应的初值。当有生产者进程在运行而其他生产者请求时,相应的信号灯就会阻止他,当共享内存区域已满时,信号等也会提示生产者不能再往共享内存中放入内容。(4) 新建Consumer文件,定义consumer的一些行为,利用系统调用来创建共享内存 区域,并设定他的长度并获取共享内存的首地址。然后设定消费者互斥与同步的信号灯,并 为他们设置相应的初值。当。

4、有消费进程在运行而其他消费者请求时,相应的信号灯就会阻止它,当共享内存区域已空时,信号等也会提示生产者不能再从共享内存中取出相应的内容。运行的消费者应该与相应的生产者对应起来,只有这样运行结果才会正确。结论分析与体会:实现方式:Consumer :#i nclude ipc.hint main (i nt argc,char *argv) int rate = 3;int con sumerid=atoi(argv1);buff_h = 101;buff_ nu mber = 1;cget_h = 103;cget_ nu mber = 1;shm flg = IPC CREAT | 0644。

5、;buff_ptr = (char *)set_shm(buff_h,buff_ nu mber,shm_flg); cget_ptr = (int *)set_shm(cget_h,cget_ nu mber,shm_flg); prod_h = 201;pmtx_h = 202;cons_h = 301;cmtx_h = 302;sem_flg = IPC_CREAT | 0644;sem_val = buff_ nu mber;prod_sem = set_sem(prod_h,sem_val,sem_flg);sem_val = 0;con s_sem = set_sem(co ns_。

6、h,sem_val,sem_flg);sem_val = 1;cmtx_sem = set_sem(cmtx_h,sem_val,sem_flg);if(con sumerid=0)*cget_ptr=0;while(1)if(buff_ptr0-A=c on sumerid)dow n(co ns_sem);dow n(cmtx_sem);sleep(rate);if(buff_ptrO=A)printf(%dThe consumer has glue.nThe consumer getstobacco and paper n,getpid();if(buff_ptr0=B)prin tf(。

7、%d The con sumer has paper. nThe con sumer getstobacco and gluen,getpid();if(buff_ptrO=C)printf(%dThe consumerhas tobacco.nTheconsumergets glue and paper n,getpid();*cget ptr 二(*cget pt叶1);if(*cget_ptr%2=0) buff_ptrO=D; else buff_ptrO=E; up(cmtx_sem); up(prod_sem);return EXIT_SUCCESS;Producer :#i nc。

8、lude ipc.hint main (i nt argc,char *argv)int rate=3;int producerid=atoi(argv1);buff_h=101;buff_ nu mber=1;pput_h=102;pput_ nu mber=1;shm_flg=IPC_CREAT|0644;buff_ptr = (char *)set_shm(buff_h,buff_ nu mber,shm_flg); pput_ptr = (int *)set_shm(pput_h,pput_ nu mber,shm_flg);prod_h = 201;pmtx_h = 202;cons。

9、_h = 301;cmtx_h = 302;sem flg = IPC CREAT|0644;sem_val = buff_ nu mber;prod_sem = set_sem(prod_h,sem_val,sem_flg);sem_val = 0;con s_sem = set_sem(co ns_h,sem_val,sem_flg);sem_val = 1;pmtx_sem = set_sem(pmtx_h,sem_val,sem_flg);if(producerid=0)buff_ptrO=D;*pput_ptr=0;while(1)if(buff_ptr0-D=producerid)。

10、dow n( prod_sem);dow n(pmtx_sem);*pput_ptr = (*pput_pt r+1)%3;if(*pput_ptr=0)buff_ptr0 = A;prin tf(%dThe producer gives tobacco andpapern,getpid();if(*pput_ptr=1)buff_ptr0 = B;prin tf(%dThe producer gives tobacco andgluen,getpid();if(*pput_ptr=2)buff_ptr0 = C;prin tf(%d The producer gives glue and p。

11、aper n,getpid();sleep(rate);up(pmtx_sem);up(c on s_sem);return EXIT_SUCCESS;Ipc.h :#i nclude ipc.hint get_ipc_id(char *proc_file,h_t h) FILE *pf;int m,n;char lin eBUFSZ,columBUFSZ;if(pf = fope n(proc_file,r) = NULL) perror(卩roc file not ope n); exit(EXIT_FAILURE);fgets(line, BUFSZ,pf);while(!feof(pf。

12、)m = n = 0;fgets(line, BUFSZ,pf);while(l in em=)m+;while(linem !=) colu mn+ = lin em+;colum n = 0; if(atoi(colum) != h) con ti nue;n=0;while(l in em=)m+;while(linem !=) colu mn+ = lin em+;colum n = 0;m = atoi(colum);fclose(pf);return m; fclose(pf); return -1;int dow n(i nt sem_id) struct sembuf buf;。

13、buf.sem_op = -1; buf.sem_ nu mber = 0; buf.sem_flg = SEM_UNDO; if(semop(semd,&buf,1) d has priper, tobacco and has paper. tobacco and has paper. tobacco and hmm paper. tobacco and has paper + mbacco 2nd has paper, tobacco rd has paper. tobacco dilueglueueglueglueglumgluegLuegl lieglueglue0Q Ukunliku。

14、nMjenovoddeaPad-Y471A: /lab4ltkimer has tobacco.The consuner gets glut dnd paper3319 rhe consuner has Tobacco.glue and paper h日乞 tobacco.glue and paper has tobacco- glue and paper has tobacco.glue and ppor has tobacco.glue and paper has tobaccoglue and paper hmm tobacco.glue and paper has tobacco.gl。

15、ue and paper haw tobacco glue and paper has tobacco.glue /nd paperThe consumer gets 3319 The cansuner The conLjnter gets J319 The consuner The consumer sets 3319 Thp consurner The consumer gets J319 The consunerThe conurrr gets 1519 The consularThe consumer gets3319 The consumerhe consjrr gets 3319 。

16、The consunerThe conuiner gets 3319 The consumerThe consumer gets 3.319 Tht? consumeiThe consumer get呂分析:多进程的系统中避免不了进程间的相互关系。进程互斥是进程之间发生的一 种间接性作用,一般是程序不希望的。通常的情况是两个或两个以上的进程需要 同时访问某个共享变量。我们一般将发生能够问共享变量的程序段称为临界区。 两个进程不能同时进入临界区,否则就会导致数据的不一致,产生与时间有关的 错误。解决互斥问题应该满足互斥和公平两个原则,即任意时刻只能允许一个进 程处于同一共享变量的临界区,而且不能。

17、让任一进程无限期地等待。进程同步是进程之间直接的相互作用,是合作进程间有意识的行为,典型的 例子是公共汽车上司机与售票员的合作。只有当售票员关门之后司机才能启动车 辆,只有司机停车之后售票员才能开车门。 司机和售票员的行动需要一定的协调 同样地,两个进程之间有时也有这样的依赖关系,因此我们也要有一定的同步机 制保证它们的执行次序。 信号量机制就是其中的一种。信号灯机制即利用pv操作来对信号量进行处理。PV操作由P操作原语和V 操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下:P( S):将信号量S的值减1,即S=S-1 ;如果S30,则该进程继续执行;否则该进程置为等待状态。

18、,排 入等待队列。V( S):将信号量S的值加1,即S=S+1 ;如果S0,则该进程继续执行;否则释放队列中第一个等待信号量的进程。PV操作的意义:我们用信号量及 PV操作来实现进程的同步和互斥。信号量的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程。信号量的值与相应资源的使用情况有关。当它的值大于0时,表示当前可用资源的数量;当它的值小于0时,其绝对值表示等待使用该资源的进程个数。信 号量的值仅能由PV操作来改变。一般来说,信号量 S30时,S表示可用资源的 数量。执行一次P操作意味着请求分配一个单位资源,因此 S的值减1 ;当S。(3) sleep()等linux系统调用缺少头文件。 解决方法:加头文件#includevunistd.h体会和收获:经过本次实验,初步了解操作系统的进程同步的过程。我对生产者-消费者问题的解决办法有了更全面的认识,同时对调试代码更加熟练。本次实验最大的 体会就是,做东西要细心,在写代码的过程中,稍不留意就给后期调试工作带来 很多问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值