- 论坛徽章:
- 0
|
我是楼主,谢谢楼上的诸位的回答,
我之所以在这个问题上纠结是因为我没有弄清楚“high memory"到底是线性地址空间中的概念还是物理地址空间中的概念。
那么答案是,“high memory"是线性地址空间中的概念。即vmalooc()返回的地址落在"high memory"的区间中。
但这个概念又与物理地址空间到底有多大息息相关。即,kernel的逻辑地址空间只能直接映射物理地址空间中的0~896M的部分。
所以如果要让kernel能够使用到>896m的物理地址空间,就引入了"high memory"的概念。
但vmalloc()调用后分配出来的的物理地址是不是处于>896M的物理地址空间中,却是不一定的。因为物理地址分配是随机的。
果然比较绕,汉语如此精细还是不能完全反映这个过程。累!
同时,原提问中的:”进程在向内核请求分配内存时也有可能分配到这块物理内存?“,
这个问题,我现在觉得不妥,答案应该是:
进程运行在用户态时,heap, stack对应的物理内存,有可能落在>896M的区域,也有可能不,因为page frame分配的随机性。
而进程运行在内核态时,分两种情况:
1 vmalloc()分配出来的page frame可以落在物理地址空间的任意位置,但虚拟地址落在虚拟地址空间中的>896处。
2 kmalloc()&__get_free_page()分配出来的page frame可以落在物理地址空间的任意位置,但虚拟地址落在虚拟地址空间中3G~3G+896M的位置。
如果我理解的不对,欢迎拍砖。 |
|