【问题标题】:Virtual Memory and Virtual Address in LinuxLinux中的虚拟内存和虚拟地址
【发布时间】:2021-07-25 00:27:22
【问题描述】:

我目前正在研究操作系统中的虚拟内存,我有几个问题。

  1. 在 Linux 中交换分区或交换文件是否与虚拟内存相同?
  2. 如果是,那么如果我的 Linux 系统中没有启用交换,这是否意味着我的系统没有虚拟内存?
  3. 我还读到虚拟内存使系统更安全,因为使用虚拟内存,CPU 生成虚拟地址,然后由 MMU 将其转换为实际物理地址,从而保护系统,因为没有进程可以与实际物理内存进行实际交互。因此,如果我只在我的 Linux 系统上启用交换,我的 CPU 会开始生成虚拟地址,而目前它正在直接生成物理地址,因为我没有交换分区吗?
  4. CPU 如何知道虚拟内存是否存在?

【问题讨论】:

标签: linux operating-system virtual-memory


【解决方案1】:

没有交换文件/分区并不意味着您没有虚拟内存。无论如何,现代操作系统总是使用分页/虚拟内存。

交换分区或交换文件在 Linux 中是否与虚拟内存相同?

就任何操作系统而言,没有交换文件和虚拟内存都不相同。虚拟内存只是说所有内存访问都将由 MMU 使用页表进行转换。现代操作系统总是使用分页。

如果是,那么如果我的 Linux 系统没有启用交换,这是否意味着我的系统没有虚拟内存?

您的系统肯定有虚拟内存。要使用长模式(64 位模式),操作系统必须启用分页。我怀疑您的系统足够老而不能使用分页。页面交换到硬盘不是虚拟内存。它更像是虚拟内存的一个特性,可以用来扩展物理内存,因为不需要立即使用的页面可以暂时交换到硬盘上。

我还读到虚拟内存使系统更安全,因为使用虚拟内存,CPU 生成虚拟地址,然后由 MMU 将其转换为实际物理地址,从而保护系统,因为没有进程可以实际与实际物理内存交互。所以如果我只在我的 Linux 系统上启用交换,我的 CPU 会开始生成虚拟地址,而目前它正在直接生成物理地址,因为我没有交换分区?

您的计算机肯定启用了分页/虚拟内存。没有交换分区并不意味着您没有虚拟内存。分页也可用于避免 RAM 碎片和安全性。你是对的,分页正在保护你的系统,因为页表阻止一个进程访问另一个进程的内存。它还具有逐页的环特权,允许区分内核模式和用户模式代码。

CPU如何知道虚拟内存是否存在?

操作系统只是通过在控制寄存器中设置一个位来启用分页。然后 CPU 开始使用 MMU 盲目地翻译每个内存访问。

【讨论】:

  • 我认为这很有意义。它只是又提出了一个问题。我读到“当你的内存用完可用空间并且更高优先级的任务到达时,操作系统会将你的一些程序转移到虚拟内存并将更高优先级的任务带入主内存”。现在在 linux 中,“Linux 中的交换空间在物理内存 (RAM) 量已满时使用”
  • 那不是说交换空间和虚拟内存一样吗?你是说有两种类型的虚拟内存。一个,永远存在的虚拟内存来实现分页和保护,另一个虚拟内存是交换空间。当你的内存用完时,程序会被交换到哪里?
  • 我没有说你说的第一件事。操作系统不会将未使用的页面传输到虚拟内存。它将未使用的页面传输到硬盘。之所以可以这样做,是因为当前位是在逐页的基础上设置的,这与在分段基础上设置当前位的分段不同。如果内存访问尝试访问标记为不存在的页面,CPU 会引发页面错误,并且操作系统会将硬盘上的页面带到 RAM 或终止进程(如果内存访问不合法)。
  • 当物理内存已满时,操作系统会获取未使用的页面并将它们带到硬盘中,将它们标记为不存在于页表中。
【解决方案2】:

没有。交换文件与虚拟内存不同。

一旦固件/内核设置了必要的寄存器和/或内存中的数据结构并切换了处理器模式,虚拟内存映射就会用于访问物理内存。

是的,进程无法在没有映射的情况下引用内存位置,这允许内核采用隔离和访问控制机制。

通过主动映射,不同的虚拟地址可以在不同的时间映射到同一个物理内存区域。内核可以维持这样一种错觉,即比实际物理内存容量更大的内存可用,其中在任何给定时间只有虚拟内存的子集驻留在物理内存中。其余的存储在交换文件中。

对相应数据当前在交换文件中的虚拟地址的访问被内核捕获(通过页面错误),并可能导致内核交换数据,并且从物理内存中交换一些其他数据。

如果禁用交换文件,内核将没有地方存储换出的数据。这会减少可用的虚拟内存量。

【讨论】:

  • “交换文件和虚拟内存不一样”,那是什么?根据我的阅读,“Linux 可以使用文件系统中的普通文件或单独的分区作为交换空间。”交换空间与虚拟内存相同。现在我并不是说交换文件是虚拟内存。我的意思是“是否有交换文件/交换分区意味着我有虚拟内存,如果我没有交换文件或没有交换分区,这意味着我的系统没有虚拟内存”?
  • 您甚至可能没有磁盘,内核仍会设置虚拟到物理的映射。交换文件只会增加可用虚拟内存的大小。
猜你喜欢
  • 2018-07-09
  • 2023-03-17
  • 2021-09-11
  • 2011-01-11
  • 2016-09-26
  • 2012-03-21
  • 2014-08-30
  • 2014-01-16
  • 1970-01-01
相关资源
最近更新 更多