Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileReader;
- import java.io.IOException;
- import java.util.*;
- public class ProcesorN {
- ArrayList<Proces> baseList;
- ArrayList<Proces> fclist;
- ArrayList<Proces> sjflist;
- ArrayList<Proces> rrlist;
- ArrayList<Proces> sjfwlist;
- ArrayList<Proces> sjfadd;
- int range;
- int amount;
- int kwant;
- boolean plik;
- long liczbaProcesowDopliku=0;
- boolean getPlik()
- {
- return plik;
- }
- public ProcesorN()
- {}
- public void useFile() throws IOException
- { baseList= new ArrayList<>();
- File path= new File("C:\\SO.txt");
- try(BufferedReader reader = new BufferedReader(new FileReader(path))) {
- String line = reader.readLine();
- while(line!=null){
- liczbaProcesowDopliku++;
- amount++;
- StringTokenizer st = new StringTokenizer(line);
- st.nextToken();
- baseList.add(new Proces(Integer.parseInt(st.nextToken()),Integer.parseInt(st.nextToken())));
- line = reader.readLine();
- }
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- public void setKwant(int kwant)
- {this.kwant=kwant;}
- public void giveData()
- {
- Scanner in=new Scanner(System.in);
- System.out.println("Podaj maksymalny czas wykonywania procesu: ");
- this.range=in.nextInt();
- System.out.println("Podaj ilość procesów na ciąg: ");
- this.amount=in.nextInt();
- System.out.println("Podaj kwant czasu(RR): ");
- this.kwant=in.nextInt();
- }
- public void addProcesses()
- {
- baseList=new ArrayList<>();
- for(int i=0;i<amount;i++)
- baseList.add(new Proces((int)(Math.random()*range+1),0));
- }
- public void printList() // wydruk bazowej listy
- { System.out.println("Bazowa lista procesów: ");
- for(Proces p: baseList)
- System.out.println(p.czaswyk+" "+p.czasoczek);
- }
- public void listFCFS()
- {
- fclist=new ArrayList<Proces>(); // nowa lista dla fcfs
- for(int i=0; i<baseList.size();i++)
- fclist.add(new Proces(baseList.get(i).czaswyk, baseList.get(i).czasoczek));
- }
- public void wtimesFCFS()
- {
- for(int j=0; j<fclist.size();j++)
- for(int i=(j+1); i<(fclist.size());i++)
- fclist.get(i).czasoczek+=fclist.get(j).czaswyk;
- //System.out.println("Lista procesów FCFS: ");
- //System.out.printf("%-5s %-5s \n","Ocze.","Wyko.");
- //for(Proces p:fclist)
- //System.out.printf("%5d %5d \n",p.czaswyk,p.czasoczek);
- }
- public double averageFCFS()
- {
- double sum=0;
- for(int i=0; i<(fclist.size());i++)
- sum+=fclist.get(i).czasoczek;
- //System.out.println("Ilość procesów: "+x+"\n Suma czasów procesów: "+sum+"\n Średni czas oczekiwania na procesor: "+(sum/x));
- //System.out.println(amount+" "+sum+" "+"pojedyncza srednia fcfs: "+sum/amount);
- return (sum/(double)amount);
- }
- public void listSJF()
- {
- sjflist=new ArrayList<Proces>();
- for(int i=0; i<baseList.size();i++)
- sjflist.add(new Proces(baseList.get(i).czaswyk, baseList.get(i).czasoczek));
- Collections.sort(sjflist);
- //for(Proces p:sjflist)
- //System.out.println(p.czaswyk+" "+p.czasoczek);
- }
- public void wtimesSJF()
- {
- for(int j=0; j<sjflist.size();j++)
- for(int i=(j+1); i<(sjflist.size());i++)
- sjflist.get(i).czasoczek+=sjflist.get(j).czaswyk;
- //System.out.println("Lista procesów SJF: ");
- //System.out.printf("%-5s %-5s \n","Ocze.","Wyko.");
- //for(Proces p:sjflist)
- //System.out.printf("%5d %5d \n",p.czaswyk,p.czasoczek);
- }
- public double averageSJF()
- {
- double sum=0;
- for(int i=0; i<(sjflist.size());i++)
- sum+=sjflist.get(i).czasoczek;
- //System.out.println("Ilość procesów: "+x+"\n Suma czasów procesów: "+sum+"\n Średni czas oczekiwania na procesor: "+(sum/x));
- //System.out.println("pojedyncza srednia sjf: "+sum/amount);
- return (sum/(double)amount);
- }
- public void listRR()
- {
- rrlist=new ArrayList<Proces>();
- for(int i=0; i<baseList.size();i++)
- rrlist.add(new Proces(baseList.get(i).czaswyk, baseList.get(i).czasoczek));
- }
- public void wtimesRR()
- { int d=1;
- do
- {
- for(Proces p:rrlist)
- {
- if(p.czaswyk<kwant)
- {
- long cz=p.czaswyk;
- p.czaswyk=0;
- for(Proces o:rrlist)
- if(rrlist.size()>1 && o.czaswyk>0 && o!=p)
- {o.czasoczek+=cz;}
- }
- else if(p.czaswyk>=kwant)
- {
- p.czaswyk-=kwant;
- for(Proces o:rrlist)
- if(rrlist.size()>1 && o.czaswyk>0 && o!=p)//dodaje do wszystkich oprocz wykonywanego
- {o.czasoczek+=kwant;}
- }
- d=0;
- for(Proces x:rrlist)
- d+=x.czaswyk;
- }
- }while(d!=0);
- //System.out.println("Lista procesów RR: ");
- //System.out.printf("%-5s %-5s \n","Ocze.","Wyko.");
- //for(Proces p:rrlist)
- //System.out.printf("%5d %5d \n",p.czaswyk,p.czasoczek);
- }
- public double averageRR()
- {
- double all=0;
- for(Proces s:rrlist)
- all+=s.czasoczek;
- return (all/(double)amount);
- }
- public void listSJFW()
- { int s=baseList.size();
- int b=(int)(Math.floor(7*s/10)); // 7/10 30%% procesów do dodania
- sjfwlist=new ArrayList<>();
- sjfadd= new ArrayList<>();
- for(int i=0; i<b;i++)
- sjfwlist.add(new Proces(baseList.get(i).czaswyk, baseList.get(i).czasoczek));
- for(int j=b;j<baseList.size();j++)
- sjfadd.add(new Proces(baseList.get(j).czaswyk, baseList.get(j).czasoczek));
- Collections.sort(sjfwlist);
- Collections.sort(sjfadd);
- //for(Proces p:sjfwlist)
- //System.out.println("glownaa: "+p.czaswyk+" "+p.czasoczek);
- //for(Proces p:sjfadd)
- //System.out.println("dodawanie: "+p.czaswyk+" "+p.czasoczek);
- }
- public void SJF
- public void wtimesSJFW()
- {
- for(int i=0; i<sjfwlist.size();i++)
- { Proces p=sjfwlist.get(i);
- long time=p.czaswyk;
- while(p.czaswyk>0)
- { p.czaswyk--;
- for(Proces z:sjfwlist)
- if(z.czaswyk>0 && z!=p)
- z.czasoczek++;
- if(p.czaswyk==(time-1) && sjfadd.size()>0) //w polowie czasu doda kolejny proces z listy do dodania
- {
- Proces k=sjfadd.get(0);
- if(k.czaswyk<p.czaswyk)
- { long b=k.czaswyk;
- k.czaswyk=0;
- for(Proces l:sjfwlist)
- if(l.czaswyk>0 && k!=l)
- l.czasoczek+=b;
- }
- sjfwlist.add(new Proces(k.czaswyk, k.czasoczek));
- sjfadd.remove(0);
- Collections.sort(sjfwlist);
- }
- }
- }
- }
- public double averageSJFW()
- {
- int sum=0;
- for(Proces p:sjfwlist)
- {sum+=p.czasoczek;
- //System.out.println(p.czaswyk+" "+p.czasoczek);
- }
- //System.out.println("suma: "+sum+" sr: "+sum/amount+ "ilosc: "+amount);
- return (sum/(double)amount);
- }
- public static void main(String args[]) throws IOException
- {
- ProcesorN proc = new ProcesorN();
- double sumfcfs=0;
- double sumsjf=0;
- double sumRR=0;
- double sumsjfw=0;
- boolean doit=false;
- Scanner sc= new Scanner(System.in);
- System.out.println("Plik czy Losowo (plik=1 lub losowo=0)");
- int wybor=sc.nextInt();
- if(wybor==1)
- {
- proc.plik=true;
- doit=true;
- }
- else if(wybor==0)
- {
- proc.plik=false;
- doit=true;
- }
- else
- { doit=false;
- System.out.println("Wybierz poprawnie!");
- }
- if(doit)
- {
- if(proc.getPlik()==false)
- {
- proc.giveData();
- Scanner type= new Scanner(System.in);
- System.out.println("Podaj ilosc powtorzen ciagu:");
- int repeat=type.nextInt();
- type.close();
- for(int i=0; i<repeat; i++)
- {
- proc.addProcesses();
- //proc.printList();
- proc.listFCFS();
- proc.wtimesFCFS();
- sumfcfs+=proc.averageFCFS();
- proc.listSJF();
- proc.wtimesSJF();
- sumsjf+=proc.averageSJF();
- proc.listRR();
- proc.wtimesRR();
- sumRR+=proc.averageRR();
- proc.listSJFW();
- proc.wtimesSJFW();
- sumsjfw+=proc.averageSJFW();
- }
- //System.out.println("suma ffcfs"+sumfcfs);
- System.out.println("Sredni czas oczekiwania na procesor w FCFS: "+(sumfcfs/repeat));
- System.out.println("Sredni czas oczekiwania na procesor w SJF: "+(sumsjf/repeat));
- System.out.println("Sredni czas oczekiwania na procesor w RR: "+(sumRR/repeat));
- System.out.println("Sredni czas oczekiwania na procesor w SJF z wyw : "+(sumsjfw/repeat));
- }
- else
- {
- Scanner type= new Scanner(System.in);
- System.out.println("Podaj ilosc powtorzen danych(lepiej nie dawac wiecej niz raz przy tym pliku):");
- int repeat=type.nextInt();
- type.close();
- for(int i=0; i<repeat; i++)
- {
- proc.useFile();
- //proc.printList();
- proc.setKwant(5);
- //proc.listFCFS();
- // proc.wtimesFCFS();
- // sumfcfs+=proc.averageFCFS();
- //proc.listSJF();
- //proc.wtimesSJF();
- //sumsjf+=proc.averageSJF();
- //proc.listRR();
- //proc.wtimesRR();
- //sumRR+=proc.averageRR();
- proc.listSJFW();
- proc.wtimesSJFW();
- sumsjfw+=proc.averageSJFW();
- }
- //System.out.println("Sredni czas oczekiwania na procesor w FCFS: "+(sumfcfs/proc.liczbaProcesowDopliku*repeat));
- // System.out.println("Sredni czas oczekiwania na procesor w SJF: "+(sumsjf/proc.liczbaProcesowDopliku*repeat));
- // System.out.println("Sredni czas oczekiwania na procesor w RR: "+(sumRR/proc.liczbaProcesowDopliku*repeat));
- System.out.println("Sredni czas oczekiwania na procesor w SJF z wyw : "+(sumsjfw/proc.liczbaProcesowDopliku*repeat));
- }
- }
- }
- }
- public class Proces implements Comparable<Proces>{
- long czaswyk;
- long czasoczek;
- public Proces(long czaswyk,long czasoczek)
- {
- this.czaswyk=czaswyk;
- czasoczek=0;
- }
- //public Proces(long tempWorkingTime, long tempIncomeTime) {
- // this.czaswyk=tempWorkingTime;
- // tempIncomeTime=0;
- //}
- public int compareTo(Proces p)
- {
- if(czaswyk > p.czaswyk)
- return 1;
- if(czaswyk < p.czaswyk)
- return -1;
- else
- return 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement