免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1136 | 回复: 0
打印 上一主题 下一主题

物理内存和虚拟内存 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-06 10:01 |只看该作者 |倒序浏览
1、每个进程都有4GB的虚拟地址空间
这4GB分3部分
(1)一部分映射物理内存
(2)一部分映射硬盘上的交换文件
(3)一部分什么也不做
程序中都是使用4GB的虚拟地址,访问物理内存需要使用物理地址,物理地址是放在寻址总线上的地址,以字节(8位)为单位。

2、CPU中有一个分页表示位,如果该位被设置,在执行关于内存操作时,CPU会根据页目录以及页表中的信息来把虚拟地址换成物理地址。

3、物理内存分页:一个物理内存大小为4K字节
起始地址为0X00000000因为一个页为4K所以转化成16进制就是0X00010000所以只需要32BIT中的高20位来寻址物理页。

4、页表 一个页表为4K字节,放在一个物理页中。右1024个4字节页表项组成,页表项的大小为4字节。所以一个页表中有1024个页表项。
该页表项的32BIT中 高20位放一个物理页的物理地址,低12位放一些标志

5、页目录: 一个页目录和页表类似,大小也是4K,放在一个物理页中,每个4字节 由1024个页目录组成。
该页目录的32BIT中 高20位放置一个页表地址, 低12位为一些标志

在X86系统中,页目录的物理地址放在CPU的CR3寄存器中


6、虚拟地址转换成物理地址:
一个虚拟地址大小为4字节,其中包含找到物理地址的信息

虚拟地址分3部分
(1)31-22位(10位)是页目录中的索引
(2)21-12位(10位)是页表中的索引
(2)11-0位(12位)是页内偏移

转换过程:
首先通过CR3找到页目录所在物理页-》根据虚拟地址中的31-22找到该页目录项-》通过该页目录项找到该虚拟地址对应的页表地址-》根据虚拟地址21-12找到物理页的物理地址-》更具虚拟地址的11-0位作为偏移加上该物理页的地址就找到了 该虚拟地址对应的物理地址

7、
一个页目录是1024项     虚拟地址的高31-22正好是1024(20的10次方)
一个页表是1024项       虚拟地址的中间21-12正好是1024
一个物理页是4KB         11-0正好是4096 ,正好可以找到每个字节

一个32BIT的4字节的指针能够找到所有的4GB空间。
4G地址的 低2G 0X00000000-0X7FFFFFFF是用户地址
4G地址的 高2G 0X80000000-0XFFFFFFFF是系统空间

本文参考
http://hi.baidu.com/cathy_200182/blog/item/e079cc1838ef7db04aedbc9e.html


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/72457/showart_1815141.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP