进程的同步实验重点分析.doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统 实 验 报 告 课程名称 操作系统实验 课程编号 0906553 实验项目名称 进程的同步 学号 年级 姓名 专业 计算机科学与技术 学生所在学院 计算机科学与技术学院 指导教师 实验室名称地点 哈尔滨工程大学 计算机科学与技术学院 进程的同步 一.实验概述 实验名称:进程的同步 实验目的: 使用 EOS 的信号量,编程解决生产者—消费者问题,理解进程同步的意义; 调试跟踪 EOS 信号量的工作过程,理解进程同步的原理; 修改 EOS 的信号量算法,使之支持等待超时唤醒功能(有限等待),加深理解进程同步的原理。 实验类型:验证+设计 实验内容: 准备实验 使用 EOS 的信号量解决生产者-消费者问题 调试 EOS 信号量的工作过程 修改 EOS 的信号量算法 二.实验环境 操作系统:windows XP 编译器:Tevalaton OS Lab 语言:C 三.实验过程 1.设计思路和流程图 2.实验过程 1)准备实验,启动OS Lab,新建一个EOS Kernel项目 Kernel项目中生成的SDK文件覆盖到ROS应用程序项目文件夹中的SDK文件夹 2)使用pc.c文件中的源代码替换之前创建的EOS应用程序项目中EOSApp.c文件中的代码 3)信号量结构体(SEMAPHORE)中的各个成员变量是由 API 函数 CreateSemaphore 的对应参数初始化的。 创建信号量,启动调试EOS应用程序,在OS Lab弹出的调试异常对话框中选择 EmptySemaphoreHandle = CreateSemaphore(BUFFER_SIZE, BUFFER_SIZE, NULL); 4)启动调试逐语句调试进入 5)在semaphore.c文件的顶部查找到 PsInitializeSemaphore 函数的定义,在此函数的第一行代码处添加一个断点,继续调试,,到断点处中断。观察PsInitializeSemaphore 函数中用来初始化信号量结构体成 员的值,应该和传入CreateSemaphor函数的参数值是一致的; 6)逐过程单步调试 PsInitializeSemaphore函数执行的过程,查看信号量结构体被初始化的过程。 打开“调用堆栈”窗口,查看函数的调用层次; 7)等待信号量(不阻塞),删除所有的断点(防止有些断点影响后面的调试), 在 eosapp.c 文件的 Producer 函数中,等待 Empty信号量的代码行添加一个断点; WaitForSingleObject(EmptySemaphoreHandle, INFINITE); 8)继续调试,到断点处中断,WaitForSingleObject 函数最终会调用内核中的PsWaitForSemaphore函数完成等待操作。所以, 在 semaphore.c 文件中 PsWaitForSemaphore 函数的第一行添加一个断点。 在断点处中断后,逐过程调试,直到完成 PsWaitForSemaphore 函数中的所有操作。可以看到此次执行并没有 进行等待,只是将 Empty 信号量的计数减少了 1(由 10 变为了 9)就返回了; 9)释放信号量(不阻塞),生产者和消费者刚开始执行时,用来放产品的缓冲区都是空的,所以生产者在第一次调用 WaitForSingleObject 函数等待 Empty 信号量时,应该不需要阻塞就可以立即返回; 删除所有的断点(防止有些断点影响后面的调试),在 eosapp.c 文件的 Producer 函数中,等待 Empty 信号量的代码行添加一个断点; WaitForSingleObject(EmptySemaphoreHandle, INFINITE); 10)继续调试,到断点处中断,WaitForSingleObject 函数最终会调用内核中的PsWaitForSemaphore函数完成等待操作。所以, 在 semaphore.c 文件中 PsWaitForSemaphore 函数的第一行添加一个断点; 11)继续调试,在断点处中断,逐过程单步调试,,直到完成 PsWaitForSemaphore 函数中的所有操作。可以看到此次执行并没有 进行等待,只是将 Empty 信号量的计数减少了 1(由 10 变为了 9)就返回了; 12)释放信号量(不唤醒),删除所有的断点(防止有些断点影响后面的调试), 在 eosapp.c 文件的Producer函数中,释放Full信号量的代码行添加一个断点。 ReleaseSemaphore(FullSemaphoreHandl

文档评论(0)

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

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

1亿VIP精品文档

相关文档