Advertisement
Guest User

Untitled

a guest
Feb 25th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.34 KB | None | 0 0
  1.  
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.FileReader;
  5. import java.io.IOException;
  6. import java.nio.file.Files;
  7. import java.nio.file.Paths;
  8. import java.util.ArrayList;
  9. import java.util.HashMap;
  10. import java.util.logging.Level;
  11. import java.util.logging.Logger;
  12.  
  13.  
  14.  
  15. public class PagedMemory {
  16.      private static String listFile = "/Users/pcase/Desktop/test.txt";
  17.      private static BufferedReader fileReader = null;
  18.      private static ArrayList<Job> jobQueue = null;
  19.      public static boolean[] busyTracker = new boolean[10];
  20.      public static ArrayList<Job> completedTasks = new ArrayList<Job>();
  21.      private static String line = "";
  22.  
  23.     public static void main(String[] args) throws InterruptedException, NumberFormatException, IOException {
  24.  
  25.         HashMap<Integer, Boolean> PageMemoryTable = new HashMap<>();
  26.        
  27.         PageMemoryTable.put(1, true);
  28.         PageMemoryTable.put(2, true);
  29.         PageMemoryTable.put(3, true);
  30.         PageMemoryTable.put(4, true);
  31.         PageMemoryTable.put(5, true);
  32.         PageMemoryTable.put(6, true);
  33.         PageMemoryTable.put(7, true);
  34.         PageMemoryTable.put(8, true);
  35.         PageMemoryTable.put(9, true);
  36.         PageMemoryTable.put(10, true);
  37.          
  38.  
  39.         jobQueue = new ArrayList<Job>();
  40.         jobQueue.ensureCapacity(5);
  41.         fileReader = new BufferedReader(new FileReader(listFile));
  42.         while ((line = fileReader.readLine()) != null)
  43.         {
  44.             String[] entry = line.split(",", 3);
  45.             jobQueue.add(new Job(entry[0], Double.parseDouble(entry[1]), Double.parseDouble(entry[2])));
  46.         }
  47.        
  48.         for (int i = 0; i < jobQueue.size(); i++) {
  49.            
  50.             i = i + 2;
  51.         }
  52.         System.out.println("Job List:" + jobQueue);
  53.        
  54.         //Remove jobs that are too large
  55.         for(int i = 0; i < jobQueue.size(); i++){
  56.             if(jobQueue.get(i).getSize() > 1000){
  57.                     System.out.println("Size " + jobQueue.get(i).getSize() + " is too large! It will be removed from the table!");
  58.                     jobQueue.remove(i);
  59.                 }
  60.         }
  61.         System.out.println("Job List:" + jobQueue + "/n");
  62.        
  63.        
  64.         ArrayList<PMTInfo> PMT = new ArrayList<>();
  65.                
  66.    
  67.         while (jobQueue.size() > 0) {
  68.            
  69.             //Checks if jobs are done
  70.             for(int i = 0; i < jobQueue.size(); i++){
  71.                
  72.                 if((jobQueue.get(i).getStartTime() + jobQueue.get(i).getExecutionTime()) <= System.currentTimeMillis()){
  73.                     resetPMT(jobQueue.get(i), PageMemoryTable);
  74.                     System.out.println("Job ID " + jobQueue.get(i).getID() + " finished");
  75.                     jobQueue.remove(i);
  76.                 }
  77.             }
  78.            
  79.             for(int i = 0; i < jobQueue.size(); i++){
  80.                 PMT.clear();
  81.                 int freeMemory = checkMemoryAvailable(PageMemoryTable);
  82.                 double currentJobSize = jobQueue.get(i).getSize();
  83.                 double numberOfPages = 0;
  84.                 if(currentJobSize <= freeMemory){
  85.                    
  86.                    
  87.                    if(currentJobSize % 100 != 0){
  88.                        numberOfPages = (currentJobSize / 100) + 1;
  89.                    }else{
  90.                        numberOfPages = currentJobSize / 100;
  91.                    }
  92.                    
  93.                    for(int b = 0; b < numberOfPages; b++){
  94.                        int pageFrame = findFreePageFrame(PageMemoryTable);
  95.                        if(pageFrame != -1){
  96.                            PMT.add(new PMTInfo(b,pageFrame));
  97.                        }else{
  98.                            System.out.println("ERROR: There are no free page frames.");
  99.                        }
  100.                        
  101.                    }
  102.                    jobQueue.get(i).setPMT(PMT);
  103.                    System.out.println("- JOB " + " " + i + " - \n" + jobQueue.get(i));
  104.                    System.out.println("- PMT - \n" + jobQueue.get(i).displayPMT());
  105.                    jobQueue.get(i).setStartTime(System.currentTimeMillis());
  106.                    Thread.sleep(1000);
  107.                 }else{
  108.                     System.out.println(" - There is not enough free memory at the moment for - JOB " + jobQueue.get(i) + " -. Continuing to next Job.\n");
  109.                 }
  110.             }
  111.         }
  112.        
  113.         System.out.println("Processing COMPLETE. Program Ended");
  114.  
  115.     }
  116.    
  117.     public static int checkMemoryAvailable(HashMap<Integer, Boolean> mMT){
  118.         int freeMemory = 0;
  119.         for(int i = 0; i < mMT.size(); i++){
  120.             if(mMT.get(i) == true){
  121.                 freeMemory += 100;
  122.             }
  123.         }
  124.        
  125.         return freeMemory;
  126.     }
  127.    
  128.     public static int findFreePageFrame(HashMap<Integer, Boolean> mMT){
  129.         int toReturn =-1;
  130.         for(int i = 0; i < mMT.size(); i++){
  131.             if(mMT.get(i)){
  132.                 mMT.replace(i, false);
  133.                 toReturn = i;
  134.                 break;
  135.             }
  136.         }
  137.        
  138.         return toReturn;
  139.     }
  140.    
  141.      public static void resetPMT(Job job, HashMap<Integer, Boolean> mMT){
  142.         for(int i = 0; i < job.getPMT().size(); i++){
  143.             int index = job.getPMT().get(i).getPageFrameNumber();
  144.             mMT.put(index, true);
  145.         }
  146.     }
  147.        
  148. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement