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); }