*
* 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[i].type != E820_RAM)
continue;
start = PFN_UP(e820.map[i].addr);
end = PFN_DOWN(e820.map[i].addr + e820.map[i].size);
if (start >= end)
continue;
if (end > max_pfn)
max_pfn = end;
}
}
请问红色部分条件判断目的是什么?宏PFN_UP和PFN_DOWN分别求地址所在页框的下一页和当前页框号。如果e820.map.addr 和 e820.map.addr + e820.map.size 表示的地址在同一个页框,或者分别在两个连续的页框里,这时start分别大于等于end,岂不是就直接跳过去了?但这时的end也有可能就是最高可用页框号啊!对这一点很迷惑,请各位指点,不甚感激!
对于这种代码量如此之大的分析研究,最好是先整块整块的看,知道它的运行原理比看明白它每一行代码要重要的多,毕竟,你完全明白代码后,可能过两天又变了。而你明白原理之后,不过是算法上的不同而已,自己觉得看着不爽的,大可自己实现一个同样功能的。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。