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运行结果: