首页 > 编程知识 正文

逻辑地址转物理地址,为什么需要逻辑地址

时间:2023-05-05 10:32:58 阅读:155657 作者:749

逻辑地址(Logical Address )是与程序生成的段相关的偏移地址部分。 例如,在c语言指针编程中,可以读取指针变量本身的值(操作)。 实际上,该值是逻辑地址,是当前流程数据段的地址,与绝对物理地址无关。 只有在Intel实模式下,逻辑地址才等于物理地址。 由于实模式没有分段和分页机制,因此Cpu不会自动进行地址转换。 逻辑是指在Intelprotection模式下程序执行的代码段长度内的偏移地址。 假设代码段、数据段完全相同。 APP应用程序员只是与逻辑地址进行交互,分段和分页机制对你来说完全透明,只有系统程序员参与。 APP应用程序员可以自己直接操作内存,但只能在操作系统分配的内存段上操作。

线性地址是逻辑地址到物理地址转换的中间层。 程序代码将逻辑地址(即段内的偏移地址)与相应段的基址相加,生成线性地址。 如果启用了分页机制,则可以进一步转换线性地址以生成物理地址。 如果未启用分页,则线性地址直接为物理地址。 Intel 80386的线性地址空间容量为4g(2的32次方,即32条地址总线地址)。

物理地址(Physical Address )是指当前的CPU外部地址总线上的寻址物理存储器的地址信号,是地址转换的最终结果地址。 如果启用了分页机制,则使用页面目录和页面表项将线性地址转换为物理地址。 如果未启用分页机制,则线性地址将保持为物理地址。

虚拟内存(Virtual Memory )意味着它显示的内存量远远大于计算机实际拥有的内存量。 因此,程序员可以编写和执行内存比实际系统大得多的程序。 这样,许多大型项目也可以在具有有限内存资源的系统上实现。 作为一个恰当的比喻,火车可以从上海开到北京,而不需要很长的轨道。 完成这项任务需要足够长的线路(例如3公里)。 方法是把后面的线路马上铺在列车前面。 如果你的操作足够快并能满足要求,列车就能在完整的轨道上运行了。 这意味着管理虚拟内存所需的任务。 在Linux 0.11内核中,每个程序(进程)都被分配了总容量为64MB的虚拟内存空间。 因此,程序的逻辑地址范围为0x0000000到0x4000000。

逻辑地址有时也称为虚拟地址。 因为和虚拟内存空间的概念一样,逻辑地址也与实际的物理内存容量无关。

逻辑地址和物理地址之间的“差”为0xC0000000是因为虚拟地址-线性地址-物理地址映射正好差。 该值由操作系统指定。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。