pte_alloc函数疑惑!!!
时间:2011-01-14
来源:互联网
extern inline pte_t * pte_alloc(pmd_t * pmd, unsigned long address)
{
address = (address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1);//将给的线性地址转换成其所属页面表的下标---即高位的第二个10位,此时,PGD_SHIFT为12.
if (pmd_none(*pmd))//没有该表项
goto getnew;
if (pmd_bad(*pmd))//例行检查,发现是错误的,也就是和页面信息不合适。感觉多余!
goto fix;
return (pte_t *)pmd_page(*pmd) + address;//返回的该地址所属页表中的表项,下一步就是物理地址了。
getnew://分配一个表项。一个页表所占的空间,恰好时一个物理页面。 当释放一个页表的时候,内核将释放的页表先保存在一个缓存池中,而不先将其物理内存释放掉,只有在缓冲池中已经满的情况下,释放。这就是get_pte_fast().如果缓冲池中空的,就要用get_pte_slow()来分配了。
{
unsigned long page = (unsigned long) get_pte_fast();
if (!page)
return get_pte_slow(pmd, address);
set_pmd(pmd, __pmd(_PAGE_TABLE + __pa(page)));//将一些属性标志位和起始地址一起写入页面目录项pgd中。这样,映射的“基础设施”已经弄好。但页面表项pte还是空的,剩下的就是物理内存本身了。那是由handle_pte_fault()完成的。
return (pte_t *)page + address;
}
fix:
__handle_bad_pmd(pmd);
return NULL;
}
问题如下:
上面的红色字体部分,第一个返回的是虚拟的地址,该地址指向pte,
第二个返回的是什么地址?请问?
同时,为什么,set_pmd宏,中的第二个参数要用物理地址?不是说,操作的都是虚拟地址吗???
{
address = (address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1);//将给的线性地址转换成其所属页面表的下标---即高位的第二个10位,此时,PGD_SHIFT为12.
if (pmd_none(*pmd))//没有该表项
goto getnew;
if (pmd_bad(*pmd))//例行检查,发现是错误的,也就是和页面信息不合适。感觉多余!
goto fix;
return (pte_t *)pmd_page(*pmd) + address;//返回的该地址所属页表中的表项,下一步就是物理地址了。
getnew://分配一个表项。一个页表所占的空间,恰好时一个物理页面。 当释放一个页表的时候,内核将释放的页表先保存在一个缓存池中,而不先将其物理内存释放掉,只有在缓冲池中已经满的情况下,释放。这就是get_pte_fast().如果缓冲池中空的,就要用get_pte_slow()来分配了。
{
unsigned long page = (unsigned long) get_pte_fast();
if (!page)
return get_pte_slow(pmd, address);
set_pmd(pmd, __pmd(_PAGE_TABLE + __pa(page)));//将一些属性标志位和起始地址一起写入页面目录项pgd中。这样,映射的“基础设施”已经弄好。但页面表项pte还是空的,剩下的就是物理内存本身了。那是由handle_pte_fault()完成的。
return (pte_t *)page + address;
}
fix:
__handle_bad_pmd(pmd);
return NULL;
}
问题如下:
上面的红色字体部分,第一个返回的是虚拟的地址,该地址指向pte,
第二个返回的是什么地址?请问?
同时,为什么,set_pmd宏,中的第二个参数要用物理地址?不是说,操作的都是虚拟地址吗???
作者: yskcg 发布时间: 2011-01-14
顶起来!!!!
作者: yskcg 发布时间: 2011-01-14
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28