logo资料库

山东大学 操作系统课程设计报告.doc

第1页 / 共48页
第2页 / 共48页
第3页 / 共48页
第4页 / 共48页
第5页 / 共48页
第6页 / 共48页
第7页 / 共48页
第8页 / 共48页
资料共48页,剩余部分请下载后查看
Nachos(Java)
操作系统实验报告
姓名:xxx
学号:xxx
年级:xxx
专业:计算机科学与技术
一.实验开发背景
Nachos作为一个锻炼学生能力的工具,模拟了一个真正的操作系统。其中包括:线程、中断机制、
二.实验环境搭建
2.1 开发平台
开发语言:java
开发工具:Zend Studio
开发环境:windows 8.1
2.2 导入项目
三.Project1 构建内核线程系统
3.1 实验1
3.1.1实验要求:
拓展KThread.join()函数。其他线程没有调用join(),但如果它被调用时,它只能被调
3.1.2实验分析:
Join() 函数介绍:等待某线程运行完毕. 当前线程1(正在运行的线程) 调用另一个线程2(处
3.1.3解决方案:
给每个线程分别设置一个布尔值来判断该线程是否被调用,从而判断是否添加到列队中去,实现每次值调用一
3.1.4实现代码:
Join()函数:
Finish()函数:
3.1.5运行结果:
3.2 实验2
3.2.1实验要求:
3.2.2实验分析:
threads.Condition:保证同步的工具
threads.Lock类:提供了锁以保证互斥,每一个条件变量拥有一个锁变量
Lock.acquire() 和Lock.release():在临界代码区的两端执行,保证同时只有一
挂起锁:当处于临界区内的拥有某锁的当前线程对与锁联系的条件变量执行sleep操作时, 该线程失去锁并
唤醒锁:当拥有锁的临界区内的当前线程对与锁联系的条件变量执行wake操作时(通常调用wake之后紧接
3.2.3解决方案:
3.2.4实现代码:
3.3 实验3
3.3.1实验要求:
完善和实现Alarm类,通过利用waitUntil(long x)方法。
3.3.2实验分析:
3.3.3解决方案:
Alarm.timerInterrupt():回调函数(因为与之有关的machine.Timer大约
3.3.4实现代码:
3.3.5运行结果:
3.4 实验4
3.4.1实验要求:
实现同步发送和接收的一个字的消息,使用条件变量(不要使用信号灯!)。使用 void speak(in
此字)。关键点:
a.要求使用条件变量(Condition 类)不能使用信号量;
b.speak()和 listen()函数具有原子性;
c.传送完毕,两个函数都返回;
d.一个 Communicator 类实例中多个;
e.speaker 和 listener 能够相互通讯;
f.一个 Communicator 类实例只能使用一个 lock 类;
3.4.2实验分析:
假设一个Communicator类的对象a, 线程1先调用a.speaker(x)发送一个字
3.4.3解决方案:
3.4.4实现代码:
3.4.5运行结果:
3.5实验5
3.5.1实验要求:
3.5.2实验分析:
3.5.3解决方案:
它也有两个重要方法:waitForAccess(PriorityQueue waitQueu
3.5.4实现代码:
3.5.5运行结果:
3.6 实验6
3.6.1实验要求:
用以上实现的线程互斥/同步机制解决一个过河问题。成人和小孩都试图从oahu 出发到 molokai。
3.6.2实验分析:
3.6.3解决方案:
3.6.4实现代码:
3.6.5运行结果:
四.Project2 支持多道程序编程
注意:以下代码太多的部分不方便截图均粘贴源码
4.1 实验1
4.1.1实验要求:
实现文件系统调用(创建,打开,读,写,关闭,unlink)。在 syscall.h 中有详细的记录,
4.1.2实验分析:
4.1.3解决方案:
4.1.4实现代码:
4.1.5运行结果:
4.2实验2
4.2.1实验要求:
4.2.2实验分析:
4.2.3解决方案:
4.2.4实现代码:
4.2.5运行结果:
4.3 实验3
4.3.1实验要求:
4.3.2实验分析:
5)最后一个调用exit的进程将使系统停机。
4.3.3解决方案:
4.3.4实现代码:
4.3.5运行结果:
4.4 实验4
4.4.1实验要求:
用该系统实现彩票调度问题
4.4.2实验分析:
4.4.3解决方案:
4.4.4实现代码:
4.4.5运行结果:
操作系统 nachos 报告 1 Nachos(Java) 操作系统实验报告 姓名:xxx 学号:xxx 年级:xxx 专业:计算机科学与技术 1
操作系统 nachos 报告 2 一. 实验开发背景............................................................................................................4 二. 实验环境搭建............................................................................................................4 2.1 开发平台 ................................................................................................................................4 2.2 导入项目 ................................................................................................................................4 三. Project1 构建内核线程系统...........................................................................4 3.1 实验 1...................................................................................................................................... 5 3.1.1 实验要求: ............................................................................................................................... 5 3.1.2 实验分析: ............................................................................................................................... 5 3.1.3 解决方案: ............................................................................................................................... 5 3.1.4 实现代码: ............................................................................................................................... 5 3.1.5 运行结果: ............................................................................................................................... 6 3.2 实验 2...................................................................................................................................... 6 3.2.1 实验要求: ............................................................................................................................... 6 3.2.2 实验分析: ............................................................................................................................... 7 3.2.3 解决方案: ............................................................................................................................... 7 3.2.4 实现代码: ............................................................................................................................... 8 3.3 实验 3...................................................................................................................................... 8 3.3.1 实验要求: ............................................................................................................................... 8 3.3.2 实验分析: ............................................................................................................................... 9 3.3.3 解决方案: ............................................................................................................................... 9 3.3.4 实现代码: ............................................................................................................................... 9 3.3.5 运行结果: ............................................................................................................................. 10 3.4 实验 4.................................................................................................................................... 10 3.4.1 实验要求: ............................................................................................................................. 10 3.4.2 实验分析: ............................................................................................................................. 11 3.4.3 解决方案: ............................................................................................................................. 11 3.4.4 实现代码: ............................................................................................................................. 12 3.4.5 运行结果: ............................................................................................................................. 13 3.5 实验 5..................................................................................................................................... 14 3.5.1 实验要求: ............................................................................................................................. 14 3.5.2 实验分析: ............................................................................................................................. 14 3.5.3 解决方案: ............................................................................................................................. 15 3.5.4 实现代码: ............................................................................................................................. 16 3.5.5 运行结果: ............................................................................................................................. 17 2
操作系统 nachos 报告 3 3.6 实验 6.................................................................................................................................... 18 3.6.1 实验要求: ............................................................................................................................. 18 3.6.2 实验分析: ............................................................................................................................. 18 3.6.3 解决方案: ............................................................................................................................. 19 3.6.4 实现代码: ............................................................................................................................. 19 3.6.5 运行结果: ............................................................................................................................. 21 四. Project2 支持多道程序编程.........................................................................22 4.1 实验 1.................................................................................................................................... 22 4.1.1 实验要求: ............................................................................................................................. 22 4.1.2 实验分析: ............................................................................................................................. 23 4.1.3 解决方案: ............................................................................................................................. 24 4.1.4 实现代码: ............................................................................................................................. 27 4.1.5 运行结果: ............................................................................................................................. 33 4.2 实验 2..................................................................................................................................... 33 4.2.1 实验要求: ............................................................................................................................. 33 4.2.2 实验分析: ............................................................................................................................. 33 4.2.3 解决方案: ............................................................................................................................. 34 4.2.4 实现代码: ............................................................................................................................. 35 4.2.5 运行结果: ............................................................................................................................. 37 4.3 实验 3.................................................................................................................................... 37 4.3.1 实验要求: ............................................................................................................................. 37 4.3.2 实验分析: ............................................................................................................................. 38 4.3.3 解决方案: ............................................................................................................................. 38 4.3.4 实现代码: ............................................................................................................................. 40 4.3.5 运行结果: ............................................................................................................................. 42 4.4 实验 4.................................................................................................................................... 42 4.4.1 实验要求: ............................................................................................................................. 42 4.4.2 实验分析: ............................................................................................................................. 42 4.4.3 解决方案: ............................................................................................................................. 43 4.4.4 实现代码: ............................................................................................................................. 43 4.4.5 运行结果: ............................................................................................................................. 47 3
操作系统 nachos 报告 4 一.实验开发背景 Nachos作为一个锻炼学生能力的工具,模拟了一个真正的操作系统。 其中包括:线程、中断机制、虚拟内存机制和中断驱动的I/O机制,以及 硬件机制:MIPS指令集处理器(能够用来处理Nachos的coff格式的文件)、 控制台、计时器和网络接口等。,学生通过修改和拓展Nachos来从而对操 作系统有更加深刻的理解和认识。 二.实验环境搭建 2.1 开发平台 开发语言:java 开发工具:Zend Studio 开发环境:windows 8.1 2.2 导入项目 将最原始版本的 nachos 项目导入 eclipse 中,并调试无 bug 导入如下: 三.Project1 构建内核线程系统 4
操作系统 nachos 报告 5 3.1 实验1 3.1.1实验要求: 拓展KThread.join()函数。其他线程没有调用join(),但如果它被调用 时,它只能被调用一次。即: 对 join 函数第二次调用的执行结果是不被定 义的(即使第二次调用的线程与第一次调用的线程不同)。我们要让线程 正常执行,不管他是否加入。 3.1.2实验分析: Join() 函数介绍:等待某线程运行完毕. 当前线程1(正在运行的线程) 调用另一个线程2(处于就绪状态的线程) 的 join 函数时(1 和 2 在 Nachos 中均为KThread 类型对象), 1 被挂起, 直到 2 运行结束后, join() 函数返回, 1 才能继续运行。 3.1.3解决方案: 给每个线程分别设置一个布尔值来判断该线程是否被调用,从而判断是 否添加到列队中去,实现每次值调用一个线程。研究代码后发现,源代码 已经完成了每次只调用一个线程,现在只需完善join()函数和finish() 函数实现:在调用 join()方法时,当前运行线程休眠,并将加入到一个阻j'o 塞队列中。在线程结束时,finish()函数循环唤醒所有被阻塞的线程。 3.1.4实现代码: Join()函数: 5
操作系统 nachos 报告 6 Finish()函数: 3.1.5运行结果: 3.2 实验2 3.2.1实验要求: 实现直接的环境变量,用中断的 enable 和 disable 来保证原子性。 我们提供了用信号量来实现的一个例子,你的任务就是提供一个差不多 的,不要用信号量(你可以使用 lock,虽然它间接地调用了信号量)。写 完了以后你就有两个可以实现同一个功能的方法,第二个应该在 6
操作系统 nachos 报告 7 nachos.threads.condition2 中实现。 3.2.2实验分析: threads.Condition:保证同步的工具 threads.Lock类:提供了锁以保证互斥,每一个条件变量拥有一个锁变量 Lock.acquire() 和Lock.release():在临界代码区的两端执行,保证同 时只有一个线程访问临界代码区。 挂起锁:当处于临界区内的拥有某锁的当前线程对与锁联系的条件变量执 行sleep操作时, 该线程失去锁并被挂起。 下一个等待锁L的线程获得锁 并进入临界区。 唤醒锁:当拥有锁的临界区内的当前线程对与锁联系的条件变量执行wake 操作时(通常调用wake之后紧接着就是Lock.release), 等待在该条件变 量上的之多一个被挂起的线程(由调用sleep引起) 被重新唤醒并设置为 就绪状态。 若执行wakeall操作, 则等待在该条件变量上的所有被挂起的 线程都被唤醒。 3.2.3解决方案: 原: waiter.P()函数实现休眠(waitor 是一个信号量) 并将 waitor 放入信号量队列,。 改: 用 KThread.sleep()实现休眠并将当前线程放入线程队列,同时 sleep 函数处理中断以保证原子性。 原: condition.wake 中从等待信号量队列中取出信号量并对其进行 7
操作系统 nachos 报告 8 V 操作实现唤醒。 改:从线程队列中取出线程用 KThread.。并用 ready()唤醒 wakeall 函数的实现依赖于 wake(). 只需不断地 wake 直到队列为空 为止。 3.2.4实现代码: 3.3 实验3 3.3.1实验要求: 8
分享到:
收藏