合肥学院计算机科学与技术系实验报告2012 ~2013 学年第 1 学期课程名称计算机操作系统课程设计名称PV操作解决生产者——消费者问题专 业 班 级10级网络工程1班 学生姓名 汪青松学 生 学 号指 导 教 师王晓峰2012 年12 月一、实验目的1、了解进程PV操作的过程2、了解生产者和消费者的工作过程3、理解进程同步机构的作用和意义二、实验内容模拟PV操作同步机构,且用PV操作解决生产者——消费者问题三、实验步骤(1)任务分析假定有一个生产者和消费者,生产者每次生产一件产品,并把生产的产品存入共享缓冲器以供消费者取走使用消费者每次从缓冲器内取出一件产品去消费禁止生产者将产品放入已满的缓冲器内,禁止消费者从空缓冲器内取产品假定缓冲器内可同时存放10件产品其中需要我们模拟的部分主要为:PCB进程控制块和模拟处理器工作部分2) 简要设计程序的大致过程可以设计为,先对模拟程序中的各个变量进行初始化,包括信号量s1、s2等,然后再转入处理调度程序,在进入处理调度程序时,程序并发执行,每当当前进程执行完毕后,记录下当前状态,并标记为等待状态然后再由处理器调度程序按随机数再选择一个就绪进程占用处理器运行。
当选取进程后再按照处理器模拟执行程序,通过一个指令计数器来控制执行的指令 (3) 详细设计程序的大致过程可以设计为,先对模拟程序中的各个变量进行初始化,包括信号量s1、s2等,然后再转入处理调度程序,在进入处理调度程序时,程序并发执行,每当当前进程执行完毕后,记录下当前状态,并标记为等待状态然后再由处理器调度程序按随机数再选择一个就绪进程占用处理器运行当选取进程后再按照处理器模拟执行程序,通过一个指令计数器来控制执行的指令按照实验要求程序的主体部分主要包括进程控制块PCB,模拟处理器操作,以及PV、生产和消费操作等 1、进程控制块PCB通过程序中的control()函数来进行调度,其中进程的状态有:运行态、就绪态、等待态和完成态当进程处于等待态时,在进程控制块PCB中要说明进程等待原因(在模拟实验中进程等待原因为等待信号量s1或s2);当进程处于等待态或就绪态时,PCB中保留了断点信息,一旦进程再度占有处理器则就从断点位置继续运行;当进程处于完成状态,表示进程执行结束进程控制块PCB定义如下的数据结构: 2、 PV同步操作PV操作主要是对记录型信号量的操作,表示两个标准的原子操作,wait(s)和signal(s),通俗的来说就是申请资源和释放资源。
Wait(s): while s<=0 do no-op S:=s-1Signal(s): s:=s+13、生产者、消费者操作程序利用定义的就绪队列中的进程名进行比对判读是生产者或消费者,在生产者和消费者中利用程序计数器PC来判断模拟指令,执行过程为,通过swich语句进入执行指令,并将PC加14、处理器的模拟计算机硬件提供了一组机器指令,处理器的主要职责是解释执行机器指令为了模拟生产者和消费者进程的并发执行,我们必须模拟一组指令和处理器职能模拟的指令功能P(s)执行P操作原语V(s)执行v操作原语PUTB[IN]:=product;IN:=(IN+1) mod 10GETX:=B[out];out:=(out+1) mod 10produce输入一个字符放入C中consume打印或显示x中的字符GOTO LPC: LNOP空操作模拟的处理器指令模拟的一组指令见上图,其中每条指令的功能由一个过程来实现用变量PC来模拟“指令计数器”,假设模拟的指令长度为1,每执行一条模拟指令后,PC加1,指出下一条指令地址使用模拟的指令,可把生产者和消费者进程的程序表示为下图的形式序号生产者程序消费者程序0produceP(s2)1P(s1)GET2PUTV(s1)3V(s2)consume4goto 0goto 0(4) 调试分析通过将头文件,数据结构,函数定义部分分开,进行编译执行,利用给定字符串进行测试,模拟生产者、消费者PV操作过程。
5) 测试结果生产字符t申请s1信号量t入住缓存释放s2信号量申请s2信号量消费字符 阻塞进程申请s1信号量释放s1四、实验总结本实验为利用PV操作来解决生产者、消费者问题,生产者、消费者问题简单来理解就是生产者将生产的产品放入一个我们自行设定一定大小的缓冲区,然后消费者从缓冲区中消费产品,但是不久将会面临一个问题,当缓冲区满或者空的时候,两种操作行为都将会受到影响,为此我们需要设定一种同步机制来避免这种情况的发生,这就引入了进程同步机制在操作系统课上对于我来说似乎是有些抽象的,很多过程我感觉没有当初学习C/C++那么容易去理解的,通过动手去模拟生产者消费者问题将会更加容易理解进程同步机制和信号量在同步过程中的作用,另外这次实验我们是将处理器的执行过程都进行模拟出来,当然我们也可以利用C#等语言运行系统真实的进程来进行图形界面的模拟,当然这样或许只是表面好看罢了,并没有将其真实的执行过程表达清楚通过本次实验使得自己的整体综合能力得到了提升,对进程同步机制和消费者生成者问题认识更加加深;同样,团队合作能力,资料查询检索,文档编写能力都得到了很大的进步,相信严谨的态度也会鞭策自己,受益终生。
五、附录头文件a.h数据结构和自定义数据 b.h功能函数 c.h主函数体部分 main.cpp。