|
发表于 2006-11-22 15:37:52
|
显示全部楼层
gpt_t *gpt_init(void)
{
gpt_t *gpt;
dw_t i;
/* TRACE(T_PROCS); */
if ( gpt = gpt_mem_alloc() )
{
for (i = 0; i < ( 1ul << GPTROOTSIZE); i++) /* ??? */
{
/* Define a NULL_GUARD to signify an empty entry and cause a mismatch on lookup. */
gpt.guard = NULL_GUARD(WORDLEN,GPTROOTSIZE,i);
}
}
return (gpt_t *)((udw_t)gpt | 15);
}
gpt_t *gpt_mem_alloc(void)
{
gpt_t *p;
kernel_vars *k;
k = KERNEL_BASE;
if (k->gpt_free_list != 0)
{
p = (gpt_t *) (k->gpt_free_list);
k->gpt_free_list = p->u.ptr;
return p;
}
else
{
udw_t f;
f = (udw_t) k_frame_alloc();
if (f == 0)
{
panic("L4 PANIC: Page table memory pool exhausted"); /* ok */
}
for (p = (gpt_t *) f; (udw_t) p < f + FRAMESIZE; p += (1ul << GPTSIZE))
{
p->u.ptr = k->gpt_free_list;
k->gpt_free_list = (udw_t)p;
}
p = (gpt_t *) (k->gpt_free_list);
k->gpt_free_list = p->u.ptr;
return p;
}
}
其中k_frame_alloc()是分配1帧(4096bytes);
在上面打问号的一行
for (i = 0; i < ( 1ul << GPTROOTSIZE); i++) /* ??? */
由于前面 gpt = gpt_mem_alloc() 是给gpt分配了一个gpt_t结构,但是为什么在循环里会使用
gpt并循环8次(GPTROOTSIZE = 3)
谢谢哪位高手指点 |
|