Exemplo n.º 1
0
 public static void terminateJobs()
 {
     for (int i = 0; i < Driver.CPUs.Length; i++)
     {
         int currentJobNumber = Driver.CPUs[i].currentJobNumber();
         try
         {
             if (Driver.CPUs[i].isIdle() && Driver.CPUs[i].shouldTerminate())
             {
                 Console.WriteLine(String.Format("TERMINATING" + currentJobNumber + ":is idle:{0} shouldTerminate:{1} cpu loaded:{2} shouldUnload:{3}", Driver.CPUs[i].isIdle(), Driver.CPUs[i].shouldTerminate(), Driver.CPUs[i].isJobLoaded(), Driver.CPUs[i].shouldUnload()));
                 Console.WriteLine("Terminating Job" + currentJobNumber + "ON CPU:" + i);
                 Driver.commands[currentJobNumber] += "TERMINATING JOB" + currentJobNumber + "ON CPU: " + i;
                 Driver.CPUs[i].unload(PCBManager.getPCB(currentJobNumber));
                 MMU.synchronizeCache(PCBManager.getPCB(currentJobNumber));
                 RAM.deallocatePcb(PCBManager.getPCB(currentJobNumber));
                 Console.WriteLine(string.Format("TERMINATED" + currentJobNumber + ":is idle:%s shouldTerminate:%s cpu loaded:%s shouldUnload:%s", Driver.CPUs[i].isIdle(), Driver.CPUs[i].shouldTerminate(), Driver.CPUs[i].isJobLoaded(), Driver.CPUs[i].shouldUnload()));
                 if (PCBManager.getPCB(currentJobNumber).getProcessStatus() == PCB.PROCESS_STATUS.TERMINATE)
                 {
                     Driver.completedJobs++;
                 }
                 Driver.updateOsMetric();
             }
         }
         catch (IndexOutOfRangeException ex)
         {
             throw new IndexOutOfRangeException("Exception Terminating Job" + currentJobNumber + "On CPU:" + i + " " + ex.ToString());
         }
     }
 }
Exemplo n.º 2
0
 private String read(int address)
 {
     return(MMU.read(VMA[address / RAM.getPageSize()] * RAM.getPageSize() + (address % RAM.getPageSize())));
 }