作者回复: 回答的很赞!
作者回复: TLB 缓存的直接是物理页号,也就是经过所有页表查询后得到的结果。这个结果再配合虚拟地址中的页偏移信息,就可以的到目标数据的物理地址。
作者回复: 是的
作者回复: 这块内容也可以参考 CSAPP 等书籍哈。
作者回复: 是的,VAS 实际上是就是由页表维护的一个“虚拟”的地址空间。页表的数据本身会被存放在磁盘上,随着页面的查询而不断从磁盘载入到内存中。申请内存时通常会让虚拟内存区域映射到“匿名文件”这种类型的对象上,同时更新页表标记某几个页是驻留在内存中的,从而不会产生磁盘与内存之间的实际数据交换过程。
作者回复: 这是个好问题,实际上这里我们有一个隐含条件就是页表的大小为 4KiB,PTE 大小为 4 字节,即拥有 1024 个表项。这样每个 PTE 就负责映射 2^32 / 1024,即 4MiB 的大小。我来修改一下文章。
作者回复: 这里的“虚拟页内容”指的是虚拟页中存放的数据内容,实际上就是程序使用到的数据。当然,与页表自身相关的数据结构,也是被维护在内存中的,这部分属于操作系统内核数据。
作者回复: 没错,对于大多数体系比如 x86-64 和 ARMv8 来说是这样的,但也有支持完整 64 位虚拟地址的体系,比如 Oracle SPARC 的某些型号。