注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

编程学习

我的网上家园

 
 
 

日志

 
 

16章 开启分页模式学习笔记  

2013-05-21 11:00:23|  分类: 《x86汇编语言: |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
开启分页模式以后,线性地址要经过页部件的转换,转换以后的地址才是真正的物理地址.

开启分页模式以后,为我们直接访问物理内存制造了麻烦.因为,我们访问的任何线性地址
都要经过页部件的转换,这个转换过程是自动的,我们无法干预.

开启分页模式以后,我们只能通过线性地址来访问页目录表跟页表,要达到这样的访问目的,
必须在开启分页模式之前,在页目录表中保存页目录表自身的物理地址,这样,在开启分页模
式以后,我们使用特定的线性地址(这个线性地址指向页目录表保存有自身物理地址的索引
项),就可以访问页目录表自身了,这时候页部件会把我们给出的线性地址转换成页目录表的
物理地址,我们的目的达到了.

通常情况下,在页目录表的最后一个表项中保存有自身的物理地址.

假如我们要修改页目录表自身,我们可以通过线性地址 0xfffff000 来实现.

0xfffff000的高10位跟中间10位都是 1111_1111_11B,也就是0X3FF,0x3ff是最后一个表项,
页目录表的最后一个表项保存了自身的物理地址,这样高10位经页部件转换以后,访问的页表
是页目录表自身,中间10位同样是最后一个表项,这样经过页部件的再次转换,访问的物理页
还是页目录表自身,线性地址的最低12位是页内偏移,通过指定页内偏移,就可以修改页目录
表中的表项了.

如何判断给出的 线性地址的 页表是否在页目录表中登记?

我们知道线性地址的高10位*4就是线性地址的页表在页目录表中的表项,要访问页目录表自
身可以用线性地址0xfffff000,再加上给出的线性地址的高10位*4,就可以访问页目录表中我
们想要访问的那个表项了(这个表顼保存有指定线性地址的页表),通过访问这个内存地址进
行判断,我们就知道给出的线性地址的页表有没有在页目录表中登记了.


如何访问并修改给出线性地址的页表?

首先,我们要强调一下,我们要访问的是给出线性地址的页表,而不是给出线性地址的 页表本
身的 物理地址,这可不能搞混了. 访问给出线性地址的页表要少一个转换步骤.


首先当线性地址的高10位是0x3ff时,经过页部件转换以后得到的页表物理地址指向了页目录
表自身,其次,给出的目标线性地址的高10位是目标线性地址在目标页目录表中的索引项,
我们通过把给出线性地址的高10位移动到中间10位,并且把高10位变成0x3ff,这样经过页部
件转换后的物理地址就是我们的目标 页物理地址了,给出线性地址的中间10位乘以4就是
给出的线性地址在目标物理页中的索引项了.

  评论这张
 
阅读(76)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017