内核源码--------page_address_init();

来源:互联网 发布:罗兰电子鼓软件 编辑:程序博客网 时间:2024/06/06 20:33

回到start_kernel,进入到函数page_address_init();定位到该函数

void __init page_address_init(void)
{
int i;
for (i = 0; i < ARRAY_SIZE(page_address_htable); i++) 

{
INIT_LIST_HEAD(&page_address_htable[i].lh);
spin_lock_init(&page_address_htable[i].lock);
}
}

该函数中,初始化ARRAY_SIZE这个数组的元素,定位到page_address_htable

static struct page_address_slot {
struct list_head lh;/* List of page_address_maps */
spinlock_t lock;/* Protect this bucket's list */
} ____cacheline_aligned_in_smp page_address_htable[1<<PA_HASH_ORDER];

继续定位PA_HASH_ORDER

#define PA_HASH_ORDER 7

最终,初始化的目的是初始化128个链表,链表是双向循环链表。