操作系统实验--进程的同步heu.docx

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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的初始

文档评论(0)

laugh + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档