- 论坛徽章:
- 0
|
本帖最后由 agloom 于 2011-11-28 23:33 编辑
/*
* Find the highest page frame number we have available
*/
static void __init find_max_pfn(void)
{
int i;
max_pfn = 0;
for (i = 0; i < e820.nr_map; i++) {
unsigned long start, end;
/* RAM? */
if (e820.map.type != E820_RAM)
continue;
start = PFN_UP(e820.map.addr);
end = PFN_DOWN(e820.map.addr + e820.map.size);
if (start >= end)
continue;
if (end > max_pfn)
max_pfn = end;
}
}
请问:if (start >= end)
continue;
条件判断目的是什么?宏PFN_UP和PFN_DOWN分别求地址所在页框的下一页和当前页框号。如果e820.map.addr 和 e820.map.addr + e820.map.size 表示的地址在同一个页框,或者分别在两个连续的页框里,这时start分别大于等于end,岂不是就直接跳过去了?但这时的end也有可能就是最高可用页框号啊!对这一点很迷惑,请各位指点,不甚感激! |
|