- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统课程设计报告 班级: 团队成员: 目录 目录 2 一、 Nachos综述 3 二、 实验要求:建立线程系统 3 2.1 Task 1.1实现KThread.join() 3 2.1.1题目要求 3 2.1.2题目分析与实现方案 3 2.1.3关键点与难点 4 2.1.4实现代码 4 2.2 Task?1.2实现条件变量 5 2.2.1题目要求 5 2.2.2题目分析与实现方案 5 2.2.3关键点与难点 6 2.2.4实现代码 7 2.3 Task?1.3?完成Alarm类 7 2.3.1题目要求 7 2.3.2题目分析与实现方案 8 2.3.3关键点与难点 9 2.3.4实现代码 9 2.4 Task 1.4条件变量实现同步消息 10 2.4.1题目要求 10 2.4.2题目分析与实现方案 10 2.4.3关键点与难点 11 2.4.4实现代码 11 2.5 Task 1.5实现优先级调度 13 2.5.1题目要求 13 2.5.2题目分析与实现方案 13 2.5.3关键点与难点 14 2.5.4实现代码 15 2.6 Task 1.6条件变量解决过河问题 16 2.6.1题目要求 16 2.6.2题目分析与实现方案 17 2.6.3关键点与难点 19 2.6.4实现代码 19 三、 测试结果 23 Nachos综述 Nachos是一款教学用的操作系统平台,他的全名叫做 “Not?Another?Completely?Heuristic?Operating?System”,Nachos的运行必须借助于宿主机,它通过软件模拟了各种硬件系统,包括中断系统、存储系统、磁盘文件、网络等。它的运行是可以跟踪的,因此,我们可以一步一步的观察操作系统是如何运行的。 ?Nachos操作系统本身只提供了一套框架,很多地方的实现都需要我们自己来完善,因此我们可以通过修改其源代码,来丰富和增强Nachos操作系统的功能.更可以在完善这些功能的同时,了解操作系统的内部运行机制。 二、实验要求:建立线程系统 2.1 Task 1.1:实现KThread.join() 2.11题目要求? 实现Implement Kthread.join()函数。其它的线程不必调用join函数,但是如果join()函数被调用的话,也只能被调用一次。对join()函数第二次调用的执行结果是不被定义的,即使第二次调用的线程与第一次调用的线程不同。无论有没有被join,一个进程都能够正常结束。 2.1.2题目分析与实现方案 分析:join函数的作用即为等待调用此函数线程运行完毕。当前线程A调用另一个线程(处于就绪状态) B的join函数时,即A执行B.join()时 (A和B在Nachos中均为Kthread类型对象), A被挂起, 直到B运行结束后, join函数返回, A才能继续运行。如果这个线程已经结束,马上返回。且join()函数只能被调用一次,第二次调用不能保证返回,且调用join()函数的线程必须不能是当前线程。Join()函数结束时唤醒在等待队列中的所有线程,因此需要实现join()方法和修改finish()方法。 方案: (1)Kthread的join()中的Lib.assertTrue(this != currentThread)已经实现线程只能调用一次join()方法,根据要求,在调用join()方法时,让当前运行线程休眠,并将当前运行的线程加入到一个阻塞队列中。 (2)在线程结束时,finish()函数循环唤醒所有被阻塞的线程。Finish()函数在run()函数返回时自动调用,同样可以被直接调用。但当前唯一运行的线程不能被finish()函数立即结束,只有当其他线程运行时才可结束。 2.1.3关键点与难点? 由于java派生于抽象类的对象无法实例化,在运行时很可能出现空指针异常。只能直接利用抽象类的对象调用相关方法。 2.1.4实现代码 public void join() { Lib.debug(dbgThread, “Joining to thread: “ + toString()); // 判断要调用的进程是否为当前进程(线程只能调用一次join()方法) Lib.assertTrue(this != currentThread); // 系统关中断,当前线程休眠 oolean intStatus = Machine.interrupt().disable(); if (status != statusFinished
有哪些信誉好的足球投注网站
文档评论(0)