内存段和物理 RAM

标签 memory memory-management operating-system cpu-architecture

关闭。这个问题需要更多focused .它目前不接受答案。












想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post .

6年前关闭。




Improve this question




进程的内存映射似乎被分割成段(堆栈、堆、bss、数据和文本),

  • 我想知道这些段只是对
    过程的便利性和物理 RAM 只是一个线性阵列
    地址或者物理 RAM 是否也碎片化成这些
    段?
  • 此外,如果 RAM 没有碎片化并且只是一个线性数组,那么如何
    操作系统是否为进程提供了这些段的抽象?
  • 如果内存映射到进程只是一个线性数组而不是分成段(MMU 将虚拟地址转换为物理地址),那么编程将如何改变?
  • 最佳答案

    在支持虚拟内存的现代操作系统中,进程的地址空间被划分为这些段。在一般情况下,进程的地址空间以完全随机的方式转换到物理 RAM 上(具有一些固定的粒度,通常为 4K)。彼此相邻的地址空间页面不必投影到 RAM 的相邻物理页面中。 RAM 的物理页不必与进程的地址空间页保持相同的相对顺序。这一切都意味着在 RAM 中没有这样的段分离,也不可能有。

    为了优化内存访问,操作系统可能(通常会)尝试将进程地址空间的顺序页面映射到 RAM 中的顺序页面,但这只是一种优化。在一般情况下,映射是不可预测的。最重要的是,RAM 由系统中的所有进程共享,属于不同进程的 RAM 页在 RAM 中任意交错,这消除了在 RAM 中存在此类“段”的任何可能性。 RAM 中没有特定于进程的排序或分段。 RAM只是虚拟内存机制的缓存。

    同样,每个进程都使用自己的虚拟地址空间。这是这些分割市场可以存在的地方。该进程无法直接访问 RAM。该进程甚至不需要知道 RAM 存在。

    关于内存段和物理 RAM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28278319/

    相关文章:

    c++ - Linux 编程接口(interface)中的信号处理程序示例

    assembly - 是否可以在 x64 操作系统上运行 x86 程序集?

    php - 跟踪方法的内存使用情况

    linux - do_mmap_pgoff 用于其他进程

    python - 如何在Pygame上显示玩家的分数?

    c# - 锁字典不断增长,不知如何清理?

    python - 如何从内存中删除流?

    python-3.x - 权限错误: [WinError 5] Access is denied for creating file

    python - PyGame 让 Linux 陷入困境?

    ios - @property 在 Objective-C 中保留、分配、复制、非原子性