当前位置: 技术问答>linux和unix
急寻分段和段页式存储管理方式的地址换算过程的演示代码
来源: 互联网 发布时间:2015-12-04
本文导语: 如题,有哪位前辈帮帮忙,谢谢! | Linux下虚地址到物理页面的转换. 具体可以参考内核的实现 #ifdef CONFIG_X86 unsigned long vpfn = vaddr/PAGE_SIZE; pgd = pgd_offset(mm, vaddr); pte = (pte_t *)pmd_offset(...
如题,有哪位前辈帮帮忙,谢谢!
|
Linux下虚地址到物理页面的转换.
具体可以参考内核的实现
#ifdef CONFIG_X86
unsigned long vpfn = vaddr/PAGE_SIZE;
pgd = pgd_offset(mm, vaddr);
pte = (pte_t *)pmd_offset(pgd, vaddr);
page = &pte_page(*pte)[vpfn % (HPAGE_SIZE/PAGE_SIZE)];
get_page(page);
#endif
#ifdef CONFIG_IA64
unsigned long vpfn = vaddr/PAGE_SIZE;
unsigned long taddr = ((REGION_NUMBER(vaddr) (HPAGE_SHIFT_DEFAULT-PAGE_SHIFT)));
pgd = pgd_offset(mm, taddr);
if (pgd_present(*pgd)) {
pmd = pmd_offset(pgd, taddr);
if (pmd_present(*pmd))
pte = pte_offset_map(pmd, taddr);
}
page = &pte_page(*pte)[vpfn % ((__IA64_UL_CONST(1)
具体可以参考内核的实现
#ifdef CONFIG_X86
unsigned long vpfn = vaddr/PAGE_SIZE;
pgd = pgd_offset(mm, vaddr);
pte = (pte_t *)pmd_offset(pgd, vaddr);
page = &pte_page(*pte)[vpfn % (HPAGE_SIZE/PAGE_SIZE)];
get_page(page);
#endif
#ifdef CONFIG_IA64
unsigned long vpfn = vaddr/PAGE_SIZE;
unsigned long taddr = ((REGION_NUMBER(vaddr) (HPAGE_SHIFT_DEFAULT-PAGE_SHIFT)));
pgd = pgd_offset(mm, taddr);
if (pgd_present(*pgd)) {
pmd = pmd_offset(pgd, taddr);
if (pmd_present(*pmd))
pte = pte_offset_map(pmd, taddr);
}
page = &pte_page(*pte)[vpfn % ((__IA64_UL_CONST(1)
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。