Example #1
0
        public void rempalcementLru(List <EntreeTablePage> tablePages, int adressePhysique, RamVirtuelle ram, DiskDur hdd)
        {
            if (ram.getNombrepagesLibres() == 0) //remplacement
            {
                int             indRam = fileLru.Dequeue();
                EntreeTablePage tmp    = new EntreeTablePage();

                tmp = tablePages.Find(e => e.getPageCorrespandante() == indRam && e.getDisponible() == true);
                tmp.setDisponible(false);
                tmp.setDirty(false);
                int entree = tablePages.FindIndex(x => x.getPageCorrespandante() == adressePhysique);
                tablePages[entree].setDisponible(true);
                tmp.setPageCorrespandante(hdd.tableAuxiliere[indRam]);
                hdd.tableAuxiliere[indRam] = tablePages[entree].getPageCorrespandante();
                tablePages[entree].setPageCorrespandante(indRam);
            }
            else
            {
                int ipage = 0;
                ipage = ram.listPages.FindIndex(p => p.getVide() == true);
                int entree = tablePages.FindIndex(x => x.getPageCorrespandante() == adressePhysique);
                tablePages[entree].setDisponible(true);
                tablePages[entree].setPageCorrespandante(ipage);
                hdd.tableAuxiliere[ipage] = adressePhysique;
                ram.listPages[ipage].setVide(false);
                ram.setNombrePagesLibres(ram.getNombrepagesLibres() - 1);
            }
        }
Example #2
0
 public void remplacementLfu(List <EntreeTablePage> tablePages, int adressePhysique, RamVirtuelle ram, DiskDur hdd)
 {
     if (ram.getNombrepagesLibres() == 0) //remplacement
     {
         int[]           lf     = lfu.Find(l => l[1] == lfu.Min(f => f[1]));
         int             indRam = lf[0];
         EntreeTablePage tmp    = new EntreeTablePage();
         tmp = tablePages.Find(e => e.getPageCorrespandante() == indRam && e.getDisponible() == true);
         tmp.setDisponible(false);
         tmp.setDirty(false);
         int entree = tablePages.FindIndex(x => x.getPageCorrespandante() == adressePhysique);
         tablePages[entree].setDisponible(true);
         tmp.setPageCorrespandante(hdd.tableAuxiliere[indRam]);
         hdd.tableAuxiliere[indRam] = tablePages[entree].getPageCorrespandante();
         tablePages[entree].setPageCorrespandante(indRam);
         lfu.Remove(lf);
         lfu.Add(new int[] { indRam, 0 });
     }
     else
     {
         int ipage = 0;
         ipage = ram.listPages.FindIndex(p => p.getVide() == true);
         int entree = tablePages.FindIndex(x => x.getPageCorrespandante() == adressePhysique);
         tablePages[entree].setDisponible(true);
         tablePages[entree].setPageCorrespandante(ipage);
         hdd.tableAuxiliere[ipage] = adressePhysique;
         ram.listPages[ipage].setVide(false);
         ram.setNombrePagesLibres(ram.getNombrepagesLibres() - 1);
         lfu.Add(new int[] { ipage, 0 });
     }
 }
        private void dessin(int r)
        {
            int pVictime = 0;

            switch (etape)
            {
            case 0:
                if (tablePages[r].getDisponible() == false)
                {
                    champTPages.Text = "page non disponible dans la memoire centra (bit de disponibilité a 0)donc defaut de page";
                    etape            = 1;
                }
                break;

            case 1:
                if (ram.getNombrepagesLibres() == 0)
                {
                }
                else
                {
                    etape = 2;
                }
                break;

            case 2:
                champRam.Text = "il existe des cases libres dans la ram,choix d'une case libre";
                break;
            }
            if (tablePages[r].getDisponible() == false && ram.getNombrepagesLibres() == 0)
            {
                switch (choixAlgorithme.SelectedIndex)
                {
                case 0:
                    pVictime = systemExploitation.fileLru.Peek();
                    break;

                case 1:
                    pVictime = systemExploitation.fifo.Peek();
                    break;

                case 2:
                    pVictime = systemExploitation.lfu.Find(l => l[1] == systemExploitation.lfu.Min(f => f[1]))[0];
                    break;

                case 3:
                    affichMatriceAging();
                    pVictime = systemExploitation.aging.FindIndex(s => s == systemExploitation.aging.Min());
                    break;
                }
                champRam.Text = "Swap out de la page" + pVictime.ToString();
            }

            if (tablePages[pVictime].getDirty() == true)
            {
                champRam.Text += "\n reecriture de la page dans la memoire secondure";
            }
        }