xv6 riscv 的内存布局

2022-09-02  本文已影响0人  sarto

内核内存布局

image.png

(1)xv6 默认使用了分配了 128M 内存,都用在哪里了?
(2)KENBASE 之下是什么,占用物理内存吗?
(3)PHYSTOP 之上占用物理内存吗?

首先,有两个概念,一是物理内存,二是地址空间地址空间是一个虚拟的概念,物理内存会放入地址空间中(根据架构不同,并不是从 0 开始放置)。

先深入理解 KERNBASE 的含义

image.png

上图就是 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 设置的物理内存终止地址,实际上还可以访问更大的地址空间,只是这些地址空间上没有内存会报错。

上一篇下一篇

猜你喜欢

热点阅读