Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6319701
  • 博文数量: 2759
  • 博客积分: 1021
  • 博客等级: 中士
  • 技术积分: 4091
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-11 14:14
文章分类

全部博文(2759)

文章存档

2019年(1)

2017年(84)

2016年(196)

2015年(204)

2014年(636)

2013年(1176)

2012年(463)

分类: LINUX

2014-02-06 04:52:01

物理地址按照页来分配成很多不同的页,每个页有页号
有的页里存放的是页表,有的页里存放的是可以写的内存
每个页的大小是4KB,32位机器有2^32个地址
因此有2^32/2^21=2^20个页号,即2的20次方个虚拟页
物理地址也按照4K来分,但是物理地址一般没有4G大小


|*****4K*****|  第0项
|*****4K*****|  第1项
|*****4K*****|  第2项
|*****4K*****|  第3项
|*****4K*****|  第4项
...
......
ARM的虚拟地址和物理地址的转换
比如按照10 10 12来划分
   10位            10位           12位
|0000000010| - |0000000010| - |00000000010|
|    2     |   |     2    |   |     2     |


按照划分,首先虚拟地址向右便宜22位的到,第一级(首级)页表项
为数值2.


然后根据全局唯一的地址,即首级页表的存放地址,这部分是连续的。
比如地址是第0XFF00 00FF
则可以得到第一级页表内存放的内容:
即读取0XFF00 00FF + 2*4k这个物理地址中的内容,其中分为12bit+20bit
后面20bit表示了第二级页表所在的物理页,为什么用20bit,因为一共有20bit
个物理页,比如得到的值是3,则这个第二级页表的的物理地址是4k*3,然后
看第二个10位,即二级页表的页内便宜,得到的是2,则可以得到第二级页表的
物理得只是4k*3 + 2,然后读取(4k * 3) + 2中的值,32位,其中20位表示了
第三级页表的物理地址,比如是0x0000 FF00,然后读取后12位的值,即2
则得到在第0x0000 ff00这个页表中的第2位,从而得到物理地址。


页表最多占用多少内存?
2^10个32位 2^10个32位 + 2^12个32位
即2^11 + 2^12 = 2kb + 4kb = 6kb
如果不采用2级页表的话


那么有2^20次方个页表项,需要2^20次方个32位,即2^10kb=2MB


2MB也不是很大,可是在linux下,每个进程有自己的独立页表,
那每个进程一上来就分配2MB,这样的开销很大。
因此多级页表,主要是灵活,而且节省空间,每个32bit中有12bit的状态位
表示了页表的各种状态。

阅读(1901) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~