繁体   English   中英

虚拟 Memory 和 Linux 中的虚拟地址

[英]Virtual Memory and Virtual Address in Linux

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

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

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

就 Linux 而言,交换分区或交换文件是否与虚拟 memory 相同?

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

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

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

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

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

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

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

不,交换文件与虚拟 memory 不同。

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

是的,由于进程无法在没有映射的情况下引用 memory 位置,因此 kernel 可以采用隔离和访问控制机制。

通过主动映射,不同的虚拟地址可以在不同的时间map到同一个物理memory区域。 The kernel can maintain the illusion that a larger amount of memory is available that the capacity of the actual physical memory, where only a subset of the virtual memory resides in the physical memory at any given time. rest 存储在交换文件中。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM