在编译器将编译后的代码放入存储器后,我从书中读到(纠正我错了),CPU创建逻辑地址,并通过MMU(内存管理单元)将这些逻辑地址映射到物理内存。我也知道CPU直接无法访问物理内存以外的任何内容。
那么CPU如何首先为流程生成逻辑地址?
答案 0 :(得分:4)
听起来你对事情的确有点混淆。
操作系统通过设置逻辑页面到物理页面框架的页面表来定义逻辑地址空间。操作系统加载CPU的硬件寄存器,以便它知道它已定义的页表。
使用页表来定义逻辑地址空间是现代CPU的一个组成部分。在某些系统中,物理地址的唯一用途是在页表内。
编译器生成一个目标代码文件,用于描述使用和创建的指令和数据。
链接器将目标代码组合成一个可执行文件,该文件定义了如何将程序加载到内存中。
加载程序读取可执行文件中的指令并设置逻辑地址空间以运行程序。加载器调用设置页表的系统例程来定义逻辑地址空间。
例如,在可执行文件具有只读数据的情况下,加载程序将调用OS例程以在逻辑地址空间中创建只读页面,并将它们映射到可执行文件中的数据。