void StdMemoryOS::attemptToEmptyQueue(ulong vaddr, ulong phPage) { // attempt a bypass long vPage = GMemorySystem::calcPage(vaddr); std::vector<MemRequest *>::iterator it = pendingReqs.begin(); if(it != pendingReqs.end()) { MemRequest *mm = *it; long tmpPage = GMemorySystem::calcPage(mm->getVaddr()); if(vPage == tmpPage) { launchReq(mm, GMemorySystem::calcPAddr(GMemorySystem::calcFullPage(vPage), mm->getVaddr())); it = pendingReqs.erase(it); } else it++ ; } // wakeup the next request if(!pendingReqs.empty()) { MemRequest *thisReq = pendingReqs.front(); pendingReqs.erase(pendingReqs.begin()); serviceRequest(thisReq); } }