gpt4 book ai didi

memory - 为什么我们需要虚拟内存?

转载 作者:IT王子 更新时间:2023-10-28 23:28:58 26 4
gpt4 key购买 nike

所以我的理解是每个进程都有自己的虚拟内存空间,范围从 0x0 到 0xFF....F。这些虚拟地址对应于物理内存 (RAM) 中的地址。为什么这种抽象级别有帮助?为什么不只使用直接地址?

我理解为什么分页是有益的,而不是虚拟内存。

最佳答案

这样做的原因有很多:

  • 如果您有一个已编译的二进制文件,则每个函数在内存中都有一个固定地址,调用函数的汇编指令将该地址硬编码。如果虚拟内存不存在,两个程序就无法加载到内存中并同时运行,因为它们可能需要在同一个物理地址具有不同的功能。

  • 如果两个或多个程序同时运行(或在它们之间进行上下文切换)并使用直接地址,则一个程序中的内存错误(例如,读取错误指针)可能会破坏正在运行的内存由另一个进程使用,由于一次崩溃而关闭了多个程序。

  • 类似地,存在一个安全问题,即一个进程可以通过猜测它位于哪个物理地址并直接读取它来读取另一个程序中的敏感数据。

  • 如果您尝试通过在切换到第二个进程时分页出一个进程的所有内存来解决上述两个问题,您会招致 大量 性能损失,因为您可能需要分页耗尽所有内存。

  • 根据硬件的不同,某些内存地址可能会保留给物理设备(例如,视频 RAM、外部设备等)。如果在编译程序时不知道这些地址是否重要,它们可能会在物理上中断插入- 通过读取和写入设备的内存来输入设备。更糟糕的是,如果该内存是只读或只写的,程序可能会将位写入一个期望它们停留在那里的地址,然后读回不同的值。

希望这会有所帮助!

关于memory - 为什么我们需要虚拟内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19349572/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com