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; }
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; }
void BufferManager::shutDown() { // Flush pages to disk pageOut(0); pageOut(1); }