技术开发 频道

虚拟内存机制浅析

  3. 其它考虑

  3.1

  虚拟内存到物理内存的映射表,可以有其它的实现方法。

  上面提到的32位的地址空间用了2级的映射表,如果地址空间扩展到64位,要如何实现?映射表要占用多少空间?

  其实有一种数据结构叫做Hash表,Oracle的buffer cache,library cache都用到了这个,是否有CPU用这种方式的映射表?

  3.2

  地址转换消耗其实是比较大的,CPU有一个专门用来Cache映射表的TLB,用硬件实现,加速地址转换。Cache无所不在。

  3.3

  x86的cpu即支持分页,也支持分段,分页是分段基础上的分页,为了简化,上面没有提。

  3.4

  物理内存如何管理?最简单的可以对物理内存的每一页做个位图映射。

  3.5

  每个进程都有自己的页表,进程越多,页表占用的总的空间越多。

  如果每个进程需要访问相同的物理内存,那么它们是否可以公用页表呢?

  比如Oracle的SGA,需要访问SGA的进程可能成百上千(假设1k),而SGA可能是相当大的(假设4G),导致页表相当大(4M),如果每个进程都要自己的页表,那么这些进程的页表占用的空间就要4G(1k*4M),而其实它们的页表的内容应当是一样的,操作系统是否会对这种情况做一个优化呢?

0
相关文章