我在理解 FIFO和LRU 时遇到了一些麻烦,并且尝试将代码更改为这些代码。
这是我的默认pageFault方法:
private void pageFault(int pageNumber){
pageFaults++;
try {
pageFile.seek(pageNumber*PageSize);
for(int b=0;b<PageSize;b++)
RAM[freePos*PageSize+b]=pageFile.readByte();
} catch (IOException ex) {
Logger.getLogger(MemoryManager.class.getName()).log(Level.SEVERE, null, ex);
}
pageTable[pageNumber] = freePos;
freePos++;
}
该方法工作完美,但是我不确定如何使它成为FIFO和LRU,如下所示:
私有无效pageFaultFIFO(int pageNumber);
私有无效pageFaultLRU(int pageNumber);
最佳答案
让您清除对FIFO和LRU的了解。
先进先出
操作系统会跟踪队列中内存中的所有页面,最新的到达位置在后面,而最早的到达位置在前面。当需要替换页面时,将选择队列最前面的页面(最旧的页面)。 FIFO价格便宜且直观,但在实际应用中却表现不佳。
例如。
如果您有10双鞋子,而您的妈妈说要扔掉5只鞋子,那么您将选择最旧的5只扔掉。
LRU:
LRU的想法是,在过去的几条指令中使用最频繁的页面也很可能在接下来的几条指令中被频繁使用。
例如。
在这里,如果您有10双鞋子,而您的妈妈说要扔掉5只鞋子,那么您会选择这5双鞋子来扔掉,您不常使用。
关于java - 如何将此功能调整为FIFO和LRU?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26603903/