Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Programos pavadinimas: CPUSchedulling.
- * Paskirtis: Pavaizduoti centrinio procesorinio prietaiso procesu skirstymo algoritmus.
- * Autorius: Dovydas Girdvainis
- * Vilniaus Gedimino technikos universiteto operaciniu sistemu koncepciju 4 laboratorinsi darbas.
- * Laboratorinio darbo uzduotis:
- * Parašyti programinį kodą C/C++ kalba, iliustruojantį CPĮ darbo planavimą pagal 2.1 – 2.5 punktuose apibūdintus algoritmus.
- * Laboratorinio darbo metu bus pateikta:
- *+ procesų skaičius;
- *+ CPĮ paketo trukmės;
- *+ atsiradimo laikas (TLVLP algoritme);
- *+ prioritetas (PDP algoritme);
- *+ laiko kvantas (ŽL algoritme).
- * Gali būti padaryta prielaida, kad visi procesai atsiranda nuliniu laiko momentu (išskyrus TLVLP algoritmą), bet tam tikra tvarka,
- *+ pvz., iš eilės: P1, P2 ... Pn. Turi būti numatyta galimybė keisti procesų skaičių ir jų CPĮ paketų trukmę.Turi būti apskaičiuojama
- *+ ir atvaizduojama: kiekvieno proceso laukimo trukmė, vidutinė laukimo trukmė,kiekvieno proceso apyvartos trukmė, vidutinė apyvartos trukmė.
- * Programos paleidimas:
- * ./CPUSchedulling algoritmo_tipas procesu_skaicius n_paketo_trukme n_paketo_atsiradimo_laikas n_paketo_prioritetas laiko_kvantas
- * Programos isvedamas rezultatas:
- *+ procesu skaicius;
- *+ N_proceso_laukimo_trukme, N_proceso_apyvarta;
- *+ vidutine_procesu_laukimo_trukme, vidutine_apyvartos_trukme.
- * 2015 m. VGTU
- */
- #include <iostream>
- #include <iomanip>
- using namespace std;
- int main()
- {
- string tipas; /**< algoritmo tipas */
- int n; /**< procesu skaicius */
- cout<<"tipas: ";
- cin>>tipas;
- cout<<endl<<"Proc. skaicius:";
- cin>>n;
- double* lenght=new double[n]; /**< procesu trukmiu masyvas */
- double* appear=new double[n]; /**< procesu atrisadimo laiku masyvas */
- int* priority=new int[n]; /**< procesu prioritetai */
- double q; /**< laiko kvantas */
- double t_avg=0; /**< proceso vidutine laukimo trukme */
- double tr_avg=0; /**< vidutine procesu apyvarta */
- double* t=new double[n]; /**< n-ojo proceso laukimo trukme */
- double* tr=new double[n]; /**< n-ojo proceso apyvarta */
- /**< Nuskaitymo ciklas */
- if((tipas=="PAPA")||(tipas=="FCFS")||((tipas=="TDP")||(tipas=="SJF")))
- {
- for(int i=0; i<n; i++)
- {
- cout<<endl<<i<<" Proc trukme: ";
- cin>>lenght[i];
- }
- }
- else if((tipas=="TLVLP")||(tipas=="SRTF"))
- {
- for(int i=0; i<n; i++)
- {
- cout<<endl<<i<<" Proc. trukme: ";
- cin>>lenght[i];
- cout<<endl<<i<<" Proc. atsiradimas: ";
- cin>>appear[i];
- }
- }
- else if((tipas=="PDP")||(tipas=="PS"))
- {
- for(int i=0; i<n; i++)
- {
- cout<<endl<<i<<" Proc trukme: ";
- cin>>lenght[i];
- cout<<endl<<i<<" Proc prioritetas: ";
- cin>>priority[i];
- }
- }
- else if((tipas=="ZL")||(tipas=="RR"))
- {
- for(int i=0; i<n; i++)
- {
- cout<<endl<<i<<" Proc trukme ";
- cin>>lenght[i];
- }
- cout<<endl<<"Laiko kvantas: ";
- cin>>q;
- }
- /**< Pirmas atejo - pirmas aptarnautas algoritmas */ // done
- if((tipas=="PAPA")||(tipas=="FCFS"))
- {
- t[0]=0;
- tr[0]=0;
- int b=0; // Sekancio proco laukimo trukme
- cout<<endl<<"Proc. skaic.: "<<n<<endl;
- for(int i=0; i<n; i++)
- {
- if(i==0)
- {
- t[i]=0;
- tr[i]=b+lenght[i];
- tr_avg+=tr[i];
- b+=lenght[i];
- cout<<i<<" Proc.: "<<t[i]<<" "<<tr[i]<<endl;
- i++;
- }
- t[i]=b;
- t_avg+=t[i];
- tr[i]=b+lenght[i];
- tr_avg+=tr[i];
- b+=lenght[i];
- cout<<i<<" Proc.: "<<t[i]<<" "<<tr[i]<<endl;
- }
- t_avg=t_avg/n;
- tr_avg=tr_avg/n;
- cout<<setprecision(2)<<t_avg<<" "<<setprecision(2)<<tr_avg<<endl;
- }
- /**< Trumpiausio darbo pirmumo algoritmas */ // done
- else if((tipas=="TDP")||(tipas=="SJF"))
- {
- double tmp;
- /**< Isiruosiuojame pagal paketo ilgi */
- for(int i=0; i<n; i++)
- {
- for(int j=(i+1); j<n; j++)
- {
- if(lenght[i]>lenght[j])
- {
- tmp=lenght[i];
- lenght[i]=lenght[j];
- lenght[j]=tmp;
- }
- }
- }
- t[0]=0;
- tr[0]=0;
- int b=0; // Sekancio proco laukimo trukme
- cout<<endl<<"Proc. skaic.: "<<n<<endl;
- for(int i=0; i<n; i++)
- {
- if(i==0)
- {
- t[i]=0;
- tr[i]=b+lenght[i];
- tr_avg+=tr[i];
- b+=lenght[i];
- cout<<i<<" Proc.: "<<t[i]<<" "<<tr[i]<<endl;
- i++;
- }
- t[i]=b;
- t_avg+=t[i];
- tr[i]=b+lenght[i];
- tr_avg+=tr[i];
- b+=lenght[i];
- cout<<i<<" Proc.: "<<t[i]<<" "<<tr[i]<<endl;
- }
- t_avg=t_avg/n;
- tr_avg=tr_avg/n;
- cout<<setprecision(2)<<t_avg<<" "<<setprecision(2)<<tr_avg<<endl;
- }
- /**< Trumpiausio likusio veikimo laiko pirmumo algoritmas */
- else if((tipas=="TLVLP")||(tipas=="SRTF"))
- {
- bool* status=new bool[n]; /**< proceso statusu masyvas */
- int x;
- bool done; /**< Ar visi procesai baigti? */
- for(int i=0; i<=n; i++)
- status[i]=0;
- while(!done)
- {
- x=0;
- for(int i=0; i<=n; i++)
- {
- if(status[i]==1)
- x++;
- if(x==n)
- done=1;
- if((lenght[i]>lenght[i+1])&&(appear[i]<appear[i+1]))
- {
- lenght[i]--;
- tr[i]++;
- if(lenght[i]==0)
- status[i]=1;
- i++;
- }
- }
- }
- }
- /**< Prioritetinio darbo paskirstymo algoritmas */ // done
- else if((tipas=="PDP")||(tipas=="PS"))
- {
- double tmp;
- /**< Isirusiuojame pagal prioriteta */
- for(int i=0; i<n; i++)
- {
- for(int j=(i+1); j<n; j++)
- {
- if(priority[i]>priority[j])
- {
- tmp=lenght[i];
- lenght[i]=lenght[j];
- lenght[j]=tmp;
- tmp=priority[i];
- priority[i]=priority[j];
- priority[j]=tmp;
- }
- }
- }
- t[0]=0;
- tr[0]=0;
- int b=0; // Sekancio proco laukimo trukme
- cout<<endl<<"Proc. skaic.: "<<n<<endl;
- for(int i=0; i<n; i++)
- {
- if(i==0)
- {
- t[i]=0;
- tr[i]=b+lenght[i];
- tr_avg+=tr[i];
- b+=lenght[i];
- cout<<i<<" Proc.: "<<t[i]<<" "<<tr[i]<<endl;
- i++;
- }
- t[i]=b;
- t_avg+=t[i];
- tr[i]=b+lenght[i];
- tr_avg+=tr[i];
- b+=lenght[i];
- cout<<i<<" Proc.: "<<t[i]<<" "<<tr[i]<<endl;
- }
- t_avg=t_avg/n;
- tr_avg=tr_avg/n;
- cout<<setprecision(2)<<t_avg<<" "<<setprecision(2)<<tr_avg<<endl;
- }
- /**< Ziediniu lenktyniu algoritmas */
- else if((tipas=="ZL")||(tipas=="RR"))
- {
- bool* status=new bool[n]; /**< proceso statusu masyvas */
- int x; /**< Proceso statusas */
- bool done; /**< Ar visi procesai baigti? */
- t[0]=0;
- tr[0]=0;
- while(!done)
- {
- x=0;
- for(int i=0; i<=n; i++)
- {
- /**< Procesu statusu tikrinimas */
- if(status[i]==1)
- x++;
- if(x==n)
- done=1;
- /**< Laiko kvanto ciklas */
- for(int j=0; j<=q; j++)
- {
- begining:
- if(lenght[i]==0)
- {
- status[i]=1;
- i++;
- goto begining;
- }
- if(lenght[i]!=0)
- {
- lenght[i]--;
- tr[i]++;
- }
- }
- if((i==0)&&(lenght[i]==0))
- t[i]=0;
- if(lenght[i]!=0)
- {
- for(int p=i+1; p<=n; p++)
- {
- if(lenght[p]<=q)
- t[i]+=lenght[p];
- else
- t[i]+=q;
- }
- }
- }
- }
- cout<<endl<<"Proc. skaic.: "<<n<<endl;
- for(int i=0; i<=n; i++)
- {
- t_avg+=t[i];
- tr_avg+=tr[i];
- cout<<i<<" Proc.: "<<t[i]<<" "<<tr[i]<<endl;
- }
- t_avg=t_avg/n;
- tr_avg=tr_avg/n;
- cout<<t_avg<<" "<<tr_avg<<endl;
- cout<<setprecision(2)<<t_avg<<" "<<setprecision(2)<<tr_avg<<endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement