Esempio n. 1
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. 2
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);
                }
            }
        }