- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统实验五剖析
操作系统
实 验 报 告
课程名称 操作系统实验 课程编号 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
Ps Release Semaphore
3. 主要数据结构、实现代码及其说明
ps/semaphore.c文件
#include psp.h
VOID
PsInitializeSemaphore(
IN PSEMAPHORE Semaphore,
IN LONG InitialCount,
IN LONG MaximumCount)
/*++
功能描述:
初始化信号量结构体。
参数:
Semaphore -- 要初始化的信号量结构体指针。
InitialCount -- 信号量的初始值,不能小于 0 且不能大于 MaximumCount。
MaximumCount -- 信号量的最大值,必须大于 0。
返回值:无。
--*/
{
ASSERT(InitialCount = 0 InitialCount = MaximumCount MaximumCount 0);
Semaphore-Count = InitialCount;
Semaphore-MaximumCount = MaximumCount;
ListInitializeHead(Semaphore-WaitListHead);
}
STATUS
PsWaitForSemaphore(
IN PSEMAPHORE Semaphore,
IN ULONG Milliseconds)
/*++
功能描述:
信号量的 Wait 操作(P 操作)。
参数:
Semaphore -- Wait 操作的信号量对象。
Milliseconds -- 等待超时上限,单位毫秒。
返回值:
STATUS_SUCCESS。
当你修改信号量使之支持超时唤醒功能后,如果等待超时,应该返回 STATUS_TIMEOUT。
--*/
{
BOOL IntState;
STATUS flag;
ASSERT(KeGetIntNesting() == 0); // 中断环境下不能调用此函数。
IntState = KeEnableInterrupts(FALSE); // 开始原子操作,禁
文档评论(0)