Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 12.82 KB | None | 0 0
  1.  
  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileReader;
  6. import java.io.IOException;
  7. import java.util.*;
  8.  
  9. public class ProcesorN {
  10.  
  11.    
  12.     ArrayList<Proces> baseList;
  13.     ArrayList<Proces> fclist;
  14.     ArrayList<Proces> sjflist;
  15.     ArrayList<Proces> rrlist;
  16.     ArrayList<Proces> sjfwlist;
  17.     ArrayList<Proces> sjfadd;
  18.    
  19.     int range;
  20.     int amount;
  21.     int kwant;
  22.     boolean plik;
  23.     long liczbaProcesowDopliku=0;
  24.    
  25.     boolean getPlik()
  26.     {
  27.         return plik;
  28.     }
  29.    
  30.     public ProcesorN()
  31.     {}
  32.    
  33.    
  34.     public void useFile() throws IOException
  35.     {   baseList= new ArrayList<>();
  36.    
  37.         File path= new File("C:\\SO.txt");
  38.          try(BufferedReader reader = new BufferedReader(new FileReader(path))) {
  39.                 String line = reader.readLine();
  40.                 while(line!=null){
  41.                                    
  42.                     liczbaProcesowDopliku++;
  43.                     amount++;
  44.                  
  45.                     StringTokenizer st = new StringTokenizer(line);
  46.                     st.nextToken();              
  47.                     baseList.add(new Proces(Integer.parseInt(st.nextToken()),Integer.parseInt(st.nextToken())));
  48.                     line = reader.readLine();
  49.                 }
  50.             } catch (FileNotFoundException e) {
  51.                 e.printStackTrace();
  52.             } catch (IOException e) {
  53.                 e.printStackTrace();
  54.             }
  55.         }
  56.    
  57.     public void setKwant(int kwant)
  58.     {this.kwant=kwant;}
  59.    
  60.     public void giveData()
  61.     {
  62.         Scanner in=new Scanner(System.in);
  63.         System.out.println("Podaj maksymalny czas wykonywania procesu: ");
  64.         this.range=in.nextInt();
  65.         System.out.println("Podaj ilość procesów na ciąg: ");
  66.         this.amount=in.nextInt();
  67.         System.out.println("Podaj kwant czasu(RR): ");
  68.         this.kwant=in.nextInt();
  69.     }
  70.     public void addProcesses()
  71.     {
  72.         baseList=new ArrayList<>();
  73.         for(int i=0;i<amount;i++)
  74.         baseList.add(new Proces((int)(Math.random()*range+1),0));
  75.     }
  76.     public void printList()                                   // wydruk bazowej listy
  77.     {   System.out.println("Bazowa lista procesów: ");
  78.         for(Proces p: baseList)
  79.             System.out.println(p.czaswyk+"   "+p.czasoczek);
  80.        
  81.     }
  82.     public void listFCFS()
  83.     {  
  84.         fclist=new ArrayList<Proces>();   // nowa lista dla fcfs
  85.         for(int i=0; i<baseList.size();i++)
  86.             fclist.add(new Proces(baseList.get(i).czaswyk, baseList.get(i).czasoczek));
  87.     }
  88.     public void wtimesFCFS()
  89.     {  
  90.         for(int j=0; j<fclist.size();j++)
  91.             for(int i=(j+1); i<(fclist.size());i++)
  92.                 fclist.get(i).czasoczek+=fclist.get(j).czaswyk;
  93.         //System.out.println("Lista procesów FCFS: ");
  94.         //System.out.printf("%-5s  %-5s \n","Ocze.","Wyko.");
  95.         //for(Proces p:fclist)
  96.         //System.out.printf("%5d  %5d \n",p.czaswyk,p.czasoczek);
  97.     }  
  98.     public double averageFCFS()
  99.     {  
  100.         double sum=0;
  101.         for(int i=0; i<(fclist.size());i++)
  102.             sum+=fclist.get(i).czasoczek;
  103.  
  104.         //System.out.println("Ilość procesów: "+x+"\n Suma czasów procesów: "+sum+"\n Średni czas oczekiwania na procesor: "+(sum/x));
  105.         //System.out.println(amount+"  "+sum+"  "+"pojedyncza srednia fcfs: "+sum/amount);
  106.         return (sum/(double)amount);
  107.     }
  108.     public void listSJF()
  109.     {  
  110.         sjflist=new ArrayList<Proces>();
  111.         for(int i=0; i<baseList.size();i++)
  112.             sjflist.add(new Proces(baseList.get(i).czaswyk, baseList.get(i).czasoczek));
  113.         Collections.sort(sjflist);
  114.        
  115.         //for(Proces p:sjflist)
  116.             //System.out.println(p.czaswyk+"  "+p.czasoczek);
  117.     }
  118.    
  119.     public void wtimesSJF()
  120.     {  
  121.         for(int j=0; j<sjflist.size();j++)  
  122.             for(int i=(j+1); i<(sjflist.size());i++)
  123.              sjflist.get(i).czasoczek+=sjflist.get(j).czaswyk;
  124.         //System.out.println("Lista procesów SJF: ");
  125.         //System.out.printf("%-5s  %-5s \n","Ocze.","Wyko.");
  126.         //for(Proces p:sjflist)
  127.         //System.out.printf("%5d  %5d \n",p.czaswyk,p.czasoczek);
  128.     }  
  129.     public double averageSJF()
  130.     {  
  131.         double sum=0;
  132.         for(int i=0; i<(sjflist.size());i++)
  133.             sum+=sjflist.get(i).czasoczek;
  134.            
  135.         //System.out.println("Ilość procesów: "+x+"\n Suma czasów procesów: "+sum+"\n Średni czas oczekiwania na procesor: "+(sum/x));
  136.         //System.out.println("pojedyncza srednia sjf: "+sum/amount);
  137.         return (sum/(double)amount);
  138.     }
  139.     public void listRR()
  140.     {
  141.         rrlist=new ArrayList<Proces>();  
  142.         for(int i=0; i<baseList.size();i++)
  143.             rrlist.add(new Proces(baseList.get(i).czaswyk, baseList.get(i).czasoczek));
  144.     }
  145.     public void wtimesRR()
  146.     {   int d=1;
  147.         do
  148.         {
  149.             for(Proces p:rrlist)
  150.             {      
  151.                    
  152.                     if(p.czaswyk<kwant)
  153.                     {
  154.                         long cz=p.czaswyk;
  155.                         p.czaswyk=0;
  156.                        
  157.                         for(Proces o:rrlist)
  158.                                 if(rrlist.size()>1 && o.czaswyk>0 && o!=p)
  159.                                     {o.czasoczek+=cz;}
  160.                        
  161.                     }
  162.                     else if(p.czaswyk>=kwant)
  163.                      {
  164.                         p.czaswyk-=kwant;
  165.                        
  166.                         for(Proces o:rrlist)
  167.                                 if(rrlist.size()>1 && o.czaswyk>0 && o!=p)//dodaje do wszystkich oprocz wykonywanego
  168.                                     {o.czasoczek+=kwant;}
  169.                      }                
  170.                     d=0;
  171.                 for(Proces x:rrlist)
  172.                     d+=x.czaswyk;
  173.                    
  174.             }
  175.         }while(d!=0);  
  176.        
  177.         //System.out.println("Lista procesów RR: ");
  178.         //System.out.printf("%-5s  %-5s \n","Ocze.","Wyko.");
  179.         //for(Proces p:rrlist)
  180.         //System.out.printf("%5d  %5d \n",p.czaswyk,p.czasoczek);
  181.     }
  182.    
  183.     public double averageRR()
  184.     {
  185.         double all=0;
  186.        
  187.         for(Proces s:rrlist)
  188.             all+=s.czasoczek;
  189.         return (all/(double)amount);
  190.     }
  191.  
  192.     public void listSJFW()
  193.     {   int s=baseList.size();
  194.         int b=(int)(Math.floor(7*s/10));        // 7/10 30%% procesów do dodania
  195.         sjfwlist=new ArrayList<>();
  196.         sjfadd= new ArrayList<>();
  197.         for(int i=0; i<b;i++)
  198.             sjfwlist.add(new Proces(baseList.get(i).czaswyk, baseList.get(i).czasoczek));
  199.         for(int j=b;j<baseList.size();j++)
  200.             sjfadd.add(new Proces(baseList.get(j).czaswyk, baseList.get(j).czasoczek));
  201.         Collections.sort(sjfwlist);
  202.         Collections.sort(sjfadd);
  203.        
  204.         //for(Proces p:sjfwlist)
  205.             //System.out.println("glownaa: "+p.czaswyk+"  "+p.czasoczek);
  206.         //for(Proces p:sjfadd)
  207.             //System.out.println("dodawanie: "+p.czaswyk+"  "+p.czasoczek);
  208.     }
  209.    
  210.     public void SJF
  211.    
  212.     public void wtimesSJFW()
  213.     {  
  214.         for(int i=0; i<sjfwlist.size();i++)
  215.         {   Proces p=sjfwlist.get(i);
  216.             long time=p.czaswyk;
  217.                 while(p.czaswyk>0)
  218.                     { p.czaswyk--;
  219.                         for(Proces z:sjfwlist)
  220.                             if(z.czaswyk>0 && z!=p)
  221.                               z.czasoczek++;
  222.              
  223.                         if(p.czaswyk==(time-1) && sjfadd.size()>0)                  //w polowie czasu doda kolejny proces z listy do dodania
  224.                             {
  225.                                 Proces k=sjfadd.get(0);
  226.                                  
  227.                                    if(k.czaswyk<p.czaswyk)
  228.                                     {   long b=k.czaswyk;
  229.                                         k.czaswyk=0;
  230.                                         for(Proces l:sjfwlist)
  231.                                             if(l.czaswyk>0 && k!=l)
  232.                                                 l.czasoczek+=b;
  233.                                     }
  234.                                  sjfwlist.add(new Proces(k.czaswyk, k.czasoczek));
  235.                                  sjfadd.remove(0);  
  236.                                  Collections.sort(sjfwlist);
  237.                             }
  238.                        
  239.                     }
  240.         }
  241.     }
  242.     public double averageSJFW()
  243.     {
  244.         int sum=0;
  245.         for(Proces p:sjfwlist)
  246.             {sum+=p.czasoczek;
  247.               //System.out.println(p.czaswyk+"  "+p.czasoczek);
  248.             }
  249.         //System.out.println("suma: "+sum+" sr: "+sum/amount+ "ilosc: "+amount);
  250.         return (sum/(double)amount);
  251.     }
  252.    
  253.     public static void main(String args[]) throws IOException
  254.     {
  255.         ProcesorN proc = new ProcesorN();
  256.         double sumfcfs=0;
  257.         double sumsjf=0;
  258.         double sumRR=0;
  259.         double sumsjfw=0;
  260.         boolean doit=false;
  261.        
  262.         Scanner sc= new Scanner(System.in);
  263.         System.out.println("Plik czy Losowo (plik=1 lub losowo=0)");
  264.         int wybor=sc.nextInt();
  265.        
  266.         if(wybor==1)
  267.         {
  268.        
  269.         proc.plik=true;
  270.          doit=true;
  271.         }
  272.        
  273.         else if(wybor==0)
  274.         {
  275.             proc.plik=false;
  276.              doit=true;
  277.         }
  278.         else
  279.         {   doit=false;
  280.             System.out.println("Wybierz poprawnie!");
  281.         }
  282.        
  283.        
  284.        if(doit)
  285.        {
  286.        if(proc.getPlik()==false)
  287.         {
  288.         proc.giveData();
  289.        
  290.         Scanner type= new Scanner(System.in);
  291.         System.out.println("Podaj ilosc powtorzen ciagu:");
  292.         int repeat=type.nextInt();
  293.         type.close();
  294.        
  295.        
  296.         for(int i=0; i<repeat; i++)
  297.          {
  298.             proc.addProcesses();
  299.             //proc.printList();
  300.            
  301.             proc.listFCFS();
  302.             proc.wtimesFCFS();
  303.             sumfcfs+=proc.averageFCFS();
  304.            
  305.             proc.listSJF();
  306.             proc.wtimesSJF();
  307.             sumsjf+=proc.averageSJF();
  308.            
  309.             proc.listRR();
  310.             proc.wtimesRR();
  311.             sumRR+=proc.averageRR();
  312.            
  313.             proc.listSJFW();
  314.             proc.wtimesSJFW();
  315.             sumsjfw+=proc.averageSJFW();
  316.          }
  317.         //System.out.println("suma ffcfs"+sumfcfs);
  318.         System.out.println("Sredni czas oczekiwania na procesor w FCFS: "+(sumfcfs/repeat));
  319.         System.out.println("Sredni czas oczekiwania na procesor w SJF: "+(sumsjf/repeat));
  320.         System.out.println("Sredni czas oczekiwania na procesor w RR: "+(sumRR/repeat));  
  321.         System.out.println("Sredni czas oczekiwania na procesor w SJF z wyw : "+(sumsjfw/repeat));
  322.         }
  323.        else
  324.        {
  325.            Scanner type= new Scanner(System.in);
  326.            System.out.println("Podaj ilosc powtorzen danych(lepiej nie dawac wiecej niz raz przy tym pliku):");
  327.            int repeat=type.nextInt();
  328.            type.close();
  329.          
  330.          
  331.            for(int i=0; i<repeat; i++)
  332.             {
  333.                proc.useFile();
  334.                //proc.printList();
  335.                proc.setKwant(5);
  336.              
  337.                //proc.listFCFS();
  338.               // proc.wtimesFCFS();
  339.               // sumfcfs+=proc.averageFCFS();
  340.              
  341.                //proc.listSJF();
  342.                //proc.wtimesSJF();
  343.                //sumsjf+=proc.averageSJF();
  344.              
  345.                
  346.                //proc.listRR();
  347.                //proc.wtimesRR();
  348.                //sumRR+=proc.averageRR();
  349.              
  350.                
  351.                proc.listSJFW();
  352.                proc.wtimesSJFW();
  353.                sumsjfw+=proc.averageSJFW();
  354.             }
  355.            
  356.            //System.out.println("Sredni czas oczekiwania na procesor w FCFS: "+(sumfcfs/proc.liczbaProcesowDopliku*repeat));
  357.           // System.out.println("Sredni czas oczekiwania na procesor w SJF: "+(sumsjf/proc.liczbaProcesowDopliku*repeat));
  358.           // System.out.println("Sredni czas oczekiwania na procesor w RR: "+(sumRR/proc.liczbaProcesowDopliku*repeat));  
  359.            System.out.println("Sredni czas oczekiwania na procesor w SJF z wyw : "+(sumsjfw/proc.liczbaProcesowDopliku*repeat));
  360.            
  361.        }
  362.     }
  363.     }
  364.  
  365. }
  366.  
  367.  
  368.  
  369. public class Proces implements Comparable<Proces>{
  370.     long czaswyk;
  371.     long czasoczek;
  372.    
  373.     public Proces(long czaswyk,long czasoczek)
  374.     {
  375.         this.czaswyk=czaswyk;
  376.         czasoczek=0;
  377.     }
  378.     //public Proces(long tempWorkingTime, long tempIncomeTime) {
  379.     //  this.czaswyk=tempWorkingTime;
  380.     //  tempIncomeTime=0;
  381.     //}
  382.  
  383.     public int compareTo(Proces p)
  384.     {
  385.         if(czaswyk > p.czaswyk)
  386.             return 1;
  387.         if(czaswyk < p.czaswyk)
  388.             return -1;
  389.         else
  390.             return 0;
  391.     }
  392.    
  393. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement