虚拟地址转换物理地址 虚拟地址和物理地址转换

内核也不能直接访问物理地址.但因为内核的虚拟地址和物理地址之间只是一个差值0xc0000000的区别,所以从物理地址求虚拟地址或从虚拟地址求物理地址很容易。那么虚拟地址和物理地址怎么转换?小编整理了修改硬盘物理地址的相关资料。供大家参考!

虚拟地址和物理地址转换参考如下虚拟地址(Virtual Address Space)

虚拟地址并不真实存在于计算机中。每个进程都分配有自己的虚拟空间,而且只能访问自己被分配使用的空间。理论上,虚拟空间受物理内存大小的限制,如给有4GB内存,那么虚拟地址空间的地址范围就应该是0x00000000~0xFFFFFFFF(4GB)。

为什么每个进程的虚拟地址空间范围都可以这么大呢,这涉及到地址的映射机制;程序实际运行时,系统会先将虚拟地址映射到物理地址中的范围。

另外一个概念:虚拟内存。虚拟内存是内存中的一片连续地址空间。在物理存储位置上的意义,不一定就是指物理内存,可能也是在硬盘上开辟的一篇地址空间。

物理地址(physical address)

物理地址用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。

——这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到最大空量逐字节的编号的大数组,然后把这个数组叫做物理地址,但是事实上,这只是一个硬件提供给软件的抽像,内存的寻址方式并不是这样。所以,说它是“与地址总线相对应”,是更贴切一些,不过抛开对物理内存寻址方式的考虑,直接把物理地址与物理的内存一一对应,也是可以接受的。也许错误的理解更利于形而上的抽像。

虚地址到物理地址的转换过程

MVA (Modified Virtual address,修改过的虚拟地址,这个地址由CPU产生#1)

step1.通过TTBR找到粗表描述符

转换表基地址#2 + MVA的粗页表索引 = 粗页表的物理地址

step2.通过粗表描述符找到小页描述符

粗页表基地址#3 + MVA的小页表索引 = 小页表的物理地址

step3.通过小页描述符找到物理地址

小页基地址#4 + MVA的页索引 = 物理地址

step1得到的粗页表的物理地址位定义

step2得到的小页表的物理地址位定义

step3得到的物理地址位定义

注1:严格的说,这个地址是可能是FCSE或ARM926ej-s处理器产生

注2:转换表基地址保存在TTBR,详见TTBR

注3:粗页表基地址保存在粗页表描述符中,详见粗页表描述符

注4:小页表基地址保存在粗页表描述符中,详见小页表描述符

--------------------------------------------------------------------------------------

CP15

系统控制协处理器(CP15)被用来配置和控制ARM926ej-s处理器。cache、mmu都通过CP15的寄存器来控制。需要使用专门的指令访问CP15的寄存器。

ARM926ej-s系统中的地址

ARM926ej-s产生的地址为虚地址(VA),FCSE(快速上下文切换控制器)将VA转换为修改过的虚地址(MVA)供MMU使用,MMU将MVA转换为TCM和AMBA总线的物理地址(PA)。

CP15的c1寄存器

c1寄存器是ARM926ej-s处理器的控制寄存器。该寄存器用来使能或禁用cache、配置MMU。

I 0: 禁用iCache,1使能iCache

C 0:禁用dCache,1使能dCache

如果c1寄存器禁用了cache,小页表的C、B位是无效的。

TLB

MMU是OS分页内存管理的硬件基础。MMU使用TLB(Translation lookaside buffer,即旁路转换缓冲,或称为页表缓冲;用来存放虚拟地址到物理地址的转换表)将虚拟地址转换为物理地址。

TLB保存在SDRAM中。

虚拟地址转换物理地址 虚拟地址和物理地址转换

TTBR

TTBR是Translation Table Base Register的缩写,中文全称是:转换表基地址寄存器。TTBR是协处理器CP15的c2寄存器。

由于读取TTBR时Bit13~Bit0是不可预测的,所以粗页表的起始地址必须是按64K对齐的。

粗表描述符

填充为红色的位固定为0/1。Bit8~Bit5为域控制位,可以定义16个域。

小页描述符

填充为红色的位固定为0/1。AP3~AP0为访问控制位,访问控制位和域控制位配合完成了对内存访问权限的管理。在boot中,禁用域控制,同时将AP3~AP0全部设置为3(任何人都可以读写)。只关注 C cache控制位,B buffer控制位。

#写通。读命中,从Dcche读取数据,读未命中,(cache)行填充;写命中,写数据带Dcache,并缓冲到外边存储器写未命中,缓冲到外部存储器

#写回。读命中,从Dcache读取数据,读未命中,(cache)行填充;写命中,写数据带Dcache ;写未命中,缓冲到外部存储器

虚拟地址到物理地址的转换步骤

已知一个虚拟地址0x01AF5518, 则转换的过程如下:

注意: *这里讨论的以Windows下普通模式分页的情况, 也就是2级页表的情况*

1.首先把虚拟地址拆分成3个部分(低12位, 中10位, 高10位), 换成2进制如下:

-> 0000 0001 1010 1111 0101 0101 0001 1000

按照10, 10, 12的位数重新排列后

-> (页目录索引)00 000 00110, (页表项索引)10 1111 0101, (偏移)0101 0001 1000

换算成十六进制后可以得到如下结果

页目录索引 = 6, 页表项索引 = 0x2f5 , 偏移 = 0x518

2. 根据当前的CR3寄存器中的物理地址定位页目录表基址

Cr3中存放的是物理地址, 这个物理地址指向进程的页目录表基址, 由此可以得到

页目录表基址(PDE) = Cr3 = 0xAA0E5000

3. 计算页表项的地址

页表地址存放在页目录表(PDE)中的第6个项目中, 也就是

[0xAA0E5000 + 4 * 6] = [0xAA0E5018] = 0x3D955867, 其中0x00000867为该页表属性值, PTE = 0x3D955000

3. 计算页面物理地址

我们要找的页面在这个页表中的第0x2f5项, 所以虚拟地址所在的页的物理地址为

[0x3D955000 + 0x2f5 * 4] = [0x3D955BD4] =

假设[0x3D955BD4] = 0x7095e847, 页面的物理地址 x0x7095e000, 0x00000847表示的是页面属性

4. 计算最终的物理地址

由虚拟地址分离的偏移可以计算出最终的物理地址为

0x7095E000 + 0x00000518 = 0x7095E518.

  

爱华网本文地址 » http://www.aihuau.com/a/253161/158321070.html

更多阅读

查看本机IP/怎么查看本机IP地址 怎么查看虚拟机ip地址

有许多新手朋友,还不知道怎么查看本机IP,更不知道查看IP地址的命令是什么?其实,想要查看本地IP其实非常简单,只需要在cmd命令提示符中输入:ipconfig 命令,下面将为你详细的介绍怎么查看本机IP地址的详细步骤和方法。查看本机IP/怎么查看本

虚拟存储器的页式调度 虚拟存储器的工作原理

1、页式虚存地址映射  页式虚拟存储系统中,虚地址空间被分成等长大小的页,称为逻辑页;主存空间也被分成同样大小的页,称为物理页。相应地,虚地址分为两个字段:高字段为逻辑页号,低字段为页内地址(偏移量);实存地址也分两个字段:高字段为物理

操作系统地址转换 苹果操作系统下载地址

关 于 地 址 转换在计算机操作系统中,地址转换是存储管理的一个主要功能。所谓地址转换就是将用户的逻辑地址转换成内存的物理地址,完成地址重定位。需要指出的是,地址转换是操作系统的地址变换机构自行完成的,无需用户干预,这样我们使

声明:《虚拟地址转换物理地址 虚拟地址和物理地址转换》为网友画中人少年分享!如侵犯到您的合法权益请联系我们删除