Exemple #1
0
int unmap(mmu *m, int index, int instnnd){
  int re =  m->pageT[index].frameid;
  char instname[6];
  strcpy(instname, "UNMAP");
  PRINT_INST(instnnd, instname, index, re);

  resetPresent(&(m->pageT[index]));
  resetReference(&(m->pageT[index]));

  if (m->pageT[index].modified == 1){
    pageOut(m, index, instnnd, re); 
  }
  resetModified(&(m->pageT[index]));

  m->frames[re] = -1;
  m->frameN -= 1;
  resetFrameid(&(m->pageT[index]));

  m->unmaps_N += 1;

  return re;
}
Exemple #2
0
int BufferManager::findKey(int key) {
	int checked[4] = {0, 0, 0, 0};

	// Look for key in pages in memory
	for (int i = 0; i < 2; i++) {
		int pageNum = pageNums[i];
		checked[pageNum - 1] = 1;
		if (pages[i].findKey(key) != -1) { return i; }
	}

	// Look for key in pages on disk
	for (int i = 0; i < 4; i++) {
		if (checked[i] == 0) {
			int pageNum = i + 1;
			int index = selectVictim();
			pageOut(index);
			pageIn(index, pageNum);
			if (pages[index].findKey(key) != -1) { return index; }
		}
	}

	return -1;
}
Exemple #3
0
void BufferManager::shutDown() {
	// Flush pages to disk
	pageOut(0);
	pageOut(1);
}