山东大学操作系统个人报告-软件八班杨环..docVIP

山东大学操作系统个人报告-软件八班杨环..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文档。上传文档
查看更多
山东大学操作系统个人报告-软件八班杨环.

操作系统课程设计个人报告 201100300268- 杨环 第一部分 建立线程系统: 1 TASK1.1 1 TASK1.2 3 TASK1.3 5 TASK1.4 6 TASK2 8 TASK2.1 10 TASK2.2 13 TASK2.3 17 总结 19 第一部分 建立线程系统 在解决phrase1之前,先研究代码 TASK1.1 [任务] 实现KThread.join() 当前线程a在运行,执行b.join(),则a阻塞,直到线程b结束,a继续执行。 几个重要的方法 禁止中断机制的实现 Interrupt类有一个boolean型变量enabled,其值true时,表示允许中断,false不允许中断。一般方法不希望执行过程中被中断就在方法 开始处添加boolean intStatus = Machine.interrupt().disable(); 结束处添加 Machine.interrupt().restore(intStatus); 关中断disable()只有一句return setStatus(false)设置interrupt状态为false,并且以前的状态保存在intstatus,开中断处restore(intStatus)就是将enabled值设为intStatus;这样就实现了开关中断的过程。setStatus(boolean status)方法还模拟了系统内的时间“前进”, 当interrupt的状态从不可行变为可行,即关中断到开中断,模仿时间前进:tick(true)。 KThread.sleep()当前线程没有结束,就将其状态设为”阻塞”,通过调度器类从就绪队列中选择下一个执行的进程,选择过程又与调度器种类与策略有关。 Lib.assertTrue(s) Lib里面是一些写好了的函数库,Lib.assertTrue如果括号内语句为false,则抛出一个异常. 抽象类threadqueue有waitForAccess(KThread thread)和acquire(KThread thread)两个抽象方法,threadqueue我是这样理解的:一个线程队列等待着某个资源,所以每个临界资源可以用当前等待着的线程队列来指代,waitForAccess(t)说明t也加入到该资源的等待队列了,acquire(t)则表示 t已经得到这个资源了。 抽象类Scheduler里有个方法newThreadQueue(boolean transferPriority)该方法构造了一个线程队列,调度器在线程等待队列 选择 下一个可获得资源访问权限时需要使用一个参数,姑且称为“优先级”,优先级高的可得到资源,这会导致饥饿,如cpu也是一个资源,就绪队列等待cpu资源,如果ABC三个线程优先级分别是321,B等待着C所占有的一个资源,C只有运行结束才释放这个B等代着的资源,C当前拥有cpu,当根据普通优先级调度方法它无法获得CPU,进而B也无法执行,所以就约定当前获得CPU线程优先级可以直接设为不小于等待队列中最大的优先级,以便于优先级小的线程快点结束释放其拥有的资源 [代码] 在KThread.java 中: private ThreadQueue joinQueue = null; 每个kthread对象都有自己的joinQueue,由由对本线程调用join方法的其他线程对象构成,可“捐赠”优先级 private boolean Joined = false; 布尔形变量joined,判断本线程是否被其他线程调用过join方法,完善finish()方法时会用到 public boolean IsAlive(){ if(this.status==statusNew||status==statusReady|| status==statusRunning||status==statusBlocked) return true; else return false; } 一个简单的判断线程是否结束的方法,Kthread有五种状态,只要状态不为finished,就返回true public void join() { Lib.debug(dbgThread, Joining to thread: + toString()); Lib.assertTrue(this != currentThread); if (this.status == statusFinished) return; boolean intStatus = Ma

文档评论(0)

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

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

1亿VIP精品文档

相关文档