操作系统 实 验 报 告课程名称操作系统实验课程编号0906553实验项目名称进程的同步学号2011061324年级2011姓名张耀专业计算机科学与技术学生所在学院计算机科学与技术指导教师印桂生实验室名称地点21B276 哈尔滨工程大学计算机科学与技术学院第五讲 进程的同步一、实验概述1. 实验名称进程的同步2. 实验目的(1)使用 EOS —的信号量,编程解决生产者消费者问题,理解进程同步的意义; (2) 调试跟踪 EOS 信号量的工作过程,理解进程同步的原理;(3)修改 EOS 的信号量算法,使之支持等待超时唤醒功能(有限等待),加深理解进程同步的原理。3. 实验类型验证型和设计型实验4. 实验内容(1)准备实验;(2) 使用 EOS 的信号量解决生产者-消费者问题;(3) 调试 EOS 信号量的工作过程;创建信号量等待释放信号量等待信号量(不阻塞)释放信号量(不唤醒)等待信号量(阻塞)释放信号量(唤醒)(4) 修改 EOS 的信号量算法。二、实验环境(1)OSLab 集成实验环境;(2)EOS 操作系统;(2)C 语言。三、实验过程1. 设计思路和流程图1main 函数开始创建 Mutex对象创建 Empty信号量对象创建 Full 信号量对象创建生产者线程创建消费者线程等待生产者线程和消费者线程结束关闭句柄main 函数结束Producer 函数开始生产完毕?等待 Empty 信号量对象等待 Mutex 对象生产一个产品,占用一个缓冲区循环向后移动缓冲区指针释放 Mutex 对象释放 Full 信号量对象等待 500毫秒Producer函数结束Consumer 函数开始消费完毕毕?等待 Full 信号量对象等待 Mutex对象消费一个产品,清空一个缓冲区循环向后移动缓冲区指针释放 Mutex对象释放 Empty 信号量对象前10个产品?等待 2000毫秒等待100毫秒Consumer 函数结束图 3.1.12. 需要解决的问题及解答(1) 生产者在生产了 13 号产品后本来要继续生产 14 号产品,可此时生产者为什么必须等待消费者消费了 4 号产品后,才能生产 14 号产品呢?生产者和消费者是怎样使用同步对象来实现该同步过程的呢?答:因为临界资源的访问限制,程序中限定了缓冲池的大小为 10,只有缓冲池有空余时生产者才能向里边放产品,同时只有缓冲池有产品时消费者才能2向外取东西。当生产者生产了 13 号产品后,共生产了从 0 到 13 的 14 个产品,但是只消费了从 0 到 3 的 4 个产品,所以缓冲池中的 10 个缓冲区就都被占用了,所以不能继续生产 14 ...