操作系统实验 第六讲 进程的同步.doc

操作系统实验 第六讲 进程的同步.doc

ID:56234891

大小:279.84 KB

页数:17页

时间:2020-03-22

操作系统实验 第六讲 进程的同步.doc_第1页
操作系统实验 第六讲 进程的同步.doc_第2页
操作系统实验 第六讲 进程的同步.doc_第3页
操作系统实验 第六讲 进程的同步.doc_第4页
操作系统实验 第六讲 进程的同步.doc_第5页
资源描述:

《操作系统实验 第六讲 进程的同步.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、操作系统实验报告课程名称操作系统实验实验项目名称进程的同步学号班级20120616姓名专业计算机科学与技术学生所在学院计算机科学与技术学院指导教师初妍实验室名称地点21#428哈尔滨工程大学计算机科学与技术学院16一、实验概述1.实验名称进程的同步2.实验目的使用EOS的信号量,编程解决生产者—消费者问题,理解进程同步的意义。调试跟踪EOS信号量的工作过程,理解进程同步的原理。修改EOS的信号量算法,使之支持等待超时唤醒功能(有限等待),加深理解进程同步的原理。3.实验类型验证+设计4.实验内容3.1准备实验3.2使用E

2、OS的信号量解决生产者-消费者问题3.3调试EOS信号量的工作过程3.3.1创建信号量3.3.2等待、释放信号量3.3.2.1等待信号量(不阻塞)3.3.2.2释放信号量(不唤醒)3.3.2.3等待信号量(阻塞)3.3.2.4释放信号量(唤醒)3.4修改EOS的信号量算法二、实验环境操作系统windosxp编译器OSLab语言c语言16三、实验过程1.设计思路和流程图准备实验使用EOS的信号量解决生产者-消费者问题调试EOS信号量的工作过程创建信号量释放信号量(唤醒)等待信号量(阻塞)释放信号量(不唤醒)等待信号量(不阻

3、塞)等待释放信号量修改EOS的信号量算法结束实验16main函数开始创建Mutex对象创建Empty信号量对象创建Full信号量对象创建生产者线程创建消费者线程等待生产者线程和消费者线程结束关闭句柄main函数结束Producer函数开始生产完毕?等待Empty信号量对象等待Mutex对象生产一个产品,占用一个缓冲区循环向后移动缓冲区指针释放Mutex对象释放Full信号量对象等待500毫秒Producer函数结束Consumer函数开始消费完毕毕?等待Full信号量对象等待Mutex对象消费一个产品,清空一个缓冲区循环

4、向后移动缓冲区指针释放Mutex对象释放Empty信号量对象前10个产品?等待2000毫秒等待100毫秒Consumer函数结束3.需要解决的问题及解答(1)生产者在生产了13号产品后本来要继续生产14号产品,可此时生产者为什么必须等待消费者消费了4号产品后,才能生产14号产品呢?生产者和消费者是怎样使用同步对象来实现该同步过程的呢?答:这是因为临界资源的限制。临界资源的数值范围是0到10,只有当临界资源不满10时才能让生产者生产东西,每次生产一个临界资源数量加一16,当临界资源数值到10时,无法继续生产,所以它必须等到

5、消费者,消耗掉一个,临界资源数值才会减一并腾出空间,才能继续生产14号产品。(2)修改EOS的信号量算法修改PsWaitForSemaphore函数:PsWaitForSemaphore(INPSEMAPHORESemaphore,INULONGMilliseconds)/*++功能描述:信号量的Wait操作(P操作)。参数:Semaphore--Wait操作的信号量对象。Milliseconds--等待超时上限,单位毫秒。返回值:STATUS_SUCCESS。当你修改信号量使之支持超时唤醒功能后,如果等待超时,应该返回

6、STATUS_TIMEOUT。--*/{BOOLIntState;STATUSflag;//保存不同情况下的返回值,ASSERT(KeGetIntNesting()==0);//中断环境下不能调用此函数。IntState=KeEnableInterrupts(FALSE);//开始原子操作,禁止中断。if(Semaphore->Count>0){Semaphore->Count--;flag=STATUS_SUCCESS;}//如果信号量大于零,说明尚有资源,可以为线程分配elseflag=PspWait(&Semaph

7、ore->WaitListHead,Milliseconds);KeEnableInterrupts(IntState);//原子操作完成,恢复中断。returnflag;}修改PsReleaseSemaphore函数:PsReleaseSemaphore(16INPSEMAPHORESemaphore,INLONGReleaseCount,OUTPLONGPreviousCount)/*++功能描述:信号量的Signal操作(V操作)。参数:Semaphore--Wait操作的信号量对象。ReleaseCount--信

8、号量计数增加的数量。当前只能为1。当你修改信号量使之支持超时唤醒功能后,此参数的值能够大于等于1。PreviousCount--返回信号量计数在增加之前的值。返回值:如果成功释放信号量,返回STATUS_SUCCESS。--*/{STATUSStatus;BOOLIntState;IntState=KeEnableI

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。