内存寻址中的页表与虚拟内存中的页表

Page table in memory addressing vs page table in virtual memory

提问人:Yusuf 提问时间:10/10/2023 最后编辑:Yusuf 更新时间:10/10/2023 访问量:31

问:

内存寻址 = 概念,当操作系统为 CPU 提供要执行的进程时,它会为该进程分配一部分 RAM,并且 CPU 会为该部分生成虚拟地址。CPU 生成的虚拟地址与 RAM 上实际物理地址的映射关系存储在页表中

虚拟内存 = 将硬盘的一部分用作 RAM 的概念,使得 RAM 的大小看起来更适合处理。这里RAM地址和硬盘地址之间的映射也存储在页表中。

因此,页表在这两个概念中使用,具有不同的含义

因此,在存在虚拟内存且存在 5 个进程的方案中,此方案中存在 5(每个进程的本地)+ 1(在虚拟内存的操作系统级别)= 6 个页表。

如果我的理解正确,请告诉我。

提前致谢

操作系统 地址 虚拟内存

评论


答:

2赞 user22405329 10/10/2023 #1

在大多数技术文献中,“虚拟内存”意味着第一件事:它是虚拟地址和物理地址之间的转换。它用于将进程彼此隔离并与实际硬件隔离,并简化操作系统的内存管理。

虚拟内存由页表定义,该页表包含每个虚拟页的物理地址。它还包含其他参数:页面是可写的吗?可执行?它是仅内核的吗?它真的存在吗?替换页表会更改虚拟内存的映射 - 这就是操作系统在进程之间切换的方式。在大多数 CPU 体系结构中,页表格式由 CPU 决定 - 因为它由硬件读取。然而,软件驱动的系统也存在(臭名昭著的 - MIPS)。表格的内容由操作系统填写 - 它决定哪些地址将映射到什么。

每个进程通常都有自己的页表 - 尽管实际上没有什么可以阻止两个进程共享一个页表。实际上,在某些系统中,线程只是具有相同页表的进程。


第二件事通常称为“页面交换”,或简称为“交换”。我只在外行人的半营销材料中看到它被称为“虚拟记忆”。页面交换完全由操作系统在软件中完成:

  • 首先,页面从虚拟内存中取消映射 - 页面表中的记录被标记为“不存在”。然后,操作系统将物理页面存储在磁盘上。
  • 如果程序访问分页内存 - CPU 会触发页面错误,并跳转到操作系统代码。然后,OS 重新加载页面,并将其映射到页面表中。

磁盘和虚拟地址之间的映射完全是操作系统的问题 - 它可以使用任何内部数据结构。我从未听说过它被称为“页表”——但我想它并非完全不准确。大多数 CPU 还允许操作系统使用页表中的空记录 - 只要它不触及“不存在”位。

评论

0赞 Yusuf 10/10/2023
In most technical literature, "virtual memory" means the first thing: it is a translation between virtual addresses and physical addresses那么,当 CPU 生成进程内存部分的每个字节的内存寻址时,这个概念叫什么?在同一个概念中,我在某处了解到 32 位 CPU 无法寻址超过 4 GB 的内存。请让我理解
0赞 Yusuf 10/10/2023
在阅读了您的答案和其他互联网资源后,事情非常复杂,在不同的地方使用不同的术语,将尝试理解歧义。同时,您能否为面试推荐一些学习操作系统的好材料(深入,但不如操作系统工程师,而是后端软件工程师)
1赞 user22405329 10/10/2023
@Yusuf 如果是关于虚拟地址的 - 通常使用“地址转换”一词。否则,使用一般的“寻址”。32 位 CPU 的情况并不完全正确 - 有 CPU,具有 32 位虚拟地址,但具有 36 位物理地址。因此,他们可以访问 64GB 的 RAM(但每个进程只有 4GB)。