|
|
Operating Systems - Term ProjectsAll projects must be submitted using WebCT. Please note that due dates are tentative and are subject to change. Assignments and projects will be due at 11:59 PM on the dates posted below. Late work is officially not accepted, though, and requests may not be responded to. Note: provided that you submit a reasonable submission on-time, it will be permissible to re-submit previous Nachos Project parts for at least a partial regrade when other "All of Nachos Project X" deliverables are due as shown below. Please indicate that you are performing a resubmission so that I know to do the regrade! If you like this project, check out (or suggest) some others that I've been toying with! Project Deliverables
NachOSIn this project, you will get hands-on experience writing operating system functionality in the Java programming language. This was chosen in order to abstract these features into something more manageable in a 10-week course. Although it would be exciting to write a "real" operating system that boots and runs programs, this would cause one to lose the forest in the trees. NachOS is a friendlier construct that provides underlying support structures to simulate an OS. In fact, the NachOS implementation you will download will actually run right out of the box. You will write code that implements portions of that code to, for example, enhance the threading code, enable the execution of user programs (in MIPS), perform memory management, and implement other functionality that we will learn about in class. Perhaps the most important part of this project is not so much to implement, or even to design, but rather to read. Like in "real" development environments, you are being placed in charge of a software package that has already been implemented (albeit partially). It is impossible to even begin this project (and it is a nontrivial project) without thoroughly reading the design and the code of the project. Reverse Engineering systems like REportal (http://reportal.cs.drexel.edu) might prove helpful in understanding NachOS underlying design (you'll have to build the project and zip it up with the class files before posting to REportal). If you decide to use REportal to check out NachOS, I have provided a pre-built NachOS zip file you can upload to your REportal project - click here! Project 1 begins in small chunks (under 100 lines of code per portion), and is concentrated on one package, so that you can easily get your feet wet with the design. Finally (as I'm sure you've heard before) start early! This project takes weeks even without procrastinating. It just can't be done at the last minute. In particular, this zip file will work on REportal (http://reportal.cs.drexel.edu). This is a Reverse Engineering / Program Comprehension portal web site - ideal for getting to know large Java systems (i.e. NachOS). You can see variable reference graphs, inheritance trees, and a slick source code browser that is cross-referenced (i.e. you can click a variable name and it will take you to where it is defined, let you run queries, etc.). Moreover, you can create a Java Aspect file (see the Dynamic Analysis tab) that you can compile into NachOS so that when you run it, it will generate a file called output.txt that is an MDG graph. You can upload this back to REportal under Dynamic Analysis and see a call trace of the features you were running (how sweet is that!). To get started, you are going to need a few things:
I suggest taking the first few days just reading/discussing the code and making small changes to the package code (like inserting print statements here and there) and observing what it does, and when. Each time you write code to implement part of the project, write a test method in the appropriate selfTest function to exercise it, so that you can see what you are doing. As part of this project, students will be required to meet with me a week before each deadline to review your design, plans, etc. Coordination will be the responsibility of each team leader and will contribute 10% towards each project deliverable grade. It would be helpful while reading through the code to go through the NachOS Walkthrough, which will help direct your reading and maximize the use of your time. If you want to play with things right away, check out this short "tutorial" from Berkeley's CS162 page on setting up Eclipse to use NachOS. You should ignore everything about CVS, etc., as we're clearly not using their servers! Skip instead to the section on "Importing Nachos from the Filesystem." Testing (which is the basis of grading the project) has been automated by an AutoGrader included in NachOS. You can write tests and autograde your own work, too, although you will not submit these (we will use our own!). For more information on how to start an autograder, see this page. IMPORTANT - If you use an SVN repository, make CERTAIN that your repository is not world readable! See this page for details on setting up a private SVN repository on Tux. Hints and Resources
Throwable t = new Throwable();
StackTraceElement[] es = t.getStackTrace();
for ( int i=0; i<es.length; i++ ) {
StackTraceElement e = es[i];
System.out.println( " in class:" + e.getClassName() + "
in source file:" + e.getFileName() + " in method:" +
e.getMethodName() + " at line:" + e.getLineNumber() +
" " + ( e.isNativeMethod() ? "native" : "" ));
}
Lab, Project, and Assignment Guidelines
Exam study guides |