操作系统实 验 报 告课程名称操作系统实验课程编号0906553实验项目名称进程的同步学号年级姓名专业学生所在学院指导老师实验室名称地点 哈尔滨工程大学计算机科学与技术学院第五讲 进程的同步一、实验概述1. 实验名称进程的同步2. 实验目的使用EOS的信号量,编程解决生产者—消费者问题,理解进程同步的意义。 调试跟踪EOS信号量的工作过程,理解进程同步的原理。 修改EOS的信号量算法,使之支持等待超时唤醒功能(有限等待),加深理解进程同步的原理。 3. 实验类型验证,设计4. 实验内容4.1 准备实验 4.2 使用 EOS 的信号量解决生产者-消费者问题4.3 调试EOS信号量的工作过程 4.3.1 创建信号量 4.3.2 等待、释放信号量4.3.2.1 等待信号量(不堵塞)4.3.2.2 释放信号量(不唤醒)4.3.2.3 等待信号量(堵塞)4.3.2.4 释放信号量(唤醒)4.4 修改 EOS 的信号量算法二、实验环境操作系统集成实验环境 OS Lab EOS 操作系统三、实验过程1. 设计思路和流程图2. 需要解决的问题及解答(1). P143生产者在生产了13号产品后原来要继续生产14号产品,可此时生产者为什么必须等待消费者消费了4号产品后,才能生产14号产品呢?生产者和消费者是怎样使用同步对象来实现该同步过程的呢?答:此时生产了0-13号14个产品,消费了0-3号4个产品,缓冲区都占满了。只有缓冲区有空闲生产者才能生产东西,有权向里面放东西。所以它必须等到消费者,取走产品,有空闲缓冲区时,才继续生产14号产品。(2). P145-3.4 修改EOS的信号量算法(只看一次消费1个产品的,一次消费2个产品的可以写到实验报告中)答:见之后部分(3). 思考在ps/semaphore.c文件内的PsWaitForSemaphore和PsReleaseSemaphore函数中,为什么要使用原子操作? 答:原子操作要求一旦开始就要运行到结束,不能有中断。在执行等待信号量和释放信号量的时候,不允许 cpu 响应外部中断,所以使用原子操作。(4). 绘制ps/semaphore.c文件内PsWaitForSemaphore和PsReleaseSemaphore函数的流程图。PsWaitForSemaphore原子操作前关中断开始原子操作 P 操作P 操作结束Wait 操作的信号量大于 0Y执行 P 操作NPs Release Semaphore3. 主要数据结构、实现代码及其说明ps/semaphore.c 文件#include "psp.h"VOIDPsInitializeSemaphore(IN PSEMAPHORE Semaphore,IN LONG InitialCount,原子操作前关中断开始原子操作 V 操作返回“信号数目量超出范...