内存段和物理RAM

BsD*_*BsD 6 memory operating-system memory-management cpu-architecture

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

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

AnT*_*AnT 6

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

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

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