免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1595 | 回复: 1
打印 上一主题 下一主题

[内存管理] 什么是固定映射 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-14 20:29 |只看该作者 |倒序浏览
每个固定映射的线性地址都由定义于enum fixed_addresses数据结构中的整型索引来表示:
enum fixed_addresses {
FIX_HOLE,
FIX_VSYSCALL,
FIX_APIC_BASE,
FIX_IO_APIC_BASE_0,
[...]
__end_of_fixed_addresses
};
上面枚举类型中的元素(FIX_HOLE,FIX_VSYSCALL)等事实上是从0开始逐渐加1的值,请问他们表示什么意思呢?

fix_to_virt( )函数计算从给定索引开始的常量线性地址:
inline unsigned long fix_to_virt(const unsigned int idx)
{
if (idx >= _ _end_of_fixed_addresses)
__this_fixmap_does_not_exist( );
return (0xfffff000UL - (idx << PAGE_SHIFT));
}
请问上面0xfffff000表示什么呢?idx << PAGE_SHIFT表示什么?整个表达式又是什么意思呢?

还有到底什么叫固定映射?

论坛徽章:
0
2 [报告]
发表于 2013-08-16 12:32 |只看该作者
1、0xfffff000表示什么呢?4GB-4KB,即4GB线性地址空间的最后一页地址
2、idx << PAGE_SHIFT:第idx个页地址
3、(0xfffff000UL - (idx << PAGE_SHIFT));最后一页往下数idx个页的地址,比如:idx=1时,是最后第二页
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP