1、操作系统课程设计报告操作系统课程设计报告 目录 目录. 1 一、 前期工作 . 2 1.1 平台搭建 . 2 二、 代码分工 . 3 三、设计及实现 . 3 3.1 Task1.1 KThread.join() 3 3.1.1 要求分析 . 3 3.1.2 设计方案 . 3 3.1.3 实现代码 . 3 3.1.4 测试代码及结果 4 3.2 Task1.2 condition2 类. 6 3.2.1 要求分析 . 6 3.2.2 设计方案 . 7 3.2.3 实现代码 . 7 3.2.4 测试代码及结果. 7 3.3 Task1.3 alram 类.10 3.3.1 要求分析 10 3.3.
2、2 设计方案 10 3.3.3 实现代码 11 3.3.4 测试代码及结果11 3.4 Task1.4 communicator 类 13 3.4.1 要求分析 .13 3.4.2 设计方案 13 3.4.3 实现代码 13 3.4.4 测试代码及结果14 3.5 Task1.5 priority scheduler 类16 3.5.1 要求分析 16 3.5.2 设计方案 16 3.5.3 实现代码 17 3.5.4 测试代码及结果17 3.6 Task1.6 boat 类 22 3.6.1 要求分析 22 3.6.2 设计方案 22 3.6.3 实现代码 22 3.6.4 测试代码及结果3
3、0 3.7 Task2.1 系统调用 creat, open, read, write, close, unlink .30 3.7.1 要求分析 30 3.7.2 设计方案 30 3.7.3 实现代码 31 3.7.4 测试代码及结果34 3.8 Task2.2 多进程内存分配及访问 .34 3.8.1 要求分析 34 3.8.2 设计方案 34 3.8.3 实现代码 35 3.8.4 测试代码及结果38 3.9 Task2.3 系统调用 exec, join, exit .41 3.9.1 要求分析 41 3.9.2 设计方案 41 3.9.3 实现代码 41 3.9.4 测试代码及结果4
4、3 3.10 Task2.4 Lottery Schedule 类 .44 3.10.1 要求分析 44 3.10.2 设计方案 44 3.10.3 实现代码 45 3.10.4 测试代码及结果 45 总结48 一、一、 前期工作前期工作 1.11.1 平台搭建平台搭建 Nachos For Java phrase1 部分:IDE 环境可采用 Eclipse。 Phase 2 及以后阶段:需要把 C 程序编译成 MIPS 二进制文件 COFF,需要 MIPS 的 C 编译器 mips-x86.linux-xgcc(ubuntu12.04 平台下)。 二、二、 代码分工代码分工 三三、设计及实现
5、设计及实现 3.13.1 Task1.1 Task1.1 KThread.join()KThread.join() 3.1.1 要求分析要求分析 Join()方法的含义:当前线程 a 在运行,执行 b.join(),则 a 阻塞,直到线程 b 结束,a 继 续执行。 Join 函数的作用即为等待某线程运行完毕。 当前线程 (唯一一个正在运行的线程) A 调用另 一个线程 (处于就绪状态) B 的 join 函数时 (A 和 B 在 Nachos 中均为 KThread 类型对象), A 被挂起,直到 B 运行结束后, join 函数返回,A 才能继续运行。注意在一个 KThread 对 象上只
6、能调用一次 join,且当前线程不能对自身调用 join。 3.1.2 设计方案设计方案 为每个线程创建一个线程队列 joinqueue, joinqueue 由对本线程调用 join 方法的其他线程 对象构成,可“捐赠”优先级 ,以及布尔形变量 joined,判断本线程是否被其他线程调用 过 join 方法,以及一个判断线程状态方法 IsAlive()。 假设当前线程 A 调用就绪线程 B 的 join 函数. 在 join 函数中线程 A 被添加到线程 B 的线程 队列 joinqueue 中,将线程 A“休眠”, 线程 B 得到执行,在线程 B 结束时(此时线程 B 成 为当前线程, 发生在 KThead.finish 函数中) 选择 B 的 joinqueue 的 nextThread()执行, A 唤醒并继续. 3.1.3 实现代码实现代码 在 KThread.java 中: private ThreadQueue joinQueue = null; private boolean Joined = false; public boolean IsAli