/** * Administrador de memoria para leer un nodo desde disco, si el bloque que almacena al nodo esta * en memoria principal lo lee de él, si no, copia el bloque correspondiente a memoria principal. * * @param filePos Posicion en el archivo donde se encuentra el nodo a leer * @return Nodo leido desde disco * @throws IOException */ private RNode readAdmin(Long filePos) throws IOException { int i; for (i = 0; i < numOfBuffers; i++) if (thisBlock[i] == filePos) { improvePriority(i); return new RNode(buffer[i]); } // Si no esta en memoria i = bufferPrior[numOfBuffers - 1]; if (bufModified[i]) writeBlock(i); readBlock(filePos, i); improvePriority(i); return new RNode(buffer[i]); }
/** * Administrador de memoria para guardar un nodo, guarda en el bloque que corresponde el nodo que * recibe como parametro, si el bloque esta en memoria principal lo guarda directamente, de lo * contrario lo carga desde memoria secundaria y el bloque completo queda en memoria. * * @param nodo nodo que queremos guardar, sera guardado de acuerdo a sus paremetros getFilePos y * getPagePos * @throws IOException */ private void writeAdmin(RNode nodo) throws IOException { long fPos = nodo.getMyfPos(); int i; for (i = 0; i < numOfBuffers; i++) { if (fPos == thisBlock[i]) { writeNode(nodo, i); return; } } // Guardo el bloque con peor prioridad a memoria secundaria si fue modificado, // si no lo fue solo lo sobreescribo i = bufferPrior[numOfBuffers - 1]; if (bufModified[i]) writeBlock(i); readBlock(fPos, i); writeNode(nodo, i); }