public void agregaTableMap(int paginas, int proceso) { pageMapTable tablaProce = new pageMapTable(proceso); tablaProce.agregaPaginas(paginas); for (int i = 0; i < paginas; i++) { tablaProce = cargaAmemoria(i, tablaProce, proceso); } mainDataTables.Tables.Add(tablaProce.getPageTable()); }
public int[] leeDireccion(int virtualAddres, int numProceso, int tipo_accion) { DataTable tableProceso; int[] arrResultado = new int[3]; //arr[0]= pagina N arr[1]=direccion real arr[2]=marcoPagina int va_low, va_high, pa_low, direccion; tableProceso = mainDataTables.Tables["" + numProceso]; if (tableProceso == null) { Console.WriteLine("El proceso " + numProceso + " no existe"); return(arrResultado); } foreach (DataRow dataRow in tableProceso.Rows) { va_low = (int)dataRow["Virtual Address low"]; va_high = (int)dataRow["Virtual Address high"]; pa_low = (int)dataRow["Physical Address low"]; int pagina = (int)dataRow["Pagina"]; if (virtualAddres >= va_low && virtualAddres <= va_high) { if ((bool)dataRow["Is on Memory"] == true) { int posicion = virtualAddres - (int)dataRow["Virtual Address low"]; decimal d = pa_low / 16; int marcoPagina = Decimal.ToInt32(Math.Ceiling(d)); direccion = marcoPagina * 16 + posicion; arrResultado[0] = pagina; arrResultado[1] = direccion; arrResultado[2] = marcoPagina; } else { //Proceso de swap-in timestamp[numProceso] += TIME_CARGA; pageFaults[numProceso] += 1; pageMapTable dummyMap = new pageMapTable(-1); dummyMap.agregaPagina(pagina); dummyMap = cargaAmemoria(pagina, dummyMap, numProceso); DataTable tempTable = dummyMap.getPageTable(); dataRow["Physical Address low"] = dummyMap.getDirPA(pagina)[0]; dataRow["Physycal Address high"] = dummyMap.getDirPA(pagina)[1]; dataRow["Is on Memory"] = true; int posicion = virtualAddres - (int)dataRow["Virtual Address low"]; decimal d = (int)dataRow["Physical Address low"] / 16; int marcoPagina = Decimal.ToInt32(Math.Ceiling(d)); direccion = marcoPagina * 16 + posicion; arrResultado[0] = pagina; arrResultado[1] = direccion; arrResultado[2] = marcoPagina; Console.WriteLine("Se localizó la pagina " + arrResultado[0] + " del proceso " + numProceso); } if (tipo_accion == 1) { dataRow["Is modified"] = true; } else if (tipo_accion == 0) { dataRow["Is modified"] = false; } } } timestamp[numProceso] += TIME_ACCESO; return(arrResultado); }