0x80200000
和内核访问的0x80200000
是同一个地址。这样好不好?如果只有一个程序在运行,那也无所谓。但很多程序使用同一个内存空间,就会有问题:怎样防止程序之间互相干扰,甚至互相搞破坏?比较粗暴的方式就是,我让用户程序访问的0x80200000
和内核访问的0x80200000
不是一个地址。但是我们只有一块内存,为了创造两个不同的地址空间,我们可以引入一个”翻译“机制:程序使用的地址需要经过一步”翻译“才能变成真正的内存的物理地址。这个”翻译“过程,我们用一个”词典“实现---给出翻译之前的地址,可以在词典里查找翻译后的地址。每个程序都有唯一的一本”词典“,而它能使用的内存也就只有他的”词典“所包含的。