操作系统实
课程名称实验项目名称学号姓名学生所在学院实验室名称地点
验
操作系统实验进程的同步
报
课程编号
告
0906553
年级专业指导教师
哈尔滨工程大学计算机科学与技术学院
f第六讲进程的同步
一、实验概述1实验名称进程的同步2实验目的
(1)使用EOS的信号量编程解决生产者消费者问题,理解进程同步的意义。(2)调试跟踪EOS的信号量的工作过程,理解进程同步的原理。(3)修改EOS的信号量算法,使之支持等待超时唤醒功能(有限等待),加深理解进程同步的原理。
3实验类型验证型实验,设计性实验4实验内容
(1)准备实验(2)使用EOS的信号量解决生产者-消费者问题(3)调试EOS信号量的工作过程
1)创建信号量2)等待释放信号量3)等待信号量(不阻塞)4)释放信号量(不唤醒)5等待信号量(阻塞)6释放信号量(唤醒)
(4)修改EOS的信号量算法
二、实验环境操作系统集成实验环境OSLab三、实验过程1设计思路和流程图
f2算法实现3需要解决的问题及解答
1P143生产者在生产了13号产品后本来要继续生产14号产品,可此时生产者为什么必须等待消费者消费了4号产品后,才能生产14号产品呢?生产者和消费者是怎样使用同步对象来实现该同步过程的呢?答:此时生产了013号14个产品,消费了03号4个产品,缓冲区都占满了。只有缓冲区有空闲生产者才能生产东西,有权向里面放东西。所以它必须等到消费者,取走产品,有空闲缓冲区时,才继续生产14号产品。2P14534修改EOS的信号量算法只看一次消费1个产品的,一次消费2个产品的可以写到实验报告中答:见三,四部分3思考在pssemaphorec文件内的PsWaitForSemaphore和PsReleaseSemaphore函数中,为什么要使用原子操作?答:原子操作要求一旦开始就要运行到结束,不能有中断。在执行等待信号量和释放信号量的时候,不允许cpu响应外部中断,所以使用原子操作。4绘制pssemaphorec文件内PsWaitForSemaphore和PsReleaseSemaphore函数的流程图。PsWaitForSemaphore
原子操作前关中断
开始原子操作P操作
NWait操作的信号量大于0Y执行P操作
P操作结束
fPsReleaseSemaphore
原子操作前关中断
开始原子操作V操作NP和V操作的信号量之和大于缓冲队列长度Y记录当前信号量的值
返回“信号数目量超出范围”
释放信号量
信号量值1NP操作控制的信号量不大于0Y被阻塞进程量小于要释唤醒等待进程Y唤醒队列中进程N等待队列为空放的信号量N
Y
返回“唤醒成功”
结束
4主要数据结构、实现代码及其说明
1修改PsWaitFor