Exemplo n.º 1
0
        public int Rech_first(processus proc)//retourne l'indice ou doit etre inseré proc
        {
            Boolean rech = true; int indice = 0;

            while ((rech) && (indice < list_zone_libre.Count))
            {
                if ((list_zone_libre[indice] / 1000 - proc.Get_taille()) > 0)
                {
                    rech = false;

                    indice = list_zone_libre[indice] % 1000;
                }
                else
                {
                    indice++;
                }
            }
            if (rech)
            {
                return(-1);
            }
            else
            {
                return(indice);
            }
        }
Exemplo n.º 2
0
        public int Rech_best(processus proc)//retourne l'indice de la partition ou doit etre insere proc
        {
            int        indice = 0;
            Boolean    rech   = true;
            List <int> liste  = new List <int>();

            foreach (int j in list_zone_libre)
            {
                liste.Add(j);
            }
            liste.Sort();
            while ((rech) && (indice < liste.Count))
            {
                if ((liste[indice] / 1000 - proc.Get_taille()) > 0)
                {
                    rech   = false;
                    indice = liste[indice] % 1000;
                }
                else
                {
                    indice++;
                }
            }
            if (rech)
            {
                return(-1);
            }
            else
            {
                return(indice);
            }
        }
 public bool Equals(processus other)
 {
     if (other == null)
     {
         return(false);
     }
     return(this.id.Equals(other.Get_id()));
 }
Exemplo n.º 4
0
        public void execute_process(int id, int rep)
        {
            processus pro = new processus("", id, 0, 0);

            pro = fifo.Find(x => x.Get_id() == id);
            fifo.Remove(pro);
            pro.Set_part(rep);
            en_cours.Add(pro);
        }
Exemplo n.º 5
0
        public void occ_part(partition pr, processus proc, int tai)
        {
            int num = list_rep.IndexOf(pr);

            list_rep[num].Set_vide(false);
            list_rep[num].Set_id(proc.Get_id());
            // pr.f_proc.Add(proc);
            list_zone_libre.Remove(num + pr.Get_taille() * 1000);
            this.frag = frag + (list_rep[num].Get_taille() - tai);
        }
Exemplo n.º 6
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());
                }
            }
        }
Exemplo n.º 7
0
        public int Rech_worst(processus proc)
        {
            //int indice = 0;
            List <int> liste = new List <int>();

            foreach (int j in list_zone_libre)
            {
                liste.Add(j);
            }
            liste.Sort();
            liste.Reverse();
            if (liste[0] / 1000 >= proc.Get_taille())
            {
                return(liste[0] % 1000);
            }
            else
            {
                return(-1);
            }
        }
Exemplo n.º 8
0
        public void ajout_process(int taille, int temp)
        {
            processus pro = new processus("process", fifo.Count + en_cours.Count + 1, taille, temp);

            fifo.Add(pro);
        }
