Esempio n. 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);
            }
        }
Esempio n. 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 });
     }
 }
Esempio n. 3
0
 public void creationTablePages(List <EntreeTablePage> tablePages, int taille, RamVirtuelle ram, DiskDur hdd)
 {
     for (int i = 0; i < taille; i++)
     {
         EntreeTablePage entreeTablePage = new EntreeTablePage();
         entreeTablePage.setPageCorrespandante(23 + hdd.getNombreCases());
         Case cas = new Case(entreeTablePage.getPageCorrespandante());
         hdd.cases.Add(cas);
         hdd.setNombreCases(hdd.getNombreCases() + 1);
         tablePages.Add(entreeTablePage);
     }
 }
Esempio n. 4
0
        public void gestionRequete(int typeRemplacement, List <EntreeTablePage> tablePages, int numeroPage, RamVirtuelle ram, DiskDur hdd)
        {
            EntreeTablePage entreeTablePage = Mmu.traductionAdresse(tablePages, numeroPage);

            if (entreeTablePage == null)
            {
                // acces page non alloué
            }
            else
            {
                if (entreeTablePage.getDisponible() == false) //defaut de page
                {
                    switch (typeRemplacement)
                    {
                    case 0:
                        rempalcementLru(tablePages, entreeTablePage.getPageCorrespandante(), ram, hdd);
                        fileLru.Enqueue(entreeTablePage.getPageCorrespandante());
                        break;

                    case 1:
                        remplacementFifo(tablePages, entreeTablePage.getPageCorrespandante(), ram, hdd);
                        fifo.Enqueue(entreeTablePage.getPageCorrespandante());
                        break;

                    case 2:
                        remplacementLfu(tablePages, entreeTablePage.getPageCorrespandante(), ram, hdd);
                        lfu.Find(l => l[0] == entreeTablePage.getPageCorrespandante())[1]++;
                        break;

                    case 3:
                        for (int i = 0; i < 5; i++)
                        {
                            aging[i] = aging[i] >> 1;
                        }
                        remplacementAging(tablePages, entreeTablePage.getPageCorrespandante(), ram, hdd);
                        break;
                    }
                    defautDePage++;
                }
                else
                {
                    switch (typeRemplacement)
                    {
                    case 0:
                        fileLru.SkipWhile(r => r == entreeTablePage.getPageCorrespandante());
                        fileLru.Enqueue(entreeTablePage.getPageCorrespandante());
                        break;

                    case 1:
                        break;

                    case 2:
                        lfu.Find(l => l[0] == entreeTablePage.getPageCorrespandante())[1]++;
                        break;

                    case 3:
                        for (int i = 0; i < 5; i++)
                        {
                            aging[i] = aging[i] >> 1;
                        }
                        aging[entreeTablePage.getPageCorrespandante()] += ((uint)(1 << 15));
                        break;
                    }
                    tablePages[numeroPage].setDirty(true);
                }
            }
        }