|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
鱼油们好,有不有对虚拟空间,物理空间理解的很好的,我一直理不清这两个概念,所以想请教一下,我把我理解的和想问的写出来如下,如果我理解的不对,希望大家帮我指正,和帮助我回答我不明白的地方:
我理解的:
拿虚拟空间4G,真实内存2G举例,当物理空间不够时,硬盘的虚拟内存就开始发挥作用了。
每个程序有自己的4G虚拟空间,从0x 00000000 00000000 - 0x FFFFFFFF FFFFFFFF范围的地址,程序想用哪个地址就用哪个。
虚拟地址是为了使用灵活,每个程序的地址独立,不会和其它程序冲突。
每个时刻只会有一个线程拥有时间片。
想问的:
程序运行起来之后,可能在不断的申请释放地址,这些都是虚拟地址对吧,CPU在接收到这些地址时,到内存找它们对应的位置时,先要转换成一下真实的,那么地址转换器是怎样转换这些地址的,是有固定公式,还是随机的从真实地址的开始搜索,找到一块合适的,就将这块真实的物理地址与程序申请的这个虚拟地址对应,并且做相应的记录工作?
每个程序拥有自己独立的4G,这句话除了说程序可以从4G虚拟地址申请任意的一个地址,还表示它可以拥有所有的4G物理空间吗?比如说有两个大型的程序A和B,A程序初始化时,malloc3G空间,这时时间片到期,它退出,B程序开始初始化,它也很大型,初始化函数中有一句malloc(2G),这样3G+2G > 4G, B程序的malloc是不会成功的吧,每个程序不是都拥有4G空间,为什么B程序malloc(2G)都不能成功?
还有就是"每个时刻只会有一个线程在内存中"这句话,我一直觉得这个很关键,但又不明白它跟虚拟内存,物理内存的理解到底有什么具体的关系。
由于基础有限,大家别觉得我问的好笑,理解错的希望大家帮忙指正,非常感谢,即使不懂,但也很想弄明白这两个概念的,欢迎和我一起找资料和讨论。
|
|