- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统
实验报告
课程名称
操作系统实验
课程编号
0906553
实验项目名称
进程的同步
学号
年级
专业
学生所在学院
指导教师
实验室名称地点
工程大学
计算机科学与技术学院
页脚
第六讲进程的同步
一、实验概述
实验名称
进程的同步
实验目的
(1) 使用EOS的信号量编程解决生产者一消费者问题,理解进程同步的慰义。
(2) 调试跟踪EOS的信号虽的匸作过程.理解进程同步的原理。
(3) 修改EOS的信号址算法.使之支持等待超时唤屉功能(有限等待).加深理解进程同步的原埋°
实验类型
验证型实验,设计性实验
实验容
(1) 准备实验
(2) 使用EOS的信号虽:解决生产者一消费者问题
(3) 调试EOS信号量的工作过程
1)创建信号蚩2》等待俘放信号fit 3〉等待信号址(不阻塞〉4)释放信号fit (不唤醒} 5)等待信号fit (阻塞} 6)
俘放信号fit (唤醒)
(4)修改EOS的信号量算法 二、实验环境
操作系统集成实验环境OS Lab
三、实验过程
设讣思路和流程图
算法实现
需要解决的问题及解答
. P143生产者在生产了 13号产品后木來要继续生产14号产品,可此时生产者为什么必须等待消费者 消费「1号产品后,才能生产14号产品呢?生产者和消费者是怎样使用同步对彖來实现该同步过程的呢?
答:此时生产/0-13号14个产品,消费了0-3号4个产品,缓冲区都占满C只有缓冲区有空闲生产者 才能生产东西.有权向里面放东西。所以它必须等到消费者.取走产品,有空闲缓冲区时,才继续生产14 号产品。
. P145-3.4修改EOS的信号址算法(只看一次消费1个产品的,一次消费2个产品的可以写到实验报 告中〉
答:见三.四部分
?思考在ps/semaphore. c文件的PsWaitForSemaphore和PsReleaseSemaphore函数中,为什么婆使用 原子操作?
答:原子操作要求一旦开始就要运行到结束,不能有中断。在执行等待信号虽和释放信号虽的时候, 不允许cpu响应外部中断,所以使用原子操作。
?绘制ps/semaphore, c文件PsWaitForSemaphore和PsReleaseSemaphore函数的流程图。
PsWaitForSemaphore
Ps Release Semaphore
主要数据结构、实现代码及其说明
1)修改 PsWaitForSemaphore 函数
if (Sezsaphore~Count0) {
Sesaphore-Count—:
flag=STATUS_SUCCESS:
}〃如果信号址大于零.说明尚冇资源.M以为线程分配
else
flag=PspWait(Semaphore-WaitListEead, Milliseconds):
KeEnablelnterrupts(intState): // 原子操作完成?恢复中断.
return flag;
} 〃否则.说明资源数1ft不够.不能再为线程分配资谏.因此要使线程等待
2)修改 PsRcleaseSemaphore 函数
if (Semaphore- Count + ReleaseCount Semaphore- MaximunCount) {
Status = STATUS.SEMAPHORE^LIMIT.EXCEEDED:
} else {
//
//记录当前的信号扯的
//
if (NULL != PreviousCount) {
*PreviousCount = Sezaphore*Count:
int zc=5emaphore- Count:
//
//目制仅实现了标准记录型信号fit每执行一次信号址的释放操作
//只能使信号於的值增加K
//
while ((iListlsEmpty(SemaphoreWaitListHead))(ReleaseCount)){
PspWakeThread(Se=aphore-WaitListHead, STATVS.SVCCESS):
PspThreadSchedule():
ReleaseCount一;
Sesaphore~Count=mc*ReleaseCount:
//
//町能冇线程被唤醒.执行线程调度。
Status = STATVS.SUCCESS;
}
源程序并附上注释
^include psp.h”
VOID
PslnilializcSemaphorc(
IN PSEMAPHORE Semaphore?
IN LONG InitialCounL
IN LONG MaximumCounl
)
/*++
功能描述:
初始化信号最结构体。
辱数:
Semaphore-要初始化的信号最结构体描针.
InilialCount -信号fit的初始
您可能关注的文档
- (完整)部编版二年级上册语文期末考试卷.docx
- (完整)第四章随机变量的数字特征总结,推荐文档.docx
- :机械运动单元测试题(word版有答案)绝对经典--绝对经典[2].docx
- 《the-Emperor‘s-clothes》英语教学设计说明.docx
- 【人教版】数学二年级下册:《锐角和钝角》教学设计word.docx
- 10.1_10.2工程施工组织设计方案(方案)报审表(恢复).docx
- 2011-2012学年度第一学期八年级物理期末模拟题.docx
- 2014年1月上海市徐汇区初三物理一模试题及答案.docx
- 2015届九年级中考总复习(华师大版)精练精析:三十三、概率2(15页,考点+分析+点评).docx
- 2015全国中考语文试题浙江温州卷(附解析).docx
文档评论(0)