很少有关于虚拟内存地址结构的查询

时间:2014-07-24 05:08:44

标签: operating-system computer-science virtual-memory

我正在参加加州大学伯克利分校关于虚拟记忆的一些讲座

@ https://www.youtube.com/results?search_query=computer+science+194+-+lecture+14

"计算机科学194-讲座13_内存管理_各种架构的机制,NUMA"和#34;计算机科学194 - 讲座14_虚拟内存管理,交换,页面缓存"

这是一场精彩的演讲。但是,我对某一点感到有些困惑。

讲座解释了如何组合分段和寻呼以解决VM问题。 它继续解释当前系统用作VM地址的结构。

它还提到进程可见的虚拟空间是私有的,每个进程的地址范围保持不变。每个进程查看其地址空间从0开始并延伸到4G。在这个4G空间内有不同的细分区域。

问题:

  1. 现在,如果每个VM空间的地址范围相同,那么两个进程如何引用最高级别的查找表 - PageTblPtr使用"段号"作为索引,唯一能够识别此表中的行...因为每个流程的段地址/编号可能相同...让我们说流程A和B都有从地址开始的数据段' x'在VM空间内。

  2. 这是否也意味着PagetblPtr中每个进程最多可以有6个条目 - 6个可能的段 - CS,DS,......等等?

  3. PageTblPtr在哪里维护?

  4. 最诚挚的问候, VARUN

1 个答案:

答案 0 :(得分:3)

我不打算观看83分钟的视频讲座,只是为了获得像PageTblPtr这样的术语的确切定义,但我会尝试提供一些一般性答案:

  • 现代操作系统不使用细分。它只是一个大的扁平地址空间,所有的段选择器都设置为包含整个事物。在64位模式下运行时,我不认为x86处理器甚至支持分段。
  • 每个进程都有自己的页表,该表定义了该进程的虚拟地址空间的映射。两个进程可以在同一虚拟地址上拥有不同的数据,因为它们各自的页表指向同一虚拟页面的不同物理页面。
  • 页面表由操作系统内核拥有和管理。当内核执行任务切换(改变它正在运行的进程)时,它必须做的一件事就是激活新进程的页面表而不是旧表。