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); } }
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"; } }