public void une_file_rnd(RAM_fix ram, List <string> Derl)      //ordonnancement par une seule file d'attente
        {
            int t = 0;
            //n = 1;
            int part = 0;

            if (fifo.Count != 0)
            {
                t = 0;
                switch (n)
                {
                case 1:
                    t = ram.Rech_first(fifo[0]);
                    break;

                case 2:
                    t = ram.Rech_best(fifo[0]);
                    break;

                case 3:
                    t = ram.Rech_worst(fifo[0]);
                    break;
                }
                if (t != -1)
                {
                    Derl.Add(">>>> le processus <" + fifo[0].name + "> est ajouter a lemplacement <" + t + ">\n\n");
                    fifo[0].Set_part(t);
                    en_cours.Add(fifo[0]);
                    ram.occ_part(ram.list_rep[t], fifo[0], fifo[0].Get_taille());
                    //ram.list_rep[t].Set_id(fifo[0].Get_id());
                    fifo.Remove(fifo[0]);
                }
            }

            t = -1;
            for (int i = 0; i < en_cours.Count; i++)
            {
                if (en_cours[i] != null)
                {
                    en_cours[i].Set_time(en_cours[i].Get_temps() - 1);
                    if (en_cours[i].Get_temps() == 0)
                    {
                        Derl.Add("");
                        Derl[minute + 1] += ">>>> le processus <" + en_cours[i].name + "> est libere de lemplacement<" + en_cours[i].Get_part() + ">\n\n";
                        part              = en_cours[i].Get_part();
                        //finish(en_cours[i].Get_id());
                        ram.vider_part(ram.list_rep[part], en_cours[i].Get_taille());
                        finis++;
                        fini.Add(en_cours[i]);
                        en_cours.Remove(en_cours[i]);
                        i--;
                        if (fifo.Count != 0)
                        {
                            t = ram.Rech_first(fifo[0]);
                        }
                    }
                }
            }
            minute += 1;
        }
 public Page1(List <int> l, int cap, int un_p, int alg)
 {
     InitializeComponent();
     m       = new RAM_fix(l, cap);
     proc    = new process_list();
     un_plus = un_p;
     proc.Set_alg(alg);
 }
Пример #3
0
        public void add_process(int taille, int temps, RAM_fix ram)
        {
            List <int> liste = new List <int>();
            processus  proc;

            int j = 0;
            int i = 0;

            proc = new processus("pr" + id, id++, taille, temps);

            Boolean rech = true;

            i = 0;

            while (i < ram.list_rep.Count)
            {
                liste.Add(ram.list_rep[i].Get_taille() * 1000 + i);
                i++;
            }
            liste.Sort();
            i = 0;
            while ((rech) && (i < liste.Count))
            {
                if (liste[i] / 1000 >= proc.Get_taille())
                {
                    rech = false;
                }
                else
                {
                    i++;
                }
            }
            if (rech == false)//si on trouve la partition qui convient
            {
                j = liste[i] % 1000;
                proc.Set_part(j);
                if ((ram.list_rep[j].G_vide()) == false) //si elle est occupee
                {
                    ram.list_rep[j].f_proc.Add(proc);
                    fifo.Add(proc);
                }
                else//le processus  est ajoute a la liste des proc en cours d'execution
                {
                    proc.Set_etat(1);

                    en_cours.Add(proc);

                    ram.occ_part(ram.list_rep[j], proc, proc.Get_taille());
                }
            }
        }
Пример #4
0
        public void plusieurs_fifo(RAM_fix ram)   //ordonnancement des processus par la methode de +files
        {
            int i = 0;

            i = 0;
            int part = 0;

            for (i = 0; i < en_cours.Count; i++)
            {
                if (en_cours[i] != null)
                {
                    en_cours[i].Set_time(en_cours[i].Get_temps() - 1);
                    if (en_cours[i].Get_temps() == 0)
                    {
                        finis++;
                        fini.Add(en_cours[i]);
                        part = en_cours[i].Get_part();
                        //en_cours.Remove(en_cours[i]);
                        //ram.vider_part(ram.list_rep[part]);
                        if (ram.list_rep[part].f_proc.Count > 0)
                        {
                            en_cours[i] = ram.list_rep[part].f_proc[0];
                            fifo.Remove(ram.list_rep[part].f_proc[0]);
                            ram.list_rep[part].Set_id(en_cours[i].Get_id());
                            //ram.occ_part(ram.list_rep[part]);
                            ram.list_rep[part].f_proc.Remove(ram.list_rep[part].f_proc[0]);
                        }
                        else
                        {
                            //
                            ram.vider_part(ram.list_rep[part], en_cours[i].Get_taille());
                            en_cours.Remove(en_cours[i]); i--;
                        }
                    }
                }
            }
        }
Пример #5
0
        public void CreateACircle_2(RAM_fix mc, Canvas c)
        {
            c.Children.Clear();
            float x = 0;

            foreach (partition p in mc.list_rep)
            {
                int   i = 0;
                float y = 320;
                if (p.f_proc.Count != 0)
                {
                    int ps;
                    if (p.f_proc.Count > 7)
                    {
                        ps = 7;
                    }
                    else
                    {
                        ps = p.f_proc.Count;
                    }
                    Rectangle r = new Rectangle();
                    r.RadiusX = 20;
                    r.RadiusY = 20;
                    r.Fill    = new SolidColorBrush(Colors.Gray);
                    r.Width   = ps * 35 + 10;
                    r.Height  = 38;
                    c.Children.Add(r);
                    Canvas.SetLeft(r, y - 10);
                    Canvas.SetTop(r, x + 6);
                }

                foreach (processus pr in p.f_proc)
                {
                    Ellipse Circ = new Ellipse();
                    Circ.Height          = 30;
                    Circ.Width           = 30;
                    Circ.Stroke          = Brushes.Black;
                    Circ.StrokeThickness = 1;
                    Circ.Fill            = new SolidColorBrush(Color.FromRgb(pr.clr.R, pr.clr.G, pr.clr.B));
                    c.Children.Add(Circ);
                    Canvas.SetLeft(Circ, y - 2);
                    Canvas.SetTop(Circ, x + 10);
                    TextBlock nom = new TextBlock();
                    nom.Text       = pr.name;
                    nom.Foreground = new SolidColorBrush(Colors.Black);
                    nom.FontWeight = FontWeights.UltraBold;
                    nom.Width      = 20;
                    nom.Height     = 20;
                    c.Children.Add(nom);
                    Canvas.SetTop(nom, x + 14);
                    Canvas.SetLeft(nom, y + 4);
                    Canvas.SetZIndex(nom, 1);
                    y = y + 35;
                    i++;
                    if (i == 7)
                    {
                        break;
                    }
                }

                x = x + (Convert.ToSingle(p.Get_taille()) * 435) / Convert.ToSingle(mc.Get_Capacity());
            }
        }