Esempio n. 1
0
        //Funkcja wywołująca się raz na kwant czasu, odpowiada za wykonywanie zadań
        public void WykonajKrok()
        {
            //Żadne z zadań nie otrzymało kwantu czasu w tym cyklu
            foreach (Podzadanie podzad in PrzypisaneZadania)
            {
                podzad.CzyOtrzymano = 0;
            }
            //Licznik zadań zakończonych w tym przebiegu. Wykorzystywany przy wyznaczaniu zadań które można obsługiwać.
            int licznikzadanzakonczonych = 0;


            //Zadanie któremu przyporządkujemy kwant czasu
            int j = 0;
            //Maksymalna pozycja zadania do którego możemy się odwołać
            int makszadid = Math.Min(PrzypisaneZadania.Count(), PotencjalRownobieznegoPrzetwarzania) - 1;

            for (int i = 0; i < MocObliczeniowa; i++)
            {
                //Makszadid może być mniejsze od 0 tylko jeśli ukończyliśmy już w danym przebiegu tyle zadań ile wynosi potencjał równobieżnego przetwarzania
                if (PrzypisaneZadania.Count() > 0 && makszadid >= 0)
                {
                    Podzadanie zadanieWykonywane = PrzypisaneZadania.ElementAt(j);
                    bool       zakonczone        = NadajKwant(zadanieWykonywane);
                    if (zakonczone)
                    {
                        WykonaneKwantyCzasu += zadanieWykonywane.WymaganyCzasPrzetwarzania;
                        licznikzadanzakonczonych++;
                        //Wyrzucamy podzadanie z węzła
                        PrzypisaneZadania.RemoveAt(j);
                        ObliczWspolczynnikObciazenia();
                        //Jeśli usuwamy zadanie musimy zmniejszyć iterator o 1 aby niczego nie przeskoczyć. Możemy to zrobić nawet jeśli zadanie było zerowe - za chwilę i tak podniesiemy j o 1
                        j--;
                        //Od potencjału równobieżnego przetwarzania odejmujemy ilość ukończonych zadań tak aby nagle nie pojawiło nam sięnowe.
                        makszadid = Math.Min(PrzypisaneZadania.Count(), (PotencjalRownobieznegoPrzetwarzania - licznikzadanzakonczonych)) - 1;
                    }

                    if (j >= makszadid)
                    {
                        j = 0;
                    }
                    else
                    {
                        j++;
                    }
                }
            }


            for (int i = 0; i < PrzypisaneZadania.Count(); i++)
            {
                Podzadanie zadanieWykonywane = PrzypisaneZadania.ElementAt(i);
                if (zadanieWykonywane.CzyOtrzymano == 0)
                {
                    zadanieWykonywane.krok(false);
                }
            }
        }
Esempio n. 2
0
 public void ObliczWspolczynnikObciazenia()
 {
     WspolczynnikObciazenia = (System.Convert.ToDouble(PrzypisaneZadania.Count()) / System.Convert.ToDouble(MocObliczeniowa));
 }