- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统
实 验 报 告
课程名称 操作系统实验 课程编号 0906553 实验项目名称 进程的同步 学号 年级 姓名 专业 学生所在学院 指导教师 实验室名称地点
哈尔滨工程大学
计算机科学与技术学院
第四讲 进程的同步
一、实验概述
1. 实验名称
进程的同步
2. 实验目的
? 使用EOS的信号量,编程解决生产者—消费者问题,理解进程同步的意义。
? 调试跟踪EOS信号量的工作过程,理解进程同步的原理。
? 修改EOS的信号量算法,使之支持等待超时唤醒功能(有限等待),加深理解进程同步的原理。
3. 实验类型
验证+设计
4. 实验内容
(1)准备实验EOS的信号量解决生产者-消费者问题
(3)调试EOS信号量的工作过程
(4)修改EOS的信号量算法
二、实验环境
EOS操作系统和OS Lab集成实验环境,主要运用了C语言。
三、实验过程
3. 需要解决的问题及解答
(1)P143,生产者在生产了13号产品后本来要继续生产14号产品,可此时生产者为什么必须等待消费者消费了4号产品后,才能生产14号产品呢?生产者和消费者是怎样使用同步对象来实现该同步过程的呢?
这是因为临界资源的限制。临界资源就像产品仓库,只有“产品仓库”空闲生产者才能生产东西,有权向里面放东西。因此它必须要等到消费者,取走产品,临界资源空闲时,才能继续生产14号产品。
(2)P147-四思考与练习-2. 绘制ps/semaphore.c文件内PsWaitForSemaphore和PsReleaseSemaphore函数的流程图。
5. 源程序并附上注释
#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 INT Milliseconds,IN STATUS i )
/*++
功能描述:信号量的 Wait 操作(P 操作)。
参数:Semaphore -- Wait 操作的信号量对象。
Milliseconds -- 等待超时上限,单位毫秒。返回值:
STATUS_SUCCESS。
--*/
{BOOL IntState;
ASSERT(KeGetIntNesting() == 0); // 中断环境下不能调用此函数。
IntState = KeEnableInterrupts(FALSE); // 开始原子操作,禁止中断。
// 目前仅实现了标准记录型信号量,不支持超时唤醒功能,所以 PspWait 函数的第二个参数的值只能是 INFINITE。
if(Semaphore-Count 0)
{ Semaphore-Count--;
i=STATUS_SUCCESS;}
else {i=PspWait(Semaphore-WaitListHead,Milliseconds );}
KeEnableInterrupts(IntState); // 原子操作完成,恢复中断。
return i;
}
STATUS
PsReleaseSemaphore(IN PSEMAPHORE Semaphore,IN LONG ReleaseCount,OUT PLONG PreviousCount)
/*++
功能描述:信号量的 Signal 操作(V 操作)。
参数:Semaphore -- Wait 操作的信号量对象。
-- 信号量计数增加的数量。当前只能为 1。当你修改信号量使之
您可能关注的文档
- 揭古代十八层地狱的神秘面纱方案.doc
- 揭开货币的神秘面纱-课件2(32p)方案.ppt
- 揭秘贵金属现货交易里面的骗局与陷阱方案.doc
- 搅拌器课件方案.ppt
- 搅拌摩擦焊方案.doc
- 搅拌桩施工1方案.doc
- 揽胜广告经验之谈方案.ppt
- 搜狗拼音输入法的讲解(张荣华)方案.ppt
- 搜索引擎基本原理及实现技术——索引方案.ppt
- 摄像头技术规范书方案.doc
- 智慧社区建设标准与社区治理模式创新报告.docx
- 2025年餐饮业环保法律法规遵守与绿色经营合规性研究报告.docx
- 5G时代2025年中国移动医疗设备产业发展趋势研究报告.docx
- 农业碳汇开发中的法律法规政策分析与市场影响报告.docx
- 2025年线上法律咨询服务跨境纠纷调解平台风险管理及合规性研究.docx
- 工业机器人智能控制技术2025年研发成果与产业拓展报告.docx
- 剧本杀沉浸式体验馆2025年连锁经营成功要素研究报告.docx
- 2025年餐饮行业环保法规实施与企业管理优化报告.docx
- 医药企业市场准入法规解读与2025合规操作手册.docx
- 2025年社区智慧养老服务平台运营管理区域化差异化策略报告.docx
文档评论(0)