# 地址空间

地址空间(address space)是qemu内存虚拟化的重要组成部分。不过这个模拟起来还真实有点复杂，也涉及到多个在qemu中关键的数据结构。

让我们一点点探索把。

## 从初始化开始

地址空间比较抽象，那我们就从初始化的地方开始吧。

[从初始化开始](https://richardweiyang-2.gitbook.io/understanding_qemu/00-as/01-initialization)

## MemoryRegion

初始化时首先遇到的一个数据结构是MemoryRegion，那就以这个为切入点看看地址空间的模拟方式。

[MemoryRegion](https://richardweiyang-2.gitbook.io/understanding_qemu/00-as/02-memoryregion)

## AddressSpace Part1

初始化时第二个遇到的数据结构就是AddressSpace了。可以说这是整个qemu地址空间模拟的中枢。

也正是因为这个是中枢，所以一次估计讲不完，咱就先讲一节。

[AddressSpace Part1](https://richardweiyang-2.gitbook.io/understanding_qemu/00-as/03-addressspace1)

## FlatView

随着细节的展开，又遇到了一个和AddressSpace相关的数据结构 -- FlatView。

[FlatView](https://richardweiyang-2.gitbook.io/understanding_qemu/00-as/04-flatview)

## RAMBlock

前几个数据结构都是用来描述地址空间的，现在就来看看虚拟的地址空间和真实的内存之间的对应关系 -- RAMBlock。

[RAMBlock](https://richardweiyang-2.gitbook.io/understanding_qemu/00-as/05-ramblock)

## AddressSpace Part2

讲完了FlatView和RAMBlock，这下可以回来补充AddressSpace的内容了。可以看看有了这两者后地址空间的样子。

[AddressSpace Part2](https://richardweiyang-2.gitbook.io/understanding_qemu/00-as/06-addressspace2)

## 眼见为实

是时候亲眼看一看地址空间中这些数据结构的样子了。

[眼见为实](https://richardweiyang-2.gitbook.io/understanding_qemu/00-as/07-witness)

## 添加MemoryRegion

现在我们对重要数据结构已经有了基本的概念，是时候动态得看看添加一个MemoryRegion时都发生了些什么了。

[添加MemoryRegion](https://richardweiyang-2.gitbook.io/understanding_qemu/00-as/08-commit_mr)
