Witam!
Potrzebuję pomocy przy implementacji algorytmu SRTF. Funkcja dostaje na wejściu liczbę procesów i tablicę procesów. Każdy proces to obiekt klasy:
class Proces
{
int id;
int moment_zgloszenia;
int dl_fazy_procesora;
};
Przy tym dl_fazy_procesora losuje się sama, a kolejne dane dla składowej moment_zgloszenia są w równych odstępach czasu i są ponumerowane od 0 [tak jak id]. Przykład:
Proces || Moment zgłoszenia || Dl_fazy_procesora
P[0] 0 6
P[1] 1 4
P[2] 2 5
itd.
Problem polega na tym, że wiem, na czym polega idea wywłaszczania [bo SRTF to nic innego jak SJF z wywłaszczaniem], ale za nic nie mogę tego zaimplementować.
Z tego, co wydukałem do tej pory, wyszło "coś" takiego:
void SJF1(int ile_pr,Proces *tab_pr)
{
int i,wait=0;
system("cls");
cout<<"Algorytm SJF z wywlaszczaniem (shortest-remaining-time-first):"<<endl<<endl;
for(i=0;i<ile_pr;i++)
{
if(i==0)
{
if(tab_pr[i].dl_fazy_procesora<=tab_pr[i+1].dl_fazy_procesora)
cout<<"Proces P["<<i<<"]="<<wait<<endl;
else
{
tab_pr[i].dl_fazy_procesora-=tab_pr[i+1].moment_zgloszenia;
cout<<"Proces P["<<i<<"]="<<wait<<endl;
}
}
else
{
if(tab_pr[i].dl_fazy_procesora<=tab_pr[i+1].dl_fazy_procesora)
{
wait+=tab_pr[i-1].dl_fazy_procesora;
cout<<"Proces P["<<i<<"]="<<wait<<endl;
}
else
{
tab_pr[i].dl_fazy_procesora-=tab_pr[i+1].moment_zgloszenia;
wait+=tab_pr[i].dl_fazy_procesora;
cout<<"Proces P["<<i<<"]="<<wait<<endl;
}
}
}
system("pause");
}
Oczywiście funkcja krzaczy się strasznie, bo nie wiem chociażby, jak zrobić, aby sprawdzało, czy wywłaszczony proces nie powinien właśnie w tym momencie dokończyć swojej fazy na procku.
Proszę o pomoc i z góry dziękuję za wszelkie sugestie :) :) :)
Pozdrawiam!