【操作系统导论】里有个虚拟内存转物理内存怎么计算的例子,没太明白,有没有懂行的给指点迷津。
背景:基址加界限机制 + 虚拟内存分段
假如有一个堆中的地址,虚拟地址是4200。如果用虚拟地址4200加上堆的基址(34KB),得到物理地址39016,这不是正确的地址。我们首先应该先减去堆的偏移量,即该地址指的是这个段中的哪个字节。因为堆从虚拟地址4K(4096)开始,4200的偏移量实际上是4200减去4096,即104,然后用这个偏移量(104)加上基址寄存器中的物理地址(34KB),得到真正的物理地址34920
问题:
- “因为堆从虚拟地址4K(4096)开始” ——堆的地址不是从低地址到高地址吗?
- 还有4k = 4096,4200 >4096,这里系统进行扩容了吗?
我看书里、还有网上的一些文章里对堆的描述也是,地址是从低位到高位。