13
Nachos

Nachos. Getting the Source Code -See CVS quickstart on COSC3407 website. On windows use putty: In the computer lab: -> start -> Math and computer science

Embed Size (px)

Citation preview

Page 1: Nachos. Getting the Source Code  -See CVS quickstart on COSC3407 website. On windows use putty: In the computer lab: -> start -> Math and computer science

Nachos

Page 2: Nachos. Getting the Source Code  -See CVS quickstart on COSC3407 website. On windows use putty: In the computer lab: -> start -> Math and computer science

Getting the Source Code

-See CVS quickstart on COSC3407 website. On windows use putty:In the computer lab:

-> start -> Math and computer science -> internet applications -> puttyor open dos window: p: -> cd putty -> putty

type nachos.cs.laurentian.ca in host name box. - you get a warning message the 1st time -you can ignore it (click yes). Sign on.

follow instructions from cvs quickstart. -Need group number -these are listed on the course website under project groups.

Page 3: Nachos. Getting the Source Code  -See CVS quickstart on COSC3407 website. On windows use putty: In the computer lab: -> start -> Math and computer science

Moving files

can use ftp to move files to and from your pc. ftp nachos.cs.laurentian.ca You will be

prompted to enter a user name and password. Once signed in you can use cd to change

directories, dir or ls to list the directory, pwd to show the current directory.

Use get filename to move a file from the current directory on the remote system to the current directory on the local system.

Use put filename to move a file from the current directory on the local system to the current directory on the remote system.

Can use mget *.* to get an entire directory.

Page 4: Nachos. Getting the Source Code  -See CVS quickstart on COSC3407 website. On windows use putty: In the computer lab: -> start -> Math and computer science

Nachos Source Code

The code for nachos is in the directory groupx/nachos (x is your group number).

All the code that will be changed in project 1 is in the threads subdirectory (groupx/nachos/threads).

You may also want to look at the machine subdirectory (if you are ambitious). This implements the nachos virtual machine.

There are also some sample design documents on the course web site.

Page 5: Nachos. Getting the Source Code  -See CVS quickstart on COSC3407 website. On windows use putty: In the computer lab: -> start -> Math and computer science

Project 1:

Go to project phases -> project1 on the course website to get a description of the project. Read this section very carefully.

Page 6: Nachos. Getting the Source Code  -See CVS quickstart on COSC3407 website. On windows use putty: In the computer lab: -> start -> Math and computer science

Task 1:

The task requires you to modify the KThread.java class. If you look at the source code you will see that the join method has not been implemented. The task is to implement this method.

You also have to make modifications to at least one other method.

For example, suppose 2 threads t1 and t2 have been created.If thread t1 has the line t2.join(), this means that thread t1 will stop processing until thread t2 has completed.

A thread can be in 1 of 4 states:new, ready, running, blocked or finished.

To avoid busy waiting, the waiting thread should be in the blocked state (look at the sleep method). You then need some way to "wake up" the blocked thread (t1) when thread t2 finishes.

Page 7: Nachos. Getting the Source Code  -See CVS quickstart on COSC3407 website. On windows use putty: In the computer lab: -> start -> Math and computer science

Creating threads

To create and run a thread: final KThread KThreadA, KThreadB, KThreadC; …

KThreadD = new KThread(new Runnable(){public void run(){

System.out.println("THREAD D STARTED");for(int i = 0; i < 100000000; i++){}KThreadE.join();System.out.println("THREAD D FINISHED");

}});

To run:KThreadD.fork();

Described in Guide to Nachos on course website under link Nachos for Java Walkthrough.

Page 8: Nachos. Getting the Source Code  -See CVS quickstart on COSC3407 website. On windows use putty: In the computer lab: -> start -> Math and computer science

Task2

There is a file Condition2.java in the threads directory. This program has the methods you need to implement – it’s just a shell. Look at Condition.java which implements the condition variables using semaphores. The task is to implement condition variables without using semaphores. To do this task you should understand both condition variables and semaphores. Look at the code in Semaphore.java.

Page 9: Nachos. Getting the Source Code  -See CVS quickstart on COSC3407 website. On windows use putty: In the computer lab: -> start -> Math and computer science

Task2 (Condition Variables)

Condition variable: Has an associated lock to make sure only one process is active in the critical region at a time. A thread must acquire the lock to enter the critical region.

The condition variable allows a thread to wait for a condition to become true while in the critical region. If the condition is not true the thread can "sleep" in the critical region and allow another process to enter. This thread may change the condition to true and wake a thread that is currently sleeping on the condition. The awakened thread is moved to the ready queue (mesa semantics).

This means it does not run right away. The awakened thread will try to required the lock and proceed. It must check the condition again to make sure it is still true.

Page 10: Nachos. Getting the Source Code  -See CVS quickstart on COSC3407 website. On windows use putty: In the computer lab: -> start -> Math and computer science

Task 2 -Methods

void sleep()This method atomically released the lock and puts itself to sleep. On waking it needs to require the lock.

void wake()This method wake one thread (if there is one) that are sleeping on the condition.

void wakeAll()Wakes all threads sleeping on this condition.

**note** All methods require that the thread hold the lock.

Page 11: Nachos. Getting the Source Code  -See CVS quickstart on COSC3407 website. On windows use putty: In the computer lab: -> start -> Math and computer science

Task 3

Complete the alarm class The task is to implement the waitUntil(int x)

method in Alarm.java We want to make the calling thread to

block -i.e. move to the wait queue. The thread should be woken when the interval specified on the call is over (within 500 ticks). The timerInterrupt() method in this class is called every 500 ticks.To get the current time:

long curTime =Machine.timer().getTime();

Page 12: Nachos. Getting the Source Code  -See CVS quickstart on COSC3407 website. On windows use putty: In the computer lab: -> start -> Math and computer science

Task 4:

Implement the Communicator class. 2 methods to implement, void speak(int word) and int

listen(). The message (word) is passed from the speaker to exactly one listener. If there are no listeners the speaker must wait for one. For exampleif 3 speaker threads are run first, they will all wait until listeners arrive. If then 3 listener threads arrive then each will pick up a different word from each of the three speakers. As soon as their word is transferred the speaker and listener exit the system.

Conversely, if listeners arrive before speakers, they must also wait.

The documentation suggests that this can be done with one condition variable. Note that there should never be listeners and speakers waiting at the same time.

Page 13: Nachos. Getting the Source Code  -See CVS quickstart on COSC3407 website. On windows use putty: In the computer lab: -> start -> Math and computer science

Task 5

Implement ReactWater. Somewhat similar to Communicator. In this case 2 hydrogen, and one oxygen. Each thread will either be a hydrogen thread (call hReady()) or an oxygen thread (call oReady()). As soon as 2 hydrogen threads and one oxygen thread are ready, makeWater()can be called and those threads can exit. For example, if 3 oxygen threads are createdand 4 hydrogen, 2 water molecules can be created, and 1 oxygen molecule should be left waiting. No thread should be part of 2 different water molecules.