




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验三实验三 编程模拟生产者和消费者问题编程模拟生产者和消费者问题 一 实验目的和要求一 实验目的和要求 模拟实现用同步机构避免发生进程执行时可能出现的与时间有关的错误 进程是程序在一个数据集合上运行的过程 进程是并发执行的 也即系统 中的多个进程轮流地占用处理器运行 我们把若干个进程都能进行访问和修改的那些变量称为公共变量 由于进 程是并发地执行的 所以 如果对进程访问公共变量不加限制 那么就会产生 与时间有关 的错误 即进程执行后所得到的结果与访问公共变量的时间有 关 为了防止这类错误 系统必须要用同步机构来控制进程对公共变量的访问 一般说 同步机构是由若干条原语 同步原语 所组成 本实习要求学生 模拟 PV 操作同步机构的实现 模拟进程的并发执行 了解进程并发执行时同 步机构的作用 二 实验环境二 实验环境 Windows 操作系统和 Visual C 6 0 专业版或企业版 三 实验步骤三 实验步骤 模拟 PV 操作同步机构 且用 PV 操作解决生产者 消费者问题 提示 1 PV 操作同步机构 由 P 操作原语和 V 操作原语组成 它们的定义如下 P 操作原语 P s 将信号量 s 减去 1 若结果小于 0 则执行原语的进程被 置成等待信号量 s 的状态 V 操作原语 V s 将信号量 s 加 1 若结果不大于 0 则释放一个等待信 号量 s 的进程 这两条原语是如下的两个过程 procedure p var s semaphore begin s s 1 if s 0 then W s end p procedure v var s semaphore egin s s 1 if s 0 then R s end v 其中 W s 表示将调用过程的进程置为等待信号量 s 的状态 R s 表示 释放一个等待信号量 s 的进程 在系统初始化时应把 semaphore 定义为某个类型 为简单起见 在模拟实 习中可把上述的 semaphore 直接改成 integer 2 生产者 消费者问题 假定有一个生产者和一个消费者 生产者每次生产一件产品 并把生产的 产品存入共享缓冲器以供消费者取走使用 消费者每次从缓冲器内取出一件产 品去消费 禁止生产者将产品放入已满的缓冲器内 禁止消费者从空缓冲器内 以产品 假定缓冲器内可同时存放 10 件产品 那么 用 PV 操作来实现生产者 和消费者之间的同步 生产者和消费者两个进程的程序如下 B array 0 9 of products s1 s2 semaphore s1 10 s2 0 IN out integer IN 0 out 0 cobegin procedure producer c products begin L1 Produce c P s1 B IN C IN IN 1 mod 10 V s2 goto L1 end procedure consumer x products begin L2 p s2 x B out out out 1 mod10 v s1 consume x goto L2 end coend 其中的 semaphore 和 products 是预先定义的两个类型 在模拟实现中 semaphore 用 integer 代替 products 可用 integer 或 char 等代替 3 进程控制块 PCB 为了记录进程执行时的情况 以及进程让出处理器后的状态 断点等信息 每个进程都有一个进程控制块 PCB 在模拟实习中 假设进程控制块的结构如 图 3 1 其中进程的状态有 运行态 就绪态 等待态和完成态 当进程处于等 待态时 在进程控制块 PCB 中要说明进程等待原因 在模拟实习中进程等待原 因是为等待信号量 s1 或 s2 当进程处于等待态或就绪态时 PCB 中保留了断 点信息 一旦进程再度占有处理器则就从断点位置继续运行 当进程处于完成 状态 表示进程执行结束 进程名 状态 等待原因 断点 图 3 1 进程控制块结构 4 处理器的模拟 计算机硬件提供了一组机器指令 处理器的主要职责是解释执行机器指令 为了模拟生产者和消费者进程的并发执行 我们必须模拟一组指令和处理职能 模拟的一组指令见图 3 2 其中每条指令的功能由一个过程来实现 用变量 PC 来模拟 指令计数器 假设模拟的指令长度为 1 每执行一条模拟指令后 PC 加 1 提出下一条指令地址 使用模拟的指令 可把生产者和消费者进程的 程序表示为图 3 3 的形式 定义两个一维数组 PA 0 4 和 SA 0 4 每一个 PA i 存放生产者程序中的 一条模拟指令执行的入口地址 每个 SA i 存放消费者程序中的一条模拟指令执 行的入口地址 于是模拟处理器执行一条指令的过程为 取出 PC 之值 按 PA PC 或 SA PC 得模拟指令执行的入口地址 将 PC 之值加 1 转向由入口地 址确定的相应的过程执行 模拟的指令功 能 p s 执行 P 操作原语 v s 执行 V 操作原语 put B IN product IN IN 1 mod 10 GET x B out out out 1 mod 10 produce 输入一个字符放入 C 中 consume 打印或显示 x 中的字符 GOTO L PC L NOP 空操作 图 3 2 模拟的处理器指令 序号生产者程序消费者程序 0producep s2 1p s1 GET 2PUTv s1 3v s2 consume 4goto 0goto 0 图 3 3 生产者和消费者程序 5 程序设计 本实习中的程序由三部分组成 初始化程序 处理器调度程序 模拟处理 器指令执行程序 各部分程序的功能及相互间的关系由图 3 4 至图 3 7 指出 图 3 4 初始化流程 图 3 5 模拟处理器调度 初始化程序 模拟实习的程序从初始化程序入口启动 初始化工作包括 对信号量 s1 s2 赋初值 对生产者 消费者进程的 PCB 初始化 初始化后转 向处理调度程序 其流程如图 3 4 处理器调度程序 在计算机系统中 进程并发执行时 任一进程占用处 理器执行完一条指令后就有可能被打断而让出处理器由其它进程运行 故在模 拟系统中也类似处理 每当执行一条模拟的指令后 保护当前进程的现场 让 它成为非运行态 由处理器调度程序按随机数再选择一个就绪进程占用处理器 运行 处理器调度程序流程见图 3 5 图 3 6 模拟处理器指令执行 a 模拟 P s b 模拟 V s 图 3 7 模拟 PV 操作的执行 模拟处理器指令执行程序 按 指令计数器 PC 之值执行指定的指令 且 PC 加 1 指向下一条指令 模拟处理器指令执行程序的流程图见图 3 6 和图 3 7 另外 为了使得模拟程序有一个结束条件 在图 3 6 中附加了 生产者运行 结束 的条件判断 模拟时可以采用人工选择的方法实现 图 3 7 给出了 P s 和 V s 模拟指令执行过程的流程 其它模拟指令的执行过程已在图 3 2 中指出 附录 代码 include include include include define NULL 0 struct spcb char name char state char why int dd typedef struct spcb pcb pcb producter consumer process process1 int s1 s2 i j in out pc m char array 10 char c x int pa 6 sa 6 int p int s p 操作原语 s s 1 if sstate B B 表示阻塞 process why s else process state W W 表示就绪 return s int v int s v 操作原语 s s 1 if sstate W process state W return s char RanChar char arr 10 a b c d e f g h i j return arr abs rand 10 void put printf n please product anychar scanf n c Sleep 1000 array in RanChar in in 1 10 printf product a char is c n array in 1 int k 0 for m 0 m 10 m if array m printf c array m k k 1 printf 缓冲池中有 d 个产品 n k void get Sleep 1000 x array out printf n c get a char fron buffer x printf n array out out out 1 10 int k 0 for m 0 mname printf c t process state printf c t process why printf d t process dd printf n void init 初始化程序 s1 10 s1 表示空缓冲区的数量 s2 0 s2 表示满缓冲区的数量 producter name p 对生产者进程初始化 producter state W producter why producter dd 0 consumer name c 对消费者进程初始化 consumer state W consumer why consumer dd 0 for int k 0 k 10 k array k void bornpa 将生产者程序装入 pa 中 for i 0 i 3 i pa i i void bornsa 将消费者程序装入 sa 中 for i 0 idd i pc 此时把 PC 的值付给 I if process name p pc i 1 switch j case 0 s1 p s1 process dd pc break case 1 put process state W process dd pc break case 2 s2 v s2 process dd pc break case 3 gotol process state W process dd pc else if process name c j sa i pc i 1 switch j case 0 s2 p s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 楼盘迪斯尼活动方案
- 校际网络教研活动方案
- 沈阳年会公司团购活动方案
- 治水创意活动方案
- 民族影展活动方案
- 武川企业活动策划方案
- 梦想卡片活动方案
- 河北防灾减灾活动方案
- 植树节活动超市活动方案
- 残疾人发放礼品活动方案
- 2025至2030中国羊毛制品行业市场发展现状及发展趋势与投资报告
- 股权投资项目可行性研究报告
- 2025年高考山东卷物理试题讲评及备考策略指导(课件)
- 儿童沙门菌感染诊疗要点
- JGJT46-2024《施工现场临时用电安全技术标准》条文解读
- GB/T 10610-2009产品几何技术规范(GPS)表面结构轮廓法评定表面结构的规则和方法
- 围堰施工监理实施细则
- 《世界经济史》课程教学大纲
- 小学语文一到六年级生字表
- U型桥台施工组织设计
- 环境监测站招聘考试试题及答案
评论
0/150
提交评论