xv6 riscv 的内存布局
2022-09-02 本文已影响0人
sarto
内核内存布局
image.png(1)xv6 默认使用了分配了 128M 内存,都用在哪里了?
(2)KENBASE 之下是什么,占用物理内存吗?
(3)PHYSTOP 之上占用物理内存吗?
首先,有两个概念,一是物理内存
,二是地址空间
。地址空间
是一个虚拟的概念,物理内存
会放入地址空间中(根据架构不同,并不是从 0 开始放置)。
先深入理解 KERNBASE
的含义
上图就是 riscv sv39 的物理地址空间,在这个地址空间上,KERNBASE
之下的地址空间,用于一些硬件 IO 接口,而KERNBASE 及以上的地址空间,用于物理内存。所以在 xv6 里,物理内存的地址并不是从 0 开始的,而是从 KERNBASE 开始的。
理解 PHYSTOP
的含义
#define PHYSTOP (KERNBASE + 128*1024*1024)
xv6 对 PHYSTOP 的定义是 KENBASE + 128M。
KERNBASE 指的是物理内存的起始地址,所以 PHYSTOP 就是 xv6 的物理内存终止地址。因为整个地址空间有 2^56 -1
。远大于 PHYSTOP。所以其他区域属于地址空间保留区域(无效),在整个 xv6 系统中寻址都不应该寻址到这些保留区域上。
回答第一个问题
(1)xv6 的 128 M 内存用在了哪里
答: 用在了内核代码段,内核数据段,用户程序代码段,数据段,用户栈,内核栈,蹦床代码等,总的来说就是由 kalloc 管理的加上启动时内核代码占用的那一部分。
(2)KERNBASE 之下是什么,占用物理内存吗
答:不占用,KERNBASE 之下是其他 IO 的地址空间,只是一个地址编号而已。
(3)PHYSTOP 之上占用物理内存吗
答: PHYSTOP 只是 xv6 设置的物理内存终止地址,实际上还可以访问更大的地址空间,只是这些地址空间上没有内存会报错。