public void semafor_waiting()
        {
            Proces x = semafor_list_waiting[0];

            semafor_list_waiting.RemoveAt(0);
            //zwróć proces do listy
        }
 /*obliczanie czasu procesow*/
 void oblicz_czas(Proces x)
 {
     if (x != null && x.czy_sprawdzony == false)
     {
         tau = Convert.ToInt32(a * x.proces_last_time + a * x.proces_estimated_time);
         x.proces_estimated_time = tau;
         x.czy_sprawdzony        = true;
     }
 }
 /*Odciecie 1 od wartosci semafora*/
 public void p_program(Proces x)
 {
     currentForm.SetText("SEMAFOR: Wykonuje program P semafora");
     /*kontynuuj*/
     if (value > 0)
     {
         /*Dostep do danych dla procesu z listy oczekujacych*/
         currentForm.SetText("SEMAFOR: Operacja P - przyznaje dostep do semafora");
         x.semafor_info = true;
     }
     else
     {
         /*nie ma mozliwosci dostepu do semafora - dodanie do listy oczekujacych*/
         currentForm.SetText("SEMAFOR: Operacja p -brak dostepu - dodaje proces na liste oczekujacych");
         semafor_list_waiting.Add(x);
     }
     value -= 1;
 }
        public void srt(List <Proces> grupy_procesow, Procesor cpu)
        {
            if (grupy_procesow.Count == 1)
            {
                proces_indeks = 0;
            }
            foreach (Proces x in grupy_procesow)
            {
                if (x.blocked == false && x.stopped == false)
                {
                    oblicz_czas(x);
                }
            }
            currentForm.SetText("SRT: Obliczone nowe czasy przewidywane do konca procesow");
            Proces run = grupy_procesow[proces_aktywny(grupy_procesow)];

            proces_indeks = min_czas(ref run, grupy_procesow);
            if (proces_indeks >= 0)
            {
                if (grupy_procesow[proces_indeks] != run)
                {
                    /*  uruchom nowy proces*/
                    run.running = false;
                    run.cpu_stan_zapisz(cpu);
                    run.czy_sprawdzony = false;
                    grupy_procesow[proces_indeks].running = true;
                    grupy_procesow[proces_indeks].cpu_stan_wczytaj(cpu);
                    currentForm.SetText("SRT: Uruchomiono proces o nazwie " + grupy_procesow[proces_indeks].proces_name);
                }
                else
                {
                    /*nie zmieniaj i kontynuuj stary*/
                    currentForm.SetText("SRT: Kontynuujemy proces o nazwie " + grupy_procesow[proces_indeks].proces_name);
                }
            }
            else
            {
                currentForm.SetText("SRT: Kontynuujemy proces o nazwie " + run.proces_name);
            }
        }
        /*wyszukiwanie minimalnego czasu procesu*/
        int min_czas(ref Proces a, List <Proces> grupy_procesow)
        {
            currentForm.SetText("SRT: Wyszukiwanie min czasu procesu");
            int min = a.proces_estimated_time;

            if (grupy_procesow.Count() > 0)
            {
                foreach (Proces p in grupy_procesow)
                {
                    if (min > p.proces_estimated_time && p.blocked == false && p.stopped == false)
                    {
                        min           = p.proces_estimated_time;
                        proces_indeks = grupy_procesow.IndexOf(p);
                    }
                }
            }
            else
            {
                currentForm.SetText("SRT: Nie ma zadnego procesu na liscie");
            }
            return(proces_indeks);
        }