- 论坛徽章:
- 3
|
回复 1# xingdajing
高低端内存划分过程:
1)内核将根据bios的信息中得到的物理RAM的大小。 x86, max_pfn = e820_end_of_ram_pfn();
2)取决于机器是32位还是64位:
· 32位机器将会执行find_low_pfn_range()
将会判断物理内存是否小于预定义的MAXMEM值(MAXMEM_PFN=VMALLOC_END-PAGE_OFFSET-__VMALLOC_RESERVE).
a)当小于该值时,所有实际物理内存都用做低端内存。但还判断用户是否需要设置高端内存来划分用户需要的内存做高端内存。
arch/x86/mm/init_32.c lowmem_pfn_init()
#ifdef CONFIG_HIGHMEM
if(highmem_pages >= max_pfn)
max_low_pfn -= highmem_pages; //最终确认的低端内存值.
b) 当大于MAXMEM_PFN值时, 部分内存溢出预定义的最大低端内存.
arch/x86/mm/init_32.c highmem_pfn_init()
如果用户没有要求高端内存的大小,则溢出部分做高端内存.
if(highmem_pages == -1)
highmem_pages = max_pfn - MAXMEM_PFN;
整个调用链 : setup_arch()---> find_low_pfn_range()---> low_mem_init()/high_mem_init(); |
|