Ejemplo n.º 1
0
int _init(int n, size_t size)
{
	if (checkInitParameters(n, size) != TRUE) return -1;
	initManagerParams(n, size);
	initMemory();
	initPageTable();
	initSwap();

	return 0;
}
Ejemplo n.º 2
0
// Buffer Manager Interface Pool Handling
// ***************************************
RC initBufferPool(BM_BufferPool *const bm, const char *const pageFileName,
		  const int numPages, ReplacementStrategy strategy,
		  void *stratData)
{
  BM_Pool_MgmtData *mgmtData;
  int i;

  // Initialize Pool
  bm->pageFile= strdup(pageFileName);
  bm->numPages= numPages;
  bm->strategy= strategy;

  // Initialize Pool Mgmt Data
  mgmtData= MAKE_POOL_MGMTDATA();
  mgmtData->io_reads= 0;
  mgmtData->io_writes= 0;
  mgmtData->stratData.fifoLastFreeFrame= -1;
  mgmtData->stratData.lru_head= NULL;
  mgmtData->stratData.lru_tail= NULL;
  mgmtData->stratData.clockCurrentFrame= -1;
  openPageFile(bm->pageFile, &mgmtData->fh);
  initPageTable(&mgmtData->pt_head);

  // Create Pool pages and initialize them
  mgmtData->pool = MAKE_BUFFER_POOL(numPages);
  for (i=0; i<numPages; i++)
  {
    mgmtData->pool[i].dirty= FALSE;
    mgmtData->pool[i].fixCount= 0;
    mgmtData->pool[i].pn= NO_PAGE;
    
    // Add all frames in LRU list
    // representing free frame to use.
    appendMRUFrame(&mgmtData->stratData, &mgmtData->pool[i]);

    mgmtData->pool[i].clockReplaceFlag= TRUE;
  }
  bm->mgmtData= mgmtData;

  // Initialize thread lock
  pthread_mutex_init(&mgmtData->bm_mutex, NULL);

  RETURN(RC_OK);
}