- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统课程设计-管程的实现(生产者消费者问题)精品
操作系统课程设计
2、管程的实现(生产者消费者问题)
1.设计背景:
管程是一种高级抽象数据类型,它支持在它的函数中隐含互斥操作。结合条件变量和其他一些低级通信原语,管程可以解决许多仅用低级原语不能解决的同步问题。例如,本实验中利用管程提供一个不会发生死锁的生产者消费者问题就是利用管程的很好的例子。 管程封装了并发进程或线程要互斥执行的函数。为了让这些并发进程或线程在管程内互斥的执行,管程的实现必须隐含的具有锁或二值信号量。 如果没有条件变量,管程就不会有很有用,条件变量提供了一种对管程内并发协作进程的同步机制。条件变量代表了管程中一些并发进程或线程可能要等待的条件。一个条件变量管理着管程内的一个等待队列。如果管程内某个进程或线程发现其执行条件为假,则该进程或线程就会被条件变量挂入管程内等待该条件的队列。如果管程内另外的进程或线程满足了这个条件,则它会通过条件变量再次唤醒等待该条件的进程或线程,从而避免了死锁的产生。所以,一个条件变量C应具有两种操作C.wait()和C.signal()。
当管程内同时出现唤醒者和被唤醒者时,由于要求管程内的进程或线程必须互斥执行,因此就出现了两种样式的条件变量:Mesa Style(signal-and-continue): 唤醒者进程或线程继续执行,被唤醒者进程或线程等到唤醒者进程或线程阻塞或离开管程后再执行。Hoare Style(signal-and-wait): 被唤醒者进程或线程立即执行,唤醒者进程或线程阻塞,直道被唤醒者阻塞或离开管程后再执行。我们实验所做的就是在原来mesa样式的基础上进行Hoare样式的改进;这种样式也是我们实验中需要实现的样式。
2.设计目标
验证并分析Nachos中Bridge管程是否能够正确的解决单
行桥双向过桥问题。
? 定义和实现Hoare样式的条件变量Condition_H类
? 利用Hoare样式的条件变量Condition_H,实现Ring类中
定义的各个方法,使用Ring管程解决生产者/消费者问题。
利用Ring对象的Put操作和Get操作代替信号量来完成同
步操作。这样就避免了由于不恰当的使用信号量而引起
的死锁和饥饿问题。
? 利用Hoare样式的条件变量Condition_H,实现Dp管程中
定义的各个方法,使用Ring管程解决哲学家就餐问题。
避免了由于不恰当的使用信号量而引起的死锁和饥饿问
题。
3.设计环境
我们将使用以下的环境和资料学习和实验Nachos系统,展开我们的操作系统设计。
1.实验环境为linux操作系统。
2.Nachos-3.4版系统源代码电子文档及相关编译软件gcc-2.8.1-mips。
3.Study Book :讲授Nachos系统的原理和实现的教材。
4.Introductory Book:讲授Nachos系统的实验方法、实验步骤、实验要求的实验指导书。
4.设计说明
1.Hoare样式条件变量
设计算法说明:
对于Hoare样式管程,相比于Mesa样式新增了一个唤醒者等待队列。在Hoare样式中,唤醒者唤醒被唤醒者后,被唤醒者加入到readytorun队列中,将被唤醒者加入到唤醒者等待队列中,被唤醒者阻塞或者离开时会唤醒唤醒者等待队列中的一个唤醒。这样我们需要一个新的条件变量,重写它的wait()和signal()方法来实现Hoare样式管程。
设计内容和步骤:
1在synch.h文件中定义一个新的结构体Condition_H。
结构体Condition_H中包含的私有变量有char* name(条件变量名称)、List* queue(等待在该条件变量的线程)、Lock* lock(管程锁,条件变量共享)、Semaphore *next(指向唤醒者等待队列,条件变量共享)、int *nextCount(记录唤醒者等待队列中线程数量,条件变量共享);方法有char* getName()、void Wait(Lock *conditionLock)、void Signal(Lock *conditionLock)。
2在synch.cc文件中定义结构体Condition_H中方法的具体实现。①在方法 Condition_H::Wait (Lock *conditionLock) 中,首先判断队列是否为空,是则把传入的锁赋给条件变量的锁。调用条件变量的等待队列queue的Append(currentThread)方法,把当前线程放入等待队列中当前线程释放锁。如果唤醒这等待队列中有线程,则唤醒一个线程,即把它加入readytorun队列中,调用了条件变量next的V方法。当前线程sleep,放弃资源,在readytorun队列中选取下一个执行的线程,该线程申请锁。②在方法void Conditio
您可能关注的文档
最近下载
- 天津市河西区2024-2025学年高一上学期期中考试 化学试卷(无答案).pdf VIP
- 第25课经济和社会生活的变化-2023-2024学年八年级历史上册甄选实用备课课件(部编版).pptx VIP
- 小儿流行性感冒护理查房课件.pptx VIP
- 牙周病的治疗完整课件.ppt
- 党纪学习教育党课PPT课件含讲稿::学党纪、知规矩、明意识、守清廉.pptx VIP
- 《从食物采集到食物生产》公开课课件.pptx VIP
- 综合分析三部门条件下国民收入水平取决于什么因素?如何决定国民收入-怎样使国民收入更快更好的增长?.doc VIP
- 二十届三中全会《决定》PPT专题党课课件.pptx VIP
- 脑出血后物理康复训练的护理查房.pptx
- 我的教师职业生涯规划PPT.pptx
文档评论(0)