示例#1
0
 /**
  * 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]);
 }
示例#2
0
 /**
  * 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);
 }