Exemplo n.º 9
0
        /*public process_list()
         * {
         *
         *  int taille;
         *  int temps_ex;
         *  int id = 1;
         *  fifo = new List<processus>();
         *  en_cours = new List<processus>();
         *
         *  while (true)
         *  {
         *      Console.WriteLine("entrez les information de la processus");
         *      Console.WriteLine("taille==");
         *      taille = Convert.ToInt32(Console.ReadLine());
         *      Console.WriteLine("temps==");
         *      temps_ex = Convert.ToInt32(Console.ReadLine());
         *      if (taille == 0) break;
         *      processus pro = new processus(id++, taille, temps_ex);
         *      fifo.Add(pro);
         *  }
         * }*/


        /*public void une_file()      //ordonnancement par une seule file d'attente
         *
         * {
         *  int taille;
         *  int temps_ex;
         *  int id = 1;
         *
         *  fifo = new List<processus>();
         *  en_cours = new List<processus>();
         *  List<int> liste = new List<int>()
         *  RAM ram = new RAM(liste);
         *  int n; int t;
         *  Console.WriteLine("quel algorithme de recherche voullez vous utiliser?");
         *  Console.WriteLine("1)first_fit");
         *  Console.WriteLine("2)Next_fit");
         *  Console.WriteLine("3)Best_fit");
         *  Console.WriteLine("4)Worst_fit");
         *  n = Convert.ToInt32(Console.ReadLine());
         *
         *  while (true)
         *  {
         *      Console.WriteLine("entrez les information de la processus");
         *      Console.WriteLine("taille==");
         *      taille = Convert.ToInt32(Console.ReadLine());
         *      Console.WriteLine("temps==");
         *      temps_ex = Convert.ToInt32(Console.ReadLine());
         *      if (taille == 0) break;
         *      processus proc = new processus(id++, taille, temps_ex);
         *
         *      t = 0;
         *
         *      switch (n)
         *      {
         *          case 1:
         *              t = ram.Rech_first(proc);
         *              break;
         *          case 2:
         *              t = ram.Rech_best(proc);
         *              break;
         *          case 3:
         *              t = ram.Rech_worst(proc);
         *              break;
         *
         *      }
         *
         *
         *      if (t != -1)
         *      {
         *          if (ram.list_rep[t].G_vide() == true)
         *          {
         *              Console.WriteLine("une place a ete trouvé");
         *              proc.Set_etat(1);
         *              proc.Set_part(t);
         *              en_cours.Add(proc);
         *              ram.occ_part(ram.list_rep[t]);
         *          }
         *      }
         *      else { Console.WriteLine("ajoute a la fifo"); fifo.Add(proc); }
         *  }
         *  Console.WriteLine("*******La RAM :");
         *  ram.affich_ram();
         *  Console.WriteLine("*******les proce en cour d'execution****");
         *  afficher_encours();
         *  Console.WriteLine("fifo");
         *  afficher_fifo();
         *  System.Timers.Timer aTimer = new System.Timers.Timer();
         *  aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
         *  aTimer.Interval = 980;
         *  aTimer.Enabled = true;
         *  while (en_cours.Count == 0) ;
         *
         *  void OnTimedEvent(object source, ElapsedEventArgs e)
         *  {
         *      int part = 0;
         *      for (int i = 0; i < en_cours.Count; i++)
         *      {
         *          en_cours[i].Set_time(en_cours[i].Get_temps() - 1);
         *          if (en_cours[i].Get_temps() == 0)
         *          {
         *              part = en_cours[i].Get_part();
         *              Console.WriteLine("le processus:  " + en_cours[i].id + "  de taille:  " + en_cours[i].Get_taille() + "  est terminé");
         *              en_cours.Remove(en_cours[i]);
         *              ram.vider_part(ram.list_rep[part]);
         *              Console.WriteLine("Ram");
         *              Console.WriteLine("juste apres supression du processus en cours d'execution :");
         *              ram.affich_ram();
         *              afficher_encours();
         *              afficher_fifo();
         *
         *              if (fifo.Count == 0) { Console.WriteLine("FIN de la fifo"); }
         *              else
         *              {
         *                  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) { Console.WriteLine("le processus ne trouve pasde place "); }
         *                  while (t != -1)
         *                  {
         *                      Console.WriteLine(ram.list_rep[t].Get_taille());
         *                      fifo[0].Set_part(t);
         *                      en_cours.Add(fifo[0]);
         *                      fifo.Remove(fifo[0]);
         *                      ram.occ_part(ram.list_rep[t]);
         *                      if (fifo.Count == 0) { Console.WriteLine("FIN de la fifo"); break; }
         *
         *                      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;
         *
         *                      }
         *                  }
         *              }
         *              ram.affich_ram();
         *              afficher_encours();
         *              afficher_fifo();
         *          }
         *      }
         *  }
         * }
         */



        public void Add_Fifo(int taille, int delay)
        {
            processus p = new processus("P" + fifo.Count, id++, taille, delay);

            fifo.Add(p);
        }