搜索

386 汇编中的虚拟地址转换到物理地址过程

gecimao 发表于 2019-07-27 15:49 | 查看: | 回复:

  在学习386汇编语言是时候,书上说的虚拟地址到物理地址的变换过程我大概有了一点了解中间是先通过描述符把虚拟地址变换成线性地址,然后再通过分页变成物理地址,但是是怎么变换的却不...

  在学习386汇编语言是时候,书上说的虚拟地址到物理地址的变换过程我大概有了一点了解中间是先通过描述符把虚拟地址变换成线性地址,然后再通过分页变成物理地址,但是是怎么变换的却不知道。有的书上说Windows是通

  过把不同的任务放在不同的虚拟地址来达到任务保护的,但又说不同任务的虚拟地址可以相同但他们映射到物理内存是不同的,这两种说法不是相反的吗?

  A1,A2,A3;B1,B2,B3;C1,C2,C3这些段就是虚拟地址空间。那这三个任任务的段是映射到同一个线性地址空间还是A任务的三个段可以映射到一个0到2GB的地址空间,B任务的三个段可以映射到一个0到2GB的地址空间

  B任务的三个段可以映射到一个0到2GB的地址空间,这三个线性地址空可以重叠,只是由线性地址空间到物理内存是不同的。

  我是意思是说线性地址空间好像就是一张表,这个表有4GB,其中每一张表的最后2GB—4GB是留给系统用的,这就是书上说的共享空间,而4MB—2GB就是留给应用程序的这就是私用空间,所以上面有三个任务就有三张线性地址空间的表,每个任务都一张,任务A的三个段映射到一张表的4MB——2GB的空间,而任务B的三个段也映射到一张表的4MB——2GB的空间,任务C也一样,三个任务的三个段在分别的4MB—2GB的地址是可以相同的。然后这几张表通过分页机制映射到物理内存中,不知道是不是这样的呀展开我来答

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  段寄存器是一个16位的寄存器,其中第0和1位控制着将要访问段的特权级,第2位说明是在GDT还是LDT寻找地址.高13位作为一个索引值,总共8192个索引.假设段寄存器-0000 0000 0000 1011(000B),那么我们可以知道RPL=3(特权级为3);TI=0,从GDT中选择段描述符;index=1,即将要索引的段描述符在GDT中的顺序号为1,由于一个段描述符占8个字节,所以其索引到的地址为GDT的高32位+1*8.这也就是为什么GDT48位,留最低的16位作为限长的原因(8192*8=64K).

  找到了段描述符,然后就是从段描述符中找出该段的位置了.段描述符是个8字节的内存空间,由于结构复杂,无法构图,省略段描述符的结构.我们只要知道在里面规定了该段的基址,限长,还有属性等等.找出基址后,再加上虚拟地址的偏址,就形成了32位的线G的虚拟地址空间.

  该部分是由分页部件通过3级查找完成的.此时,我们把线-31位(a)页目录索引.我们把页表描述符和页描述符通称为页表项,页表项占4个字节,总共占4KB大小.先以CR3为基址,以(a*4)为索引值,寻址页目录描述符.然后再以页目录地址的高20位地址为基址,以(b*4)为索引值,寻址页描述符.再以页描述符的高20位地址为基址,以c为偏移地址,相加得到物理地址. 从上可以看到页的大小是4KB,即一项任务CPU只调用该任务所占内存空间的4KB大小.有利于减少内存占用.

  以上大体就是这样的,其中分页部件的转换相当复杂,不是三言两语就能说明白的.还有pentium之后,分页部件又采用了4MB的页面,线级寻址.才开启PAE功能后,又形成了4级寻址.然后再结合后面的内存保护,I/O保护,任务保护及特权级的变换,形成了保护模式的大部分内容.

本文链接:http://reginaflowers.net/dizhibianhuan/1069.html
随机为您推荐歌词

联系我们 | 关于我们 | 网友投稿 | 版权声明 | 广告服务 | 站点统计 | 网站地图

版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright @ 2012-2013 织梦猫 版权所有  Powered by Dedecms 5.7
渝ICP备10013703号  

回顶部