- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统实验四进程的同步剖析
操作系统
实 验 报 告
课程名称 操作系统实验 课程编号 0920311 实验项目名称 操作系统的启动 学号 年级 2011级 姓名 专业 软件工程 学生所在学院 软件学院 指导教师 王红滨 实验室名称地点 软件工程实验室 21B282
哈尔滨工程大学
软件学院
第六讲 进程的同步
一、实验概述
1. 实验名称
实验系统的启动
2. 实验目的
1).使用 EOS 的信号量编程解决生产者—消费者问题,理解进程同步的意义。
2).调试跟踪 EOS 的信号量的工作过程,理解进程同步的原理。
3).修改 EOS 的信号量算法,使之支持等待超时唤醒功能(有限等待),加深理解进程同步的原理。
3. 实验类型(验证、设计)
验证
4. 实验内容
1).准备实验
2).使用EOS的信号量解决生产者-消费者问题
3).调试EOS信号量的工作过程
①创建信号量等待释放信号量等待信号量(不阻塞)释放信号量(不唤醒)等待信号量(阻塞)释放信号量(唤醒)EOS的信号量算法
在目前EOS Kernel项目的ps/semaphore.c文件中,PsWaitForSemaphore函数的Milliseconds参数只能是INFINITE,PsReleaseSemaphore 函数的ReleaseCount 参数只能是1。现在要求同时修改PsWaitForSemaphore函数和PsReleaseSemaphore函数中的代码,使这两个参数能够真正起到作用,使信号量对象支持等待超时唤醒功能和批量释放功能。
二、实验环境
操作系统:windows xp
编译环境:OS Lab
三、实验过程
1. 设计思路和流程图
图3-1.整体试验流程图
图3-2.Main函数流程图、生产者消费、消费者流程图
2. 需要解决的问题及解答
(1).思考在ps/semaphore.c文件内的PsWaitForSemaphore和PsReleaseSemaphore函数中,为什么要使用原子操作?
答:在执行等待信号量和释放信号量的时候,是不允许cpu响应外部中断的,如果此时cpu响应了外部中断,会产生不可预料的结果,无法正常完成原子操作。
(2). 绘制ps/semaphore.c文件内PsWaitForSemaphore和PsReleaseSemaphore函数的流程图。
1).PsWaitForSemaphore函数流程图。
2). PsReleaseSemaphore函数流程图
(3). P143生产者在生产了13号产品后本来要继续生产14号产品,可此时生产者为什么必须等待消费者消费了4号产品后,才能生产14号产品呢?生产者和消费者是怎样使用同步对象来实现该同步过程的呢?
答:这是因为临界资源的限制。缓冲区只有十个空间,现在消费比生产慢,此时分别装了4到13号产品,而消费者只消费了3个。此时装入产品与产品的存储空间成为直接相互制约关系,再消费者消费了下一个产品之前生产者不能继续装入。因此,可解释生产者为什么必须等待消费者消费了4号产品后才能生产14号产品。
(4). 根据本实验3.3.2节中设置断点和调试的方法,自己设计一个类似的调试方案来验证消费者线程在消费24号产品时会被阻塞,直到生产者线程生产了24号产品后,消费者线程才被唤醒并继续执行的过程。
答:可以按照下面的步骤进行调试
(1) 删除所有的断点。
(2) 按F5启动调试。OS Lab会首先弹出一个调试异常对话框。
(3) 在调试异常对话框中选择“是”,调试会中断。
(4) 在Consumer函数中等待Full信号量的代码行(第173行) WaitForSingleObject(FullSemaphoreHandle, INFINITE); 添加一个断点。
(5) 在“断点”窗口(按Alt+F9打开)中此断点的名称上点击右键。
(6) 在弹出的快捷菜单中选择“条件”。
(7) 在“断点条件”对话框(按F1获得帮助)的表达式编辑框中,输入表达式“i == 24”。
(8) 点击“断点条件”对话框中的“确定”按钮。
(9) 按F5继续调试。只有当消费者线程尝试消费24号产品时才会在该条件断点处中断。
3. 主要数据结构、实现代码及其说明
1).对PsWaitForSemaphore函数的修改:
PsWaitForSemaphore(
IN PSEMAPHORE Semaphore,
您可能关注的文档
最近下载
- 品酒师考试品酒师综合练习试卷(品酒师考试).doc VIP
- 上海冷链协会新质冷链物流发展白皮书202536页.pdf
- 品酒师考试葡萄酒品酒师试卷.doc VIP
- 品酒师考试:葡萄酒品酒师测试题五.docx VIP
- 品酒师考试:葡萄酒品酒师试题预测五.docx VIP
- 品酒师考试:葡萄酒品酒师试题及答案(强化练习).docx VIP
- 甘肃省第一届职业技能大赛无人机驾驶(植保)项目(国赛精选)技术工作文件.docx VIP
- 班主任艺术:班主任与家长沟通的技巧-班主任工作艺术.docx VIP
- 品酒师考试葡萄酒品酒师.doc VIP
- ISO56001-2024创新管理体系 — 要求(中文版-雷泽佳译2024-09).docx VIP
文档评论(0)