河南农业大学计机操作系统实验报告四进程的同步.docVIP

河南农业大学计机操作系统实验报告四进程的同步.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
河南农业大学计机操作系统实验报告四进程的同步

信息与管理科学学院计算机系 实验报告 课程名称: 计算机操作系统 实验名称: 进程的同步 姓 名: 张瑞芳 班 级: 指导教师: 刘羿 学 号: 实 验 室: 菊潭机房二 日 期: 2012.11.12 一、实验目的 使用EOS的信号量编程解决生产者—消费者问题,理解进程同步的意义。 二、实验环境 EOS环境 三、实验内容 调试跟踪EOS的信号量的工作过程,修改EOS的信号量算法,使之支持等待超时唤醒功能(有限等待),加深理解进程同步的原理。 四、实验操作过程 1 准备实验 启动OS Lab。 新建一个EOS Kernel项目。 分别使用Debug配置和Release配置生成此项目,从而生成完全版本的EOS SDK文件夹。 新建一个EOS应用程序项目。 使用在第三步生成的SDK文件夹覆盖应用程序项目文件夹中的SDK文件夹。 2 使用EOS的信号量解决生产者-消费者问题 将pc.c文件中的源代码移动到3.1节创建的EOS应用程序项目中。 按F7生成修改后的EOS应用程序项目。 成功生成项目后按F5启动调试。 应用程序开始执行后,OS Lab会弹出一个调试异常对话框选择“”继续调试。 立即激活虚拟机窗口查看生产者-消费者同步执行的过程。 3 跟踪调试EOS的信号量的工作过程 3.1 创建信号量 按F5启动调试EOS应用项目。 应用程序开始执行后,OS Lab会弹出一个调试异常对话框选择“是”, EmptySemaphoreHandle = CreateSemaphore(BUFFER_SIZE, BUFFER_SIZE, NULL); 添加一个断点。 按F5继续调试,到此断点处中断。 按F11调试进入CreateSemaphore函数。可以看到此API函数只是调用了PsCreateSemaphoreObject函数来创建信号量对象。 按F11调试进入PsCreateSemaphoreObject函数。 3.2 等待、释放信号量 3.2.1 等待信号量(不阻塞) 删除所有的断点(防止有些断点影响后面的调试)。 在EOS应用项目的生产者线程函数中,找到等待Empty信号量的代码行 WaitForSingleObject(EmptySemaphoreHandle, INFINITE); 并在此行代码处添加一个断点。 按F5继续调试,到此断点处中断。 3.2.2 释放信号量(不唤醒) 删除所有的断点(防止有些断点影响后面的调试)。 在生产者线程函数中释放Full信号量的代码行 ReleaseSemaphore(FullSemaphoreHandle, 1, NULL); 添加一个断点。 按F5继续调试,到此断点处中断。 按F11调试进入ReleaseSemaphore函数。 继续按F11调试进入PsReleaseSemaphoreObject函数。 配合使用F10和F11功能,调试进入PsReleaseSemaphore函数。 3.2.3 等待信号量(阻塞) 由于开始时生产者线程生产产品的速度较快,而消费者线程消费产品的速度较慢,所以当缓冲池中所有的缓冲区都被产品占用时,生产者再生产新的产品就会被阻塞(也就是在减少空缓冲区数量时会被阻塞),下面调试这种情况。 停止之前的调试。 删除所有的断点。 按F5重新启动调试。 应用程序开始执行后,OS Lab会弹出一个调试异常对话框选择“是”,PsWaitForSemaphore函数的 PspWait(Semaphore-WaitListHead, INFINITE); 代码行添加一个断点。 按F5继续调试,并立即激活虚拟机窗口查看输出。 此时生产者、消费者都不会被阻塞,同步执行一段时间后才到此断点处中断。 激活虚拟机窗口查看输出的结果,可以看到声产了从0到13的14个产品,但是只消费了从0到3的4个产品,有10个产品没有被消费,所以缓冲池中的10个缓冲区就都被占用了,这与之前调试的结果是一致的。 3.2.4 释放信号量(唤醒) 由于只有当消费者线程从缓冲池中消费了一个产品从而产生了一个空缓冲区后,生产者线程才会被唤醒从而继续生产14号产品,按照下面的步骤操作: 删除所有断点。 在消费者线程函数的释放Empty信号量的代码行 ReleaseSemaphore(EmptySemap

文档评论(0)

quechui388620 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档