如题,请问下__bio_kmap_atomic()函数返回的虚拟地址的范围是多少?因为__bio_kmap_atomic()是通过kmap_atomic()函数获得虚拟地址的,所以就是要确定kmap_atomic()函数返回的虚拟地址的范围是多少?
因为4G内存是分为3G的用户区域和1G的内核区域的,即内核使用的内存起始地址是从0xc000 0000(3G)开始的,而在这1G的区域中又分为低端内存和高端内存,函数kmap_atomic()返回的地址是高端内存的地址,范围是多少?从fixmap开始吗? 这个函数返回的地址有没有可能小于0xc000 0000?因为实际测试好像是有返回这样的地址,但前面分析的又不会,矛盾中。。。。。求解。。。。
于 2012-04-19 16:37:34发表:
你说的4G内存访问里面3G的起始地址是物理地址,这个值和kmap_atomic返回的地址是一种映射的关系,并不能单单从值的大小判断对错(没有直接关系),系统会把获得的虚拟内存地址进行2次转换(Intel),就是通常所说的逻辑地址->线性地址->物理地址的转换过程。