start_kernel->setup_arch->paging_init->bootmem_init() 之 1
来源:互联网 发布:刺身盖饭 知乎 编辑:程序博客网 时间:2024/06/01 08:37
linux-2.6.14/arch/arm/mm/init.c
static void __init bootmem_init(struct meminfo *mi)
{
struct node_info node_info[MAX_NUMNODES], *np = node_info;
unsigned int bootmap_pages, bootmap_pfn, map_pg;
int node, initrd_node;
bootmap_pages = find_memend_and_nodes(mi, np);
//计算内存页帧位码表所占页数的大小(这里只需用1页)
bootmap_pfn = find_bootmap_pfn(0, mi, bootmap_pages);
//计算存储页帧位码表的物理页号(这里为第 0x303ae 页)
initrd_node = check_initrd(mi);
map_pg = bootmap_pfn;
/*
* Initialise the bootmem nodes.
*
* What we really want to do is:
*
* unmap_all_regions_except_kernel();
* for_each_node_in_reverse_order(node) {
* map_node(node);
* allocate_bootmem_map(node);
* init_bootmem_node(node);
* free_bootmem_node(node);
* }
*
* but this is a 2.5-type change. For now, we just set
* the nodes up in reverse order.
*
* (we could also do with rolling bootmem_init and paging_init
* into one generic "memory_init" type function).
*/
np += num_online_nodes() - 1; // num_online_nodes() = 1
for (node = num_online_nodes() - 1; node >= 0; node--, np--) {
/*
* If there are no pages in this node, ignore it.
* Note that node 0 must always have some pages.
*/
if (np->end == 0 || !node_online(node)) {
if (node == 0)
BUG();
continue;
}
/*
* Initialise the bootmem allocator.
*/
init_bootmem_node(NODE_DATA(node), map_pg, np->start, np->end);
//将页帧位表内的所有页帧位码置为1
free_bootmem_node_bank(node, mi);
//将页帧位表内的所有页帧位码清0
map_pg += np->bootmap_pages;
/*
* If this is node 0, we need to reserve some areas ASAP -
* we may use bootmem on node 0 to setup the other nodes.
*/
if (node == 0)
reserve_node_zero(bootmap_pfn, bootmap_pages);
//将内存中已经使用的物理内存所对应的页帧位置为1
}
#ifdef CONFIG_BLK_DEV_INITRD
if (phys_initrd_size && initrd_node >= 0) {
reserve_bootmem_node(NODE_DATA(initrd_node), phys_initrd_start,
phys_initrd_size);
initrd_start = __phys_to_virt(phys_initrd_start);
initrd_end = initrd_start + phys_initrd_size;
}
#endif
BUG_ON(map_pg != bootmap_pfn + bootmap_pages);
}
- start_kernel->setup_arch->paging_init->bootmem_init() 之 1
- start_kernel->setup_arch->paging_init->bootmem_init() 之 2
- start_kernel->setup_arch->paging_init->bootmem_init() 之 3
- start_kernel->setup_arch->paging_init->bootmem_init() 之 4
- start_kernel->setup_arch->paging_init-->free_area_init_node 之 1
- start_kernel->setup_arch->paging_init-->free_area_init_node 之 2
- start_kernel->setup_arch->paging_init->alloc_bootmem_low_pages
- start_kernel->setup_arch->paging_init->memtable_init
- start_kernel->setup_arch->paging_init->memtable_init-->create_mapping
- setup_arch之paging_init函数
- start_kernel->setup_arch->request_standard_resources
- (二)start_kernel分析二---之setup_arch()函数分析
- Linux内存分析(4) -- paging_init (setup_arch部分)
- start_kernel 之 1
- bootmem_init
- paging_init()
- paging_init()
- 核心游记之 setup_arch
- matlab unique找出矩阵中不同元素
- 美元指数升至七周高点 短期仍有上涨动能
- java 方法的远程调用rmi
- test
- 万昌科技董事长高庆昌系跳楼自杀
- start_kernel->setup_arch->paging_init->bootmem_init() 之 1
- java访问者模式
- 静态库和动态库
- The credentials you provided during SQL Server 2008 install are invalid.
- 分布式管理:DB2 深度压缩,第 2 部分
- 十分锻炼从c++ ,以及 敲码用法的题目
- Linux下cfsetospeed和cfsetispeed函数
- loadrunner自带示例站点WebTours打不开的解决方法
- netbeans 进度条