我是Linux内核学习的新手。现在我正在阅读旧版本 2.4 的 Linux 内核代码。从书中,我知道在引导程序中激活了一个临时的 page_table,它将 PAGE_OFFSET ~ PAGE_OFFSET + 8M 和 0 ~ 8M 映射到物理 0 ~ 8M。但是在函数init_bootmem_core中,你可以看到代码:
bootmem_data_t *bdata = pgdat->bdata;
unsigned long mapsize = ((end - start)+7)/8;
pgdat->node_next = pgdat_list;
pgdat_list = pgdat;
mapsize = (mapsize + (sizeof(long) - 1UL)) & ~(sizeof(long) - 1UL);
bdata->node_bootmem_map = phys_to_virt(mapstart << PAGE_SHIFT);
bdata->node_boot_start = (start << PAGE_SHIFT);
bdata->node_low_pfn = end;
/*
* Initially all pages are reserved - setup_arch() has to
* register free RAM areas explicitly.
*/
memset(bdata->node_bootmem_map, 0xff, mapsize);
return mapsize;
mapstart等于内核后的第一个页码,并且没有映射到临时page_table中,如何使用“memset(bdata->node_bootmem_map,0xff,mapsize);” 在倒数第二行?