首页 > 编程知识 正文

线性地址和物理地址,线性思维模式

时间:2023-05-05 16:16:04 阅读:155658 作者:3166

逻辑地址(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是因为虚拟地址-线性地址-物理地址映射正好差。 该值由操作系统指定。

虚拟地址到物理地址的转换方法与体系结构相关。 一般有分段、分页两种方式。 以当前的x86 cpu为例,支持所有分栏分页。 内存管理单元负责将虚拟地址转换为物理地址。 MMU可以通过检查段表来将逻辑地址转换为线性地址,以模糊的唇膏内偏移的形式。 如果cpu没有打开分页功能,则线性地址是物理地址。 如果cpu打开了分页功能,则MMU还必须查询页表以将线性地址转换为物理地址。

逻辑地址--(段表)-- (线性地址) )页表) -物理地址

不同的逻辑地址可以映射到同一个线性地址; 也可以将不同的线性地址映射到同一个物理地址; 所以是多对一的关系。 此外,同一线性地址也可能在发生分页符后重新加载到其他物理地址中。 因此,该多对一的映射关系也随着时间变化。

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