班级:
团队成员: 1
操作系统课程设计报告
目录
目录 .................................................................................................................................................. 2 一、 Nachos综述 .......................................................................................... 错误!未定义书签。 二、 实验要求:建立线程系统 ................................................................... 错误!未定义书签。
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
三、 测试结果 ............................................................................................ 2错误!未定义书签。
2
一、 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题目分析与实现方案
3
分析: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);
4
相关推荐: