首页
社区
课程
招聘
[旧帖] 分页机制的疑惑 0.00雪花
发表于: 2010-11-16 19:53 4349

[旧帖] 分页机制的疑惑 0.00雪花

2010-11-16 19:53
4349
关于分页机制的一个疑惑:
我在看杨季文《80x86汇编语言程序设计》,看到分页机制的时候,遇到了一个小小的疑惑:
原书505页:
在建立好页映射表后,启用分页机制所要做的操作是简单的,只要把控制寄存器中的最高位设置为1。具体指令如下:
MOV EAX, CR0
OR  EAX, 80000000H
MOV CR0, EAX
JMP SHORT PageE
PageE:
        xxxxxxxxx

在启用分页机制前,线性地址就是物理地址。在启用分页机制后,线性地址要通过分页机制的转换,才成为物理地址。尽管使用一条转移指令,可清除预取的指令,但随后在取指令时使用的线性地址就要经过转换才能成为物理地址。为了保证顺利过渡,在启用分页机制之后的过渡阶段,仍要维持线性地址等同于物理地址。为了做到这一点,在建立页映射表时,必须使实现过渡的代码所在的线性地址空间页映射到具有相同地址的物理地址空间页。

我对“了保证顺利过渡,在启用分页机制之后的过渡阶段,仍要维持线性地址等同于物理地址。”这句话不理解。首先,为何需要过渡代码?跳转之后的代码如果存在页映射,不就可以直接执行了吗?其次,即便需要,为何要保证维持线性地址等同于物理地址?
忘高手赐教!
谢谢

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 163
活跃值: (75)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
线性地址等同于物理地址 的意思就是线性地址与物理地址等价,并不是说线性地址就是物理地址,这显然是不可能的,没有那么大的线性物理空间给进程使用。
2010-11-16 20:09
0
雪    币: 163
活跃值: (75)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
在未启用分页机制的情况下,线性地址就是物理地址
2010-11-16 20:11
0
雪    币: 184
活跃值: (41)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
一个物理页面可以映射到虚拟空间的任意一个页面上,当然也就可以将一个页面映射到虚拟页编号和该物理页编号相等的虚拟页上。
这样映射的页面物理地址和虚拟地址是一致的,启动分页的指令执行前eip指向物理地址,执行后指向后一条指令的虚拟地址,启动分页的过度代码只有在这样的映射的内存上跑,才能保证程序连续执行。
2010-11-16 22:55
0
雪    币: 2109
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
可以实验看看。
我猜小部分的因素跟数据Cache(I-Cache)有关。
可以在 BIOS 中关闭 cache,然后作一个简单的 boot code 测试。
2010-11-16 23:24
0
雪    币: 179
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
谢谢各位,我明白了
说下我的理解,以供后人参考:
在某一个线性页中,分页之前,线性地址就等于物理地址,启动分页之后,那么线性地址要通过分页机制转换为物理地址,那么这时跳转的代码还在这个线性页中,所以必定要保证线性地址到物理地址的一致性!
原书的代码是这样:
xxxxxxxxxx
MOV CR0, EAX
JMP SHORT PAGE
PAGE:
xxxxxxxxxxx
跳转后的地址还在同一个线性页中。
但如果跳转后的地址在新的线性地址页,那么就无所谓了。
2010-11-17 09:11
0
游客
登录 | 注册 方可回帖
返回
//