实验一体验nachos下的并发程序设计-Read.doc

实验一体验nachos下的并发程序设计-Read.doc

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
实验一体验nachos下的并发程序设计-Read.doc

实验二 线程与同步 1内容简述 本次实验的目的在于将nachos中的锁机制和条件变量的实现补充完整,并利用这些同步机制实现几个基础工具类。实验内容分三部分:实现锁机制和条件变量,并利用这些同步机制将实验一中所实现双向有序链表类修改成线程安全的;实现一个线程安全的表结构;实现一个大小受限的缓冲区(详细内容请看nachos-labs.pdf)。 2实验内容的几点说明 2.1实现锁机制和条件变量(60分) 2.1.1总体说明 这部分是本实验的重点,实际包含三个部分:第一部分要求使用Thread::Sleep实现锁机制和条件变量;第二部分要求使用Semaphore实现锁机制和条件变量;第三部分要求使用锁机制和条件变量将实验一里实现的双向有序链表修改成线程安全的,对第一、第二部分的实现应分别测试。 对锁机制和条件变量的实现,需要修改的文件是 nachos-3.4/code/threads/synch.h:class Lock和class Condition分别提供锁和条件变量的接口声明,其中的注释涉及它们的具体语义,应仔细阅读,并根据需要添加适当的数据成员。课本pp166有关于条件变量的说明,注意,实验要求采用Mesa语义,而非Hoare语义。 nachos-3.4/code/threads/synch.cc:你的实现应出现在其中,特别注意不要遗漏对方法isHeldByCurrentThread的实现。 可以阅读nachos-3.4/code/synchlist.cc和nachos-3.4/code/synchlist.h以加深对锁以及条件变量如何使用的理解。 条件变量一定要和某个特定的锁变量配合使用,任何进程在调用条件变量的相关方法(Wait,Signal和Broadcast)前都应先对相应锁实施加锁操作。你的程序在实现这些方法时必须做此判断(用isHeldByCurrentThread)。 在实现锁和条件变量的有关方法时应特别注意考虑各种异常情况,防止对这些方法的非法调用。对各种非法调用情况均应使用ASSERT检查。Nachos-labs.pdf的3.2.5节提供了其中的一些情况,请参考。 2.1.2用Thread::Sleep实现锁机制和条件变量 这部分实现主要参考Semaphore中Semaphore::P()和Semaphore::V()的实现(在synch.cc和synch.h中)。阅读../code/threads/list.h,../code/threads/list.cc,../code/machine/interrupt.h和../code/machine/interrupt.cc等文件也有帮助。 在必要的时候应关中断,关中断的方法可以参考Semaphore::P()。请注意考虑究竟什么时候才真正需要关中断! 阻塞进程应该挂到相应的阻塞队列中,不同的等待事件应对应不同的阻塞队列。因此你的Lock类和Condition类中应包含相应的队列首指针(请参考Semaphore)。 为了提交,这部分实验完成后,将synch.cc和synch.h分别保存为synch-sleep.cc和synch-sleep.h(见“3.1应提交的内容和应出现的位置”) 2.1.3用Semaphore实现锁机制和条件变量 不需要自行考虑关中断和阻塞队列维护等问题。 在用Semaphore实现条件变量时并不那么直接!这里,请特别注意Semaphore与条件变量的区别:如果在调用Semaphore::P()前调用Semaphore::V(),则V操作的效果将积累下来;而如果在调用Condition::Wait()前调用Condition::Signal(),则Signal操作的效果将不积累。 为了提交,这部分实验完成后,将synch.cc和synch.h分别保存为synch-sem.cc和synch-sem.h(见“3.1应提交的内容和应出现的位置”) 2.1.4用锁机制和条件变量修改双向有序链表 在实验一里你曾经在nachos系统中运行自己编写的链表程序演示一些并发错误,其原因是测试程序未考虑互斥。现在请根据所实现的锁和条件变量机制重写测试文件threadtest.cc,并确保修改后的多线程并发程序是正确互斥的。 可以参考nachos-3.4/code/threads/synchlist.cc和nachos-3.4/code/threads/synchlist.h 再次注意:条件变量应和锁配合使用。在使用过程中应注意,不能出现一个条件变量与两个不同的锁对应的情况! 2.2实现一个线程安全的表结构(20分) 52/Experiments/Resources/Tools/nachos/2-3aux.tar中包含了这部分实验所需要头文件Table.h

文档评论(0)

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

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

认证主体孙**

1亿VIP精品文档

相关文档

相关课程推荐