页面 table 条目是否仅包含元数据?

Does a page table entry only contain metadata?

我正在尝试了解 OS 发生页面错误时如何在磁盘和 RAM 之间进行交换。例如,假设进程的页面 table 已满,需要进行交换。

页面 table 中的页面条目指向的框架是否写入磁盘本身,然后框架被请求的新数据覆盖?或者在这种情况下页面本身是否包含框架数据?

此外,如果两个虚拟地址可以映射到同一个物理地址(假设不是因为共享内存),那么写入帧中的数据是否属于它们所属的页面指向写入磁盘本身?

我的困惑来自于我正在阅读的书(以及许多在线资源)提到 'page' 被写入磁盘,但据我所知,该页面仅包含有关框架的元数据和地址而不是内存数据本身。那么,它究竟是如何工作的呢?

Does a page table entry only contain metadata?

是的。

通常有虚拟页面(软件看到的内容)、物理页面(硬件看到的实际 RAM 页面)和描述虚拟页面和物理页面之间关系的元数据(页面 table 条目) .

假设有 90 个虚拟页面(程序使用的数据)和 100 个物理页面(实际 RAM),其中:

   virtual page #0 = physical page #38
   virtual page #1 = physical page #22
   virtual page #2 = physical page #41
   ...
   virtual page #89 = physical page #12

请注意,此映射是存储在页面 table 条目中的元数据(粗略简化的版本)。

现在假设软件分配了一个新页面(这样就有91个虚拟页面被程序使用);并且 OS 决定没有足够的空闲物理内存页(因为 OS 需要确保有一点空闲物理内存供自己使用)所以它决定发送一个页面来交换 space。结果可能是:

   virtual page #0 = physical page #38
   virtual page #1 = NOT PRESENT (sent to swap space)
   virtual page #2 = physical page #41
   ...
   virtual page #89 = physical page #12
   virtual page #90 = physical page #73

现在假设一个程序试图使用虚拟页面 #1 中的数据。 CPU 无法确定数据在哪里(因为页面 table 中的元数据表明该页面不存在);所以它通知 OS。 OS 确定发生了什么(如果是软件错误或...)并决定将不同虚拟页面的数据存储在交换 space 中,以便它可以重新使用该物理页面来加载数据虚拟页 #1 到同一个物理页。结果可能是:

   virtual page #0 = physical page #38
   virtual page #1 = physical page #41
   virtual page #2 = NOT PRESENT (sent to swap space)
   ...
   virtual page #89 = physical page #12
   virtual page #90 = physical page #73

在此之后,需要来自虚拟页面 #1 的数据的软件可以继续(因为 CPU 现在可以找到数据 OS 更改了元数据)。