-
Notifications
You must be signed in to change notification settings - Fork 0
/
README.ORIGINAL
executable file
·270 lines (198 loc) · 8.86 KB
/
README.ORIGINAL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
Nachos for Java README
Welcome to Nachos for Java. We believe that working in Java rather than
C++ will greatly simplify the development process by preventing bugs
arising from memory management errors, and improving debugging support.
Getting Nachos:
Download nachos-java.tar.gz from the Projects section of the class
homepage at:
http://www-inst.EECS.Berkeley.EDU/~cs162/
Unpack it with these commands:
gunzip -c nachos-java.tar.gz | tar xf -
Additional software:
Nachos requires the Java Devlopment Kit, version 1.5 or later. This is
installed on all instructional machines in:
/usr/sww/lang/jdk-1.5.0_05
To use this version of the JDK, be sure that
/usr/sww/lang/jdk-1.5.0_05/bin
is on your PATH. (This should be the case for all class accounts
already.)
If you are working at home, you will need to download the JDK.
It is available from:
http://java.sun.com/j2se/1.5/
Please DO NOT DOWNLOAD the JDK into your class account! Use the
preinstalled version instead.
The build process for Nachos relies on GNU make. If you are running on
one of the instructional machines, be sure you run 'gmake', as 'make'
does not support all the features used. If you are running Linux, the
two are equivalent. If you are running Windows, you will need to
download and install a port. The most popular is the Cygnus toolkit,
available at:
http://sources.redhat.com/cygwin/mirrors.html
The Cygnus package includes ports of most common GNU utilities to
Windows.
For project 2, you will need a MIPS cross compiler, which is a
specially compiled GCC which will run on one architecture (e.g.
Sparc) and produce files for the MIPS processor. These compilers
are already installed on the instructional machines, and are
available in the directory specified by the $ARCHDIR environment
variable.
If you are working at home, you will need to get a cross-compiler
for yourself. Cross-compilers for Linux and Win32 will be available
from the CS162 Projects web page. Download the cross compiler
distribution and unpack it with the following command:
gunzip -c mips-x86-linux-xgcc.tar.gz | tar xf -
(Substitute the appropriate file name for mips-x86.linux-xgcc in the
above command.) You need to add the mips-x86.linux-xgcc directory to
your PATH, and set an environment variable ARCHDIR to point to this
directory. (Again, this has already been done for you on the
instructional machines.)
Compiling Nachos:
You should now have a directory called nachos, containing a Makefile,
this README, and a number of subdirectories.
First, put the 'nachos/bin' directory on your PATH. This directory
contains the script 'nachos', which simply runs the Nachos code.
To compile Nachos, go to the subdirectory for the project you wish
to compile (I will assume 'proj1/' for Project 1 in my examples),
and run:
gmake
This will compile those portions of Nachos which are relevant to the
project, and place the compiled .class files in the proj1/nachos
directory.
You can now test Nachos from the proj1/ directory with:
nachos
You should see output resembling the following:
nachos 5.0j initializing... config interrupt timer elevators user-check grader
*** thread 0 looped 0 times
*** thread 1 looped 0 times
*** thread 0 looped 1 times
*** thread 1 looped 1 times
*** thread 0 looped 2 times
*** thread 1 looped 2 times
*** thread 0 looped 3 times
*** thread 1 looped 3 times
*** thread 0 looped 4 times
*** thread 1 looped 4 times
Machine halting!
Ticks: total 24750, kernel 24750, user 0
Disk I/O: reads 0, writes 0
Console I/O: reads 0, writes 0
Paging: page faults 0, TLB misses 0
Network I/O: received 0, sent 0
This is the correct output for the "bare bones" Nachos, without any of
the features you will add during the projects.
If you are working on a project which runs user programs (projects 2-4),
you will also need to compile the MIPS test programs with:
gmake test
Command Line Arguments:
For a summary of the command line arguments, run:
nachos -h
The commands are:
-d <debug flags>
Enable some debug flags, e.g. -d ti
-h
Print this help message.
-s <seed>
Specify the seed for the random number generator
-x <program>
Specify a program that UserKernel.run() should execute,
instead of the value of the configuration variable
Kernel.shellProgram
-z
print the copyright message
-- <grader class>
Specify an autograder class to use, instead of
nachos.ag.AutoGrader
-# <grader arguments>
Specify the argument string to pass to the autograder.
-[] <config file>
Specifiy a config file to use, instead of nachos.conf
Nachos offers the following debug flags:
c: COFF loader info
i: HW interrupt controller info
p: processor info
m: disassembly
M: more disassembly
t: thread info
a: process info (formerly "address space", hence a)
To use multiple debug flags, clump them all together. For example, to
monitor coff info and process info, run:
nachos -d ac
nachos.conf:
When Nachos starts, it reads in nachos.conf from the current
directory. It contains a bunch of keys and values, in the simple
format "key = value" with one key/value pair per line. To change the
default scheduler, default shell program, to change the amount of
memory the simulator provides, or to reduce network reliability, modify
this file.
Machine.stubFileSystem:
Specifies whether the machine should provide a stub file system. A
stub file system just provides direct access to the test directory.
Since we're not doing the file system project, this should always
be true.
Machine.processor:
Specifies whether the machine should provide a MIPS processor. In
the first project, we only run kernel code, so this is false. In
the other projects it should be true.
Machine.console:
Specifies whether the machine should provide a console. Again, the
first project doesn't need it, but the rest of them do.
Machine.disk:
Specifies whether the machine should provide a simulated disk. No
file system project, so this should always be false.
ElevatorBank.allowElevatorGUI:
Normally true. When we grade, this will be false, to prevent
malicious students from running a GUI during grading.
NachosSecurityManager.fullySecure:
Normally false. When we grade, this will be true, to enable
additional security checks.
Kernel.kernel:
Specifies what kernel class to dynmically load. For proj1, this is
nachos.threads.ThreadedKernel. For proj2, this should be
nachos.userprog.UserKernel. For proj3, nachos.vm.VMKernel. For
proj4, nachos.network.NetKernel.
Processor.usingTLB:
Specifies whether the MIPS processor provides a page table
interface or a TLB interface. In page table mode (proj2), the
processor accesses an arbitrarily large kernel data structure to do
address translation. In TLB mode (proj3 and proj4), the processor
maintains a small TLB (4 entries).
Processor.numPhysPages:
The number of pages of physical memory. Each page is 1K. This is
normally 64, but we can lower it in proj3 to see whether projects
thrash or crash.
Documentation:
The JDK provides a command to create a set of HTML pages showing all
classes and methods in program. We will make these pages available on
the webpage, but you can create your own for your home machine by doing
the following (from the nachos/ directory):
mkdir ../doc
gmake doc
Troubleshooting:
If you receive an error about "class not found exception", it may be
because you have not set the CLASSPATH environment variable. Add the
following to your .cshrc:
setenv CLASSPATH .
Credits:
Nachos was originally written by Wayne A. Christopher, Steven J.
Procter, and Thomas E. Anderson. It incorporates the SPIM simulator
written by John Ousterhout. Nachos was rewritten in Java by Daniel
Hettena.
Copyright:
Copyright (c) 1992-2001 The Regents of the University of California.
All rights reserved.
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose, without fee, and without written
agreement is hereby granted, provided that the above copyright notice
and the following two paragraphs appear in all copies of this
software.
IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
ENHANCEMENTS, OR MODIFICATIONS.