在XV6系统中,通过kvmmake函数,创建了调度器所用的页表,并求出在创建页表过程中,总共调用了多少次kalloc函数分配4K物理块用于存放页表项?输出在 kvmmake函数中调用kalloc函数的次数
时间: 2023-06-23 22:09:12 浏览: 135
在XV6系统中,kvmmake函数用于创建调度器所用的页表。在创建页表的过程中,需要为每个页表项分配一个4KB的物理块。因此,需要多次调用kalloc函数来分配物理内存。具体调用次数取决于页表中包含的页表项数目。
在XV6中,每个页表包含1024个页表项,每个页表项占用4字节,因此每个页表占用4KB的物理内存。在kvmmake函数中,为了创建整个页表,需要创建多个页表,具体数量取决于系统的内存大小和物理内存管理的设置。
在kvmmake函数中,可以通过记录kalloc函数的调用次数来计算总共调用了多少次kalloc函数分配4K物理块用于存放页表项。具体代码如下:
```c
void kvmmake()
{
// other code
int kalloc_count = 0;
for(p1 = 0; p1 < PHYSTOP; p1 += PGSIZE){
p2 = P2V(p1);
if(p1 == 0){
// other code
} else if(p1 == 0x100000){
// other code
} else if(p1 == 0x200000){
// other code
} else {
pgdir_walk(pde_t *pgdir, const void *va, int alloc)
{
// other code
pte_t *pte;
if(pde & PTE_P){
pte = (pte_t*)P2V(PTE_ADDR(pde));
} else {
if(!alloc || (pte = (pte_t*)kalloc()) == 0)
return 0;
kalloc_count++; // 记录kalloc的调用次数
memset(pte, 0, PGSIZE);
// other code
}
// other code
}
// other code
}
}
cprintf("Total kalloc calls: %d\n", kalloc_count);
}
```
在上述代码中,我们定义了一个变量kalloc_count来记录kalloc函数的调用次数。在每次调用kalloc函数时,我们将kalloc_count加1。最终,我们输出kalloc_count的值,即为总共调用了多少次kalloc函数分配4K物理块用于存放页表项。
阅读全文