【问题标题】:example of address translation地址转换示例
【发布时间】:2013-11-02 11:32:31
【问题描述】:

我对地址空间有疑问。 我认为如果 4 GB 的 RAM 被分成两半,内核空间(1GB)和用户空间(3GB)。

1] RAM 是否也像硬盘一样维护堆栈、堆、代码和数据部分。

2] 运行的进程会不会没有给堆栈、数据、代码和堆必须在 RAM 中增长的边界。

3] 我的想法是堆栈、堆、代码和数据段都在进程创建时给进程的连续地址空间中。

4] 由于进程在物理内存中不连续,CPU 如何获取进程的正确地址来执行。

【问题讨论】:

  • 请记住,物理地址空间不仅仅由 RAM 组成,还有 MMIO/VGA 被盗区域等。

标签: c operating-system ram internals


【解决方案1】:

不,只有虚拟内存地址空间被一分为二。物理内存,即机器中的 RAM,包含映射到虚拟内存地址的完全随机的块集合。来自操作系统页面和用户程序页面。就像图片显示的一样,虽然在底部显示操作系统页面有点误导。

映射不断变化,页面错误是将虚拟内存页面映射到 RAM 的基本机制。当程序访问 RAM 中尚不存在的虚拟内存页面时触发。根据需要,可以取消映射 RAM 页面以腾出空间,它们的内容要么被丢弃,要么被写入页面文件。代码通常是可丢弃的,它可以从可执行文件中读回,数据通常不是。

RAM 中的某些页面是特殊的,它们包含驱动程序使用的代码和数据。它们是页面锁定的。当驱动程序处理设备中断时需要,并且中断处理程序使用的代码/数据必须存在于 RAM 中以允许处理中断,在如此关键的时间不能承受页面错误。图片是这样绘制的可能原因。

【讨论】:

  • 谢谢汉斯。但是我有一个困惑,CPU如何获取正确的物理地址或CPU中的指令指针知道进程的地址,因为进程的段分散在物理内存中。
  • 我研究过当一个进程试图访问超出提供的进程地址限制的地址时会发生段错误。我对此感到困惑。
  • 操作系统设置页面映射表,CPU 使用该表将虚拟地址转换为物理地址。当 CPU 命中在页映射表中没有条目的虚拟地址时,会发生 seg 错误。
猜你喜欢
  • 1970-01-01
  • 2022-07-07
  • 1970-01-01
  • 1970-01-01
  • 2021-05-31
  • 1970-01-01
  • 1970-01-01
  • 2019-04-18
  • 1970-01-01
相关资源
最近更新 更多