北大操作系统nachos实习报告——第一部分线程机制实习.docVIP

北大操作系统nachos实习报告——第一部分线程机制实习.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
北大操作系统nachos实习报告——第一部分线程机制实习

线程机制实习报告 姓名:马亮 学号:1001210767 日期:2011年4月4日 目录 内容一:总体概述 3 内容二:任务完成情况 3 任务完成列表(Y/N) 3 具体Exercise的完成情况 3 内容三:遇到的困难以及解决方法 20 内容四:收获及感想 20 内容五:对课程的意见和建议 20 内容六:参考文献 21 内容一:总体概述 通过为期四周的进程部分的实习,使得我对进程的状态转换、调度、同步和互斥、进程间通信等原理有了更为直观的感受,加深了对于理论的理解。通过动手做的过程,将书本上的理论知识转化为代码的实现,能够很好的巩固这些知识点。 对于之前不甚了解的管程和条件变量等概念,也通过实验和教材阅读有了更好的掌握。重新捡起荒废了多年的C++,实验的过程还能帮助我重新掌握C++编程,受益匪浅。 内容二:任务完成情况 任务完成列表(Y/N) Exercise1 Exercise2 Exercise3 Exercise4 Exercise5 Exercise6 第一周 Y Y Y 第二周 Y Y Y 第三周 Y 第四周 N N N Y N N 具体Exercise的完成情况 第一周 Exercise1 增加“用户 ID、线程 ID”两个数据成员,同时在 Nachos 现有的线程管理机制中增加对这两个数据成员的维护机制。增加“挂起(suspending) ”状态,即可以将当前线程映像保存在磁盘文件而不是内存中。 设计思想 线程ID从0开始递增,线程结束后它所使用的ID应该被收回,以便分配给新的线程。为实现上面的设想,用一个整数数组ThreadID来标识线程ID的分配情况,ThreadID[0]为1表示0号线程ID已经分配,否则表示未分配。新线程建立时从下标0开始依次向后遍历数组,找到第一个可使用的线程ID(数组元素值为0的下标),分配此线程ID,并将数组元素值置1。线程结束时需要将它的ID对应下标的值置0,以便将此ID重复利用。 修改代码 Thread.h中声明private的成员变量uid、tid,声明public的成员方法getThreadID(),getUserID() 在system.h中声明全局数组变量ThreadID,用来存储线程ID的分配情况: 在system.cc中增加ThreadID的声明: 在Initialize方法中对ThreadID数组进行初始化: 在Thread.cc中的构造函数和析构函数中增加获取线程ID和释放线程ID的代码: 在Thread.cc中增加获取当前线程ID和用户ID的方法getThreadID()、getUserID() 对于用户ID,由于系统中不存在用户的概念,暂且只增加用户ID的声明和获取方法,不实现具体的操作系统用户功能。 对于增加“挂起(suspending) ”状态,只需修改thread.h中的ThreadStatus枚举常量,增加SUSPENDING状态即可,具体的功能实现由于还未涉及到磁盘操作,暂不实现: 运行效果 为了体现进程ID的修改效果,ThreadTest测试类SimpleThread方法中输出线程编号时改为通过currentThread-getThreadID()来获得,而不是通过传入的which来获得: 同时多加几个线程: 运行效果如下: 可看到通过currentThread-getThreadID()可获得正确的ID值。 …… Exercise2 在 Nachos 中增加对线程数量的限制, 使得 Nachos 中最多能够同时存在 128 个用户线程。 设计思想 增加全局变量threadCount,对在运行的线程进行计数,线程Fork时threadCount++,并判断是否超出最大线程数,超出的话直接返回,不执行接下来的分配存储空间等操作。Finish时threadCount--。 修改代码 System.h中增加全局变量 System.cc中初始化 Thread类的Fork函数和Finish函数中对其值进行操作 运行效果 修改MAX_THREAD_COUNT的值为2,运行四个线程: 输出结果如下: 可见线程3、4因为到达系统线程上限而没有运行,达到预期效果。 Exercise3 修改线程调度算法,实现基于优先级的抢占式调度算法。 设计思想 从nachos系统的scheduler.cc文件中可看出Nachos实现了先进先出(FIFO)的调度算法。调度类Scheduler管理这一个就绪队列list,它的成员函数ReadyToRun (Thread *thread)将指定线程插入到队列的队尾。它的另一个成员函数FindNextToRun ()则从list队首摘出一个就绪线程准备运行。 为了实现基于优先

文档评论(0)

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

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

版权声明书
用户编号:7065136142000003

1亿VIP精品文档

相关文档