实验报告五 生产者和消费者问题

上传人:cn****1 文档编号:460779475 上传时间:2022-08-20 格式:DOCX 页数:10 大小:370.95KB
返回 下载 相关 举报
实验报告五 生产者和消费者问题_第1页
第1页 / 共10页
实验报告五 生产者和消费者问题_第2页
第2页 / 共10页
实验报告五 生产者和消费者问题_第3页
第3页 / 共10页
实验报告五 生产者和消费者问题_第4页
第4页 / 共10页
实验报告五 生产者和消费者问题_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《实验报告五 生产者和消费者问题》由会员分享,可在线阅读,更多相关《实验报告五 生产者和消费者问题(10页珍藏版)》请在金锄头文库上搜索。

1、实验报告五生产者和消费者问题姓名:丛菲 学号:20100830205 班级:信息安全二班一、实习内容 1 、模拟操作系统中进程同步和互斥 2 、实现生产者和消费者问题的算法实现二、实习目的1、熟悉临界资源、信号量及PV操作的定义与物理意义 2、了解进程通信的方法 3、掌握进程互斥与进程同步的相关知识 4、掌握用信号量机制解决进程之间的同步与互斥问题 5、实现生产者消费者问题,深刻理解进程同步问题三、实习题目 在Linux操作系统下用C实现经典同步问题:生产者一消费者,具体要求如下:(1) 一个大小为10 的缓冲区,初始状态为空。(2) 2 个生产者,随机等待一段时间,往缓冲区中添加数据,若缓冲

2、区已满,等待消 费者取走数据之后再添加,重复10 次。(3) 2 个消费者,随机等待一段时间,从缓冲区中读取数据,若缓冲区为空,等待生 产者添加数据之后再读取,重复10 次。 提示本实验的主要目的是模拟操作系统中进程同步和互斥。在系统进程并发执行 异步推进的过程中,由于资源共享和进程间合作而造成进程间相互制约。进程间的 相互制约有两种不同的方式。(1) 间接制约。这是由于多个进程共享同一资源(如CPU、共享输入/输出设备) 而引起的,即共享资源的多个进程因系统协调使用资源而相互制约。(2) 直接制约。只是由于进程合作中各个进程为完成同一任务而造成的,即并发进 程各自的执行结果互为对方的执行条件

3、,从而限制各个进程的执行速度。生产者和消费者是经典的进程同步问题,在这个问题中,生产者不断的向缓冲区中写入数据,而消费者则从缓冲区中读取数据。生产者进程和消费者对缓冲区的操作是互斥,即当前只能有一个进程对这个缓冲区进行操作,生产者进入操作缓冲区之前,先要看缓冲区是否已满,如果缓冲区已满,则它必须等待消费者进程将数据取出才能写入数据,同样的,消费者进程从缓冲区读取数据之前,也要判断缓冲区是否为空,如果为空,则必须等待生产者进程写入数据才能读取数据。在本实验中,进程之间要进行通信来操作同一缓冲区。一般来说,进程间的通信根据通信内 容可以划分为两种:即控制信息的传送与大批量数据传送。有时,也把进程间

4、控制在本实验 中,进程之间要进行通信来操作同一缓冲区。一般来说,进程间的通信根据通信内容可以划 分为两种:即控制信息的传送与大批量数据传送。有时,也把进程间控制信息的交换称为低 级通信,而把进程间大批量数据的交换称为高级通信。目前,计算机系统中用得比较普遍的高级通信机制可分为3 大类:共享存储器系统、消 息传递系统及管道通信系统。 共享存储器系统共享存储器系统为了传送大量数据,在存储器中划出一块共享存储区,诸进程可通过对 共享存储区进行读数据或写数据以实现通信。进程在通信之前,向系统申请共享存储区中的 一个分区,并为它指定一个分区关键字。 信息的交换称为低级通信,而把进程间大批量数 据的交换称

5、为高级通信。目前,计算机系统中用得比较普遍的高级通信机制可分为3 大类:共享存储器系统、消息 传递系统及管道通信系统。 消息传递系统在消息传递系统中,进程间的数据交换以消息为单位,在计算机网络中被称为报文。消息传 递系统的实现方式又可以分为以下两种:(1)直接通信方式 发送进程可将消息直接发送给接收进程,即将消息挂在接收进程的消息缓冲队列上,而接收 进程可从自己的消息缓冲队列中取得消息。(2)间接通信方式 发送进程将消息发送到指定的信箱中,而接收进程从信箱中取得消息。这种通信方式又称信 箱通信方式,被广泛地应用于计算机网络中。相应地,该消息传递系统被称为电子邮件系统。 管道通信系统 向管道提供

