好文档 - 专业文书写作范文服务资料分享网站

操作系统实验 进程的同步heu讲解

天下 分享 时间: 加入收藏 我要投稿 点赞

操作系统

实 验 报 告

课程名称 实验项目名称 学号 姓名 学生所在学院 实验室名称地点

操作系统实验 进程的同步 年级 专业 指导教师 课程编号 0906553

哈尔滨工程大学

计算机科学与技术学院.

进程的同步第六讲

一、实验概述 实验名称1. 进程的同步 实验目的2.

的信号量编程解决生产者EOS —消费者问题,理解进程同步的意义。(1)使用

EOS 的信号量的工作过程,理解进程同步的原理。(2)调试跟踪 ,加深理解进程同步的原理。EOS 修改 的信号量算法,使之支持等待超时唤醒功能(有限等待)(3)

3. 实验类型 验证型实验,设计性实验 4. 实

验内容 )准备实验1( 的信号量解决生产者-消费者问题(2)使用 EOS

信号量的工作过程3)调试 EOS (6) 等待信号量(阻塞) )(不阻塞)3)等待信号量 4释放信号量(不唤醒) 5) 等待释放信

号量2 )1创建信号量 )

二、实验环境OS Lab 操作系统集成实验环境 三、实验过程 1. 设计思路和流程图

释放信号量(唤醒)

EOS (4)修改的信号量算法

2. 算法实现

3. 需要解决的问题及解答

(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操作

N

Wait操作的信号量 大于0 Y

执行P操作

操作结束P

Ps Release Semaphore 原子操作前关中断 开始原子操作V操作 N N N Y

操作的信号量之P和V和大于缓冲队列长度 Y 记录当前信号量的值 信号量值P大于 返回“信号数目量超出范围” +1 释放信号量 操作控制的信号量不0 Y 唤醒等待进程 被阻塞进程量小于要释放的信号量唤醒队列中进程 N 等待队列为空Y 返回“唤醒成功” 结束 4. 主要数据结构、实现代码及其说明

1)修改PsWaitForSemaphore函数

if (Semaphore->Count>0){ Semaphore->Count--; flag=STATUS_SUCCESS;

}//如果信号量大于零,说明尚有资源,可以为线程分配 else

flag=PspWait(&Semaphore->WaitListHead, Milliseconds);

KeEnableInterrupts(IntState); // 原子操作完成,恢复中断。 return flag;

}//否则,说明资源数量不够,不能再为线程分配资源,因此要使线程等待

2)修改PsReleaseSemaphore函数

if (Semaphore->Count + ReleaseCount > Semaphore->MaximumCount) { Status = STATUS_SEMAPHORE_LIMIT_EXCEEDED; } else { //

// 记录当前的信号量的值。 //

if (NULL != PreviousCount) { *PreviousCount = Semaphore->Count; }

int mm=Semaphore->Count; //

目前仅实现了标准记录型信号量,每执行一次信号量的释放操作 // 。只能使信号量的值增加 1 // //

while ((!ListIsEmpty(&Semaphore->WaitListHead))&&(ReleaseCount)){ PspWakeThread(&Semaphore->WaitListHead, STATUS_SUCCESS); PspThreadSchedule();

ReleaseCount--;

}

Semaphore->Count=mm+ReleaseCount; //

操作系统实验 进程的同步heu讲解

操作系统实验报告课程名称实验项目名称学号姓名学生所在学院实验室名称地点操作系统实验进程的同步年级专业指导教师课程编号0906553
推荐度:
点击下载文档文档为doc格式
21mp26m8pb7yqpo85se79mzf00wrvr00ixp
领取福利

微信扫码领取福利

微信扫码分享