Example #1
0
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);
    }
}