operating-system - 虚拟内存?

标签 operating-system virtual-memory

我对这些问题感到非常困惑。

  • 在 32 位处理器上,每个进程都有 4 GB 的虚拟内存。但是,如果每个进程有 4GB 的空间,那么如果有 100 个进程正在运行,那么每个进程的空间都会很大——这大于交换区域。有人可以解释一下吗?我很困扰。
  • 操作系统如何为进程分配内存?假设一个进程有 a = malloc(2) .谁将把这些内存分配给进程?操作系统会将这 2 个字节的内存分配给进程吗?
    (我们访问 a[2] 它会产生分割错误)。
  • 进程的不同部分(代码、数据、堆栈、堆)在主内存或辅助内存中的何处保留。

  • 请给我一些好的链接,以便我也可以理解虚拟内存及其整个机制,因为我发现的链接并没有完全解释虚拟内存。

    最佳答案

  • 谁在乎虚拟内存是大于还是小于交换区?这有什么区别? (假设您以只读方式映射 2GB 文件,该文件使用 2GB 虚拟内存,但不需要交换空间,只需要少量物理内存。)
  • 操作系统只是扩展了进程的虚拟内存空间。这只是改变一个会计分录。在尝试修改地址空间的内容之前,不需要物理内存。 (实际上,该进程可能会自己执行此操作,仅在需要更大的块时才要求操作系统扩展其虚拟内存空间。)
  • 它们保留在物理内存中(假设它们一开始就出错),直到操作系统选择将它们移到别处或丢弃它们。如果它们被移到别处或被丢弃,当它们被页面错误访问时,它们会被调回或重新创建。 (操作系统将物理内存作为一种宝贵的资源进行管理,以它认为最好的方式授予它。)

  • 顺便说一下,在大多数 32 位操作系统上,操作系统本身需要 1GB 或 2GB 的虚拟内存空间,只有 2GB 或 3GB 真正可供进程使用。在 64 位操作系统上,操作系统不占用任何空间,因此 32 位进程可以使用完整的 4GB。

    关于operating-system - 虚拟内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11625729/

    相关文章:

    operating-system - 编译时间,加载时间和执行时间之间的区别?

    linux - Linux 下键盘事件处理的内部工作原理

    linux - 哪些进程状态会影响服务器的平均负载?

    c - 探索虚拟内存 (ProcessWalker)

    memory - 如何使用页表将虚拟地址转换为物理地址?

    windows - 64 位大型 malloc

    javascript - 可能的?使用 JavaScript 访问客户端串行端口的自包含 html 页面?

    Python os- 当我使用 os.mkdir 创建目录时,os.path.isdir 告诉我该目录不存在

    arrays - 如何分配 RAM 容纳不下的单个数组

    windows-mobile - Windows Mobile : How to identify and prevent shared DLLs from occupying address space?