xv6 kmem这个全局变量,是在何时通过什么函数初始化的?初始化后,内存中大部分字节存储的数据是什么,是0吗?[10%]
时间: 2024-01-24 13:19:45 浏览: 71
kmem问题造成K8S中pod内存溢出
在xv6中,`kmem`是一个指向`struct run`结构体的指针数组,用于管理内核使用的物理内存页。该变量在操作系统启动时通过`kinit`函数进行初始化,具体过程如下:
1. `kinit1`: 将物理内存划分为多个大小相等的页框,将每个页框对应的`struct run`结构体插入到空闲列表中。
2. `kinit2`: 遍历内存中的所有页表,将已经被占用的物理页从空闲列表中删除。
3. `kmeminit`: 将`kmem`指向空闲列表中的第一个`struct run`结构体,表示内核可用内存的起始地址。
在初始化后,`kmem`中存储的是物理内存页的信息,每个`struct run`结构体表示一个空闲的物理页,包含一个指向下一个空闲页的指针。因为`kmem`只是一个指针数组,不是一个真正的内存区域,所以在初始化后,`kmem`数组中存储的数据并不是0。
阅读全文