求教内存页面调度的 aging(老化)算法
算法在NachOS下面实现
这是内存页面置换管理的构造函数涉及的代码:
MemManager::MemManager (int policy_in, int hbits_in)
{
.......
ASSERT(hbits > 0);
policy = PAGEREPL_AGING; //老化算法
hTimer = new Timer (PageTimer, 0, false);
history = new unsigned int[NumPhysPages];
memset (history, 0, sizeof (int) * NumPhysPages);
bitmask = (1 << hbits) - 1;
return;
}
这是在时间中断对页面信息更新下的函数中涉及的部分代码:
#ifdef CHANGE
unsigned int half = (unsigned int)((bitmask >> 1) + 1);
for (i = 0; i < NumPhysPages; i++) {
if(coreOwners[i]) {
history[i] = (history[i] >> 1);
if(coreOwners[i]->use) {
history[i] = history[i] | half;
coreOwners[i]->use = false;
}
}
}
#endif
这是缺页时候选择调出页面的部分代码:
unsigned int v_bitmask = 0xFFFF;
#ifdef CHANGE
int min=0;
for(int i=0;i<NumPhysPages;i++)
if(history[i]<history[min]||(history[i]==history[min]&&coreOwners[i]->dirty<coreOwners[min]->dirty))min=i;
victim=min; //victim为选中的页面号
#endif
break;
运行测试的结果非常失败,缺页频繁,读磁盘次数上万,(正常只有100多次)
请各位高手指点一下~不胜感激