操作系统实验3报告.docVIP

  1. 1、本文档共3页,可阅读全部内容。
  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文档。上传文档
查看更多
实验三 nachos下的线程编程 1内容简述 本次实验的目的在于掌握使用nachos中的线程序解决较为复杂的并发问题。实验内容分三部分:实现事件栅栏原语并进行正确性测试;实现闹钟原语并进行正确性测试;利用事件栅栏和闹钟原语来解决电梯问题(详细内容请看nachos-labs.pdf)。 2实验内容的几点说明 2.1实现事件栅栏原语(30分) 2.1.1事件栅栏的概念 事件栅栏(EventBarrier)是一种同步机制,使用事件栅栏可以让一组线程以同步的方式等待和应答某事件。 事件栅栏的调用者分为两类:或者调用Wait操作,或者调用Signal操作。使用事件栅栏,无论是Wait操作的调用者或者是Signal操作的调用者最终都将同步地通过栅栏(如果他们原先不同步,则进度较快的线程将通过使自己阻塞而与进度慢的线程同步)。 Wait操作的调用者在事件栅栏上等待Signal的发出。 和信号量类似,Signal操作是可以积累的——没有Waiter的Signal将被记录下来。 执行Wait操作的调用者在收到Signal后必须应答Signal的发出者——调用Complete操作表示应答结束。 只有在所有的Wait操作的调用者都已经应答后,它们才能通过事件栅栏。在所有的Wait操作的调用者都已经应答之前,Signal的发出者必须等待,并保持事件栅栏处于“SIGNALED”状态。类似地,也只有在所有的Wait操作的调用者都已经应答后,Signal的发出者才能离开事件栅栏,并恢复事件栅栏的初始状态“UNSIGNALED”。 只允许一个Signal操作的调用者发出Signal并等待应答。 2.1.2实现事件栅栏的几点注意 EventBarrier类的接口定义和实现应分别包含在EventBarrier.h和EventBarrier.cc中,请自己新建这些文件,并注意修改Makefile文件nachos-3.4/code/Mmon里的有关部分(具体项目可以参考实验一的说明)。 EventBarrier类的主要外部接口的简要说明请参考nachos-labs.pdf的3.3.1。 Here is the interface for EventBarrier : void Wait() -- Wait until the event is signaled. Return immediately if already in the signaled state. void Signal() -- Signal the event and block until all threads that wait for this event have responded. The EventBarrier reverts to the unsignaled state when Signal() returns. void Complete() -- Indicate that the calling thread has finished responding to a signaled event, and block until all other threads that wait for this event have also responded. int Waiters() -- Return a count of threads that are waiting for the event or that have not yet responded to it. Signal操作的主要步骤: 设置事件栅栏的状态为SIGNALED 唤醒所有阻塞于Signal的线程 阻塞于Complete 恢复事件栅栏的状态为UNSIGNALED Wait操作的主要步骤: 如果事件栅状态是SIGNALED,则直接返回 否则,阻塞于Signal Complete操作的主要步骤: 如果是最后一个调用Complete者,则唤醒所有阻塞于Complete的线程 否则,阻塞于Complete 建议使用条件变量来实现(因为需要广播) 2.2实现闹钟原语(30分) 用Nachos提供计时器Timer实现闹钟需要对Nachos有较深入的了解。这里的Timer是在虚拟机上模拟实现的:它的滴答不是硬件产生,而是模拟的,通常用一条指令的执行时间表示一个滴答。因此闹钟的时间也是模拟的,我们无法将这样的时间与现实世界的时间准确对应,因为模拟时间的快慢与实际硬件平台的快慢密切相关。 请仔细阅读machine/timer.h,machine/timer.cc,machine/interrupt.h,machine/interrupt.cc,threads/system.h,threads/system

文档评论(0)

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

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

1亿VIP精品文档

相关文档