虚拟内存分段中堆的起始地址与偏移量计算问题?

【操作系统导论】里有个虚拟内存转物理内存怎么计算的例子,没太明白,有没有懂行的给指点迷津。
背景:基址加界限机制 + 虚拟内存分段

假如有一个堆中的地址,虚拟地址是4200。如果用虚拟地址4200加上堆的基址(34KB),得到物理地址39016,这不是正确的地址。我们首先应该先减去堆的偏移量,即该地址指的是这个段中的哪个字节。因为堆从虚拟地址4K(4096)开始,4200的偏移量实际上是4200减去4096,即104,然后用这个偏移量(104)加上基址寄存器中的物理地址(34KB),得到真正的物理地址34920

问题:

  1. “因为堆从虚拟地址4K(4096)开始” ——堆的地址不是从低地址到高地址吗?
  2. 还有4k = 4096,4200 >4096,这里系统进行扩容了吗?

我看书里、还有网上的一些文章里对堆的描述也是,地址是从低位到高位。

阅读 616
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