6、输入的发送进程,以字符流方式将大量的数据送入管道,而接收进程从管道中接 收数据。由于发送进程和接收进程是利用管道进行通信的,故称为管道通信。 为了协调发送和接收双方的通信,管道通信机制必须提供以下3 方面的协调功能。 (1)互斥当一个进程正在对pipe文件进行读或写操作时,另一个进程必须等待。(2)同步当写进程把一定数量的数据写入pipe文件后,便阻塞等待,直到读进程取走数据后,再把 写进程唤醒。(3)确认对方是否存在只有确定对方已存在时,才能进行管道通信,否则会造成因对方不存在而无限制地等待。在 这个问题当中,我们采用信号量机制进行进程之间的通信,设置两个信号量,空的信号量和 满的信号量。在

7、Linux系统中,一个或多个信号量构成一个信号量集合。使用信号量机制可 以实现进程之间的同步和互斥,允许并发进程一次对一组信号量进行相同或不同的操作。每 个P、V操作不限于减1或加1,而是可以加减任何整数。在进程终止时,系统可根据需要 自动消除所有被进程操作过的信号量的影响1缓冲区采用循环队列表示,利用头、尾指针来存放、读取数据,以及判断队列是否为空。 缓冲区中数组大小为10;2.利用随机函数rand(得到A_Z的一个随机字符,作为生产者每次生产的数据,存放到缓 冲区中;3使用shmget (系统调用实现共享主存段的创建,shmget (返回共享内存区的ID。对于已 经申请到的共享段,进程需把

8、它附加到自己的虚拟空间中才能对其进行读写。4.信号量的建立采用semget (函数,同时建立信号量的数量。在信号量建立后,调用semctl() 对信号量进行初始化,例如本实习中,可以建立两个信号量SEM_EMPTY 、SEM_FULL , 初始化时设置SEM_EMPTY为10, SEM_FULL为0。使用操作信号的函数semop()做排除式操作,使用这个函数防止对共享内存的同时操作。对共享内存操作完毕后采用shmc tl函 数撤销共享内存段。5使用循环,创建2个生产者以及2个消费者,采用函数fork创建一个新的进程。6.个进程的一次操作完成后,采用函数fflush刷新缓冲区。7程序最后使用se

9、mctl函数释放内存。模拟程序的程序流程图如下所示:1主程序流程图:2生产者进程流程图4.P操作流程图/static int processpSIZE = 2,3,2,1,5,2,4,5,3,2,5,2;/static int processpSIZE 7,10,1,2,10,3,10,4,2,3,10,3,2,1,2,10,1,7,10,1; void build();void LRU();int main(intargc, char *argv)printf(Random sequence is as follows:n); build();printf(nInvoking LRU Alg

10、orithn: n);LRU();return 0;void build()inti = 0;for(i=0; ipSIZE; i+)processi = (int)(10.0*rand()/(RAND_MAX); printf(%d ,processi);printf(n);void LRU()int flagmSIZE = 0;inti = 0, j = 0;int m = -1, n = -1;int max = -1,maxflag = 0;int count = 0;for(i = 0; ipSIZE; i+)/Find the first free Physical Block四、

11、实现代码为:/ exet5.cpp/#include stdafx.h#include #include #define mSIZE 3 #define pSIZE 20 staticintmemerymSIZE = 0; staticint processpSIZE = 0;for(j=0; jmSIZE; j+)if(memeryj = 0)m = j;break;/Find if there are same processes for(j = 0; j mSIZE; j+)if(memeryj = processi)n = j;/Find free PB for(j = 0; j ma

12、xflag) maxflag = flagj; max = j;if(n = -1) / Find no same processif(m != -1) / find free PB memerym = processi; flagm = 0;for(j = 0;j = m; j+)flagj+;m = -1;else /NO find free PB memerymax = processi; flagmax = 0;for(j = 0;j mSIZE; j+)flagj+;max = -1;maxflag = 0;count+;else / Find same processmemeryn

13、 = processi;flagn = 0;if(m != -1) /find free PBflagm = 0;for(j = 0;j mSIZE; j+)五、在虚拟机上的具体操作及结果flagj+;max = -1;maxflag = 0;n = -1;for(j = 0 ;j mSIZE; j+)printf(%d ,memeryj);printf(n);printf(nThe times of page conversion is: %dn,count);rile Ed in iiew Seairh ToolsI i e畑5.cin = e;#in duderfinelude#inel

14、ude tfincude#i neludeApplied mis Places System eexe5,c! *1 月 3, D3:2155 VMngbD 回uPrint.Jnao :ledoFind RepleteDocuments Help pthread tin csemaphore.h/ lu- ND8*&D6Eu uOfipAEyAMef inc N 2define H lfi ff 汕、託护l inf/ _int out = -3; / iuN0GEi2u/LyAi*iA im buffH = e; /训吨红旳-住詆r ;aEffiADB2LK-t empty sen; / 卜5如口店1Eu2ii06 (4serf t full._5eii; /|i*A-2- Eilti - NOElCi- Npthread_nutex_t mutex; / 絆河WEB 加址张碱褲翻珀 int product id = &; /uJuOSid

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号