鱼C论坛

 找回密码
 立即注册
查看: 2220|回复: 4

被骗好多年,诚心求知!真相是什么?

[复制链接]
发表于 2012-9-11 04:26:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一直以为,找操作系统分配一个内存空间,假设 是  10000  那么在内存条上的位置也是 10000
也就是 定义一个内存 进行加减乘除 MOV SUB INC 等指令就是直接在数据总线上 发送 10000 的 二进制,
在 8086的时候,这还真是这样
可学到 X86 汇编,妈呀,什么内存分页,搞了半天才知道,
原来 4GB内存 空间是虚拟的,
内存地址也是虚拟的
这也终于明白,为什么之前微研究逆向,一个CALL/变量 地址 会有静态的
(此前一直以为, 这些 CALL/变量地址 是根据 PE 启动过程 PE头和 操作性进行重定位 重新分配内存地址,也就是
假定, 设定  子程序1 地址=100
若,在程序运行前,其他程序 分配了 地址 100
程序启动过程就 重定位一个地址给 子程序
原来他妈的不用考虑地址被占用,直接独享4G地址啊,我擦..............)
不得不说,虚拟内存很好,很强大!!!!!!


问题:虚拟地址转物理地址
(对于一个要转换成物理地址的虚拟地址,CPU首先根据CR3中的值,找到页目录所在的物理页。然后根据虚拟地址的第22位到第31位这10位(最高的10bit)的值作为索..........百科资料 )


暂且不讨论 具体过程,我想问的是
CPU将一个 虚拟地址转化成物理地址 的过程,岂不是 涉及到 读取内存,计算地址 等等操作?
那么,每一个涉及地址的 指令岂不是都要大费周章去 计算物理地址?
上亿的CPU指令,都涉及到 了 虚拟地址,CPU如何做到高效率的?
一级缓存?二级缓存?三级缓存?不够用吧.............
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-9-11 18:18:23 | 显示全部楼层
每个任务有不同的页目录和页表,计算无力地址的开销很小的,所以为了考虑内存还采用了两级页表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-9-11 18:58:24 | 显示全部楼层
很复杂的问题  静观解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-9-12 03:37:48 | 显示全部楼层

谢谢指导
...............00000000000000000.......
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-9-12 08:36:11 | 显示全部楼层
建议去看看操作系统 。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-8 04:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表