逻辑地址怎么转化为物理地址

逻辑地址怎么转化为物理地址,第1张

物理地址:加载到内存地址寄存器中的地址,内存单元的真正地址。在前端总线上传输的内存地址都是物理内存地址,编号从0开始一直到可用物理内存的最高端。

程序的逻辑地址空间变换成内存中的实际物理地址空间的过程,也就是说在装入时对目标程序中指令和数据的修改过程。他是实现多道程序在内存中同时运行的基础。重定位有两种,分别是动态重定位与静态重定位。

线性地址:

一个逻辑地址由两部份组成,段标识符和段内偏移量。段标识符是由一个16位长的字段组成,称为段选择符。其中前13位是一个索引号。这就是“段描述符(segment descriptor)”,段描述符具体地址描述了一个段(对于“段”这个字眼的理解:我们可以理解为把虚拟内存分为一个一个的段。

比如一个存储器有1024个字节,可以把它分成4段,每段有256个字节)。这样,很多个段描述符,就组了一个数组,叫“段描述符表”。

逻辑地址(LogicalAddress)是指由程序产生的与段相关的偏移地址部分。有时我们也把逻辑地址称为虚拟地址
物理地址(Physical
Address)
是指出现在CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果地址。如果启用了分页机制,那么线性地址会使用页目录和页表中的项变换成物理地址。如果没有启用分页机制,那么线性地址就直接成为物理地址了。
二者的关系如下:
只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换);逻辑也就是在Intel
保护模式下程序执行代码段限长内的偏移地址(假定代码段、数据段如果完全一样)。应用程序员仅需与逻辑地址打交道,而分段和分页机制对您来说是完全透明的,仅由系统编程人员涉及。应用程序员虽然自己可以直接 *** 作内存,那也只能在 *** 作系统给你分配的内存段 *** 作。
逻辑地址与物理地址的“差距”是0xC0000000,是由于虚拟地址->线性地址->物理地址映射正好差这个值。这个值是由 *** 作系统指定的。

32位CPU在实模式下可以用16位寻址。如果是基于80x86保护模式,则要经过逻辑地址到线性地址的转换,再通过线性地址计算出物理地址。此时段寄存器中的段值是段选择子,它要在GDT或LDT中查找该段的起始地址,再与16位物理地址相加就得到线性地址。如果此时未启动分页,那么这个线性地址也就是物理地址;否则用高20位查找页目录表和页表,低12位为页内偏移。比较复杂。

因为在ipad上画图比较好 *** 作,这篇笔记就直接上传手写版了。把线性地址到物理地址部分的转换理了一下,以后有补充会做更新。
四级页表的作用主要就是地址映射,将逻辑地址映射到物理地址。
ARM MMU的地址转换过程实际上更加复杂,通过两级页表实现,转换方式有两大类共四种情况,具体的可以看这篇博客 >

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12601815.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存