📜  操作系统中的反转页表

📅  最后修改于: 2021-09-28 10:07:03             🧑  作者: Mango

先决条件——分页、页表条目、分段
大多数操作系统为每个进程实现一个单独的分页表,即对于在多处理/分时操作系统上运行的“n”个进程,内存中存储了“n”个分页表。有时当一个进程的大小非常大并且它占用虚拟内存时,随着进程的大小,它的页面表大小也会大大增加。

Example: A process of size 2 GB with:
Page size = 512 Bytes
Size of page table entry = 4 Bytes, then
Number of pages in the process = 2 GB / 512 B = 222
PageTable Size = 222 * 22 = 224 bytes

通过这个例子可以得出一个结论,对于一个OS中同时运行的多个进程,相当一部分内存只被页表占用。

操作系统还结合了多级分页方案,这进一步增加了存储页表所需的空间,并投入了大量内存来存储它们。页表占用的内存量可能会产生巨大的开销,并且总是不可接受的,因为主内存始终是一种稀缺资源。为了有效地利用内存并在多道程序水平和有效的 CPU 利用率之间保持良好的平衡,人们做出了各种努力。

倒排页表 –
另一种方法是使用反向页表结构,该结构由主存储器每一帧的一个页表条目组成。所以倒置页表中页表项的数量减少到物理内存中的帧数,并使用单个页表来表示所有进程的分页信息。

通过倒排页表,消除了为每个进程存储单独页表的开销,并且只需要固定部分的内存来存储所有进程的分页信息。这种技术被称为反向分页,因为索引是根据帧号而不是逻辑页号完成的。页表中的每个条目都包含以下字段。

  • 页码——它指定了逻辑地址的页码范围。
  • Process id –倒排页表包含所有正在执行的进程的地址空间信息。由于两个不同的进程可以具有相似的虚拟地址集,因此有必要在反转页表中存储每个进程的进程 ID,以唯一标识其地址空间。这是通过使用 PId 和页码的组合来完成的。因此,此进程 ID 充当地址空间标识符,并确保特定进程的虚拟页面正确映射到相应的物理帧。
  • 控制位——这些位用于存储额外的寻呼相关信息。这些包括有效位、脏位、参考位、保护和锁定信息位。
  • 链式指针——有时两个或多个进程可能共享主内存的一部分。在这种情况下,两个或多个逻辑页映射到同一个页表条目,然后使用链接指针将这些逻辑页的详细信息映射到根页表。

工作 –反转页表的操作如下所示。

CPU 生成的虚拟地址包含字段,每个页表条目包含分页相关机制所需的其他相关信息。当发生内存引用时,内存映射单元会匹配这个虚拟地址,并在倒页表中查找匹配,得到相应的帧号。如果在第 i条目处找到匹配,则将进程的物理地址作为真实地址发送,否则如果未找到匹配,则生成分段错误。

注意:反转页表中的条目数 = 物理地址空间(PAS)中的帧数

示例 –反转页表及其变体在 PowerPC、UltraSPARC 和 IA-64 体系结构等各种系统中实现。在 RT-PC 上实现 Mach 操作系统也使用了这种技术。

的优点和缺点:

  • 减少内存空间 –
    反转页表通常将存储页表所需的内存量减少到物理内存的大小限制。最大条目数可以是物理内存中的页框数。
  • 更长的查找时间——
    倒转页表按帧号顺序排序,但内存查找是根据虚拟地址进行的,因此,通常需要更长的时间才能找到合适的条目,但通常这些页表是使用哈希数据结构实现的更快的查找。
  • 困难的共享内存实现——
    由于反向页表为每个帧存储一个条目,因此很难在页表中实现共享内存。链接技术用于将多个虚拟地址映射到按帧号顺序指定的条目。