• If you are getting "command not found" when you are trying to run the nachos on Unix, and you have opened the shell script "bin/nachos" using a Windows editor such as notepad, you may have converted the Unix text file to a dos text file. The difference isn't great, but it's enough to prevent the shell script from running. To fix this, use the dos2unix command. "dos2unix nachos > nachos.new; mv nachos.new nachos"
  • Priority Scheduling hint #1. A thread can only be waiting for one resource at a time.
  • Priority Scheduling hint #2. Remember that for some resources, such as the CPU, it doesn't make sense to acquire() the resource. Consider how a process who has the CPU can place herself back into the ready queue. Check the transferPriority flag, and don't call acquire() from any functions in PriorityScheduler.java if it is set.
  • When implementing the ElevatorController class: the elevator bank sends you (the ElevatorController) events. To get this events, you call setInterruptHandler() on the ElevatorControls. You pass setInterruptHandler() a Runnable that specifies the method you want to be run when a message is available. Now the elevator bank is scheduling a timer event to send you these message, so when your handler is called, it is called from the timer interrupt handler. Remember that interrupt handlers must NEVER block. So you cannot use within that method that may block (such as P() or acquire() or sleep()). On the other hand, interrupts should be disabled when the interrupt handler is called, and you can call V() or wake();