linux内核中的__read_mostly变量

linux内核中的__read_mostly变量
 
内核版本:2.6.14
在阅读socket 源码的时候,有如下一句(net/socket.c):
[plain] 
static struct vfsmount *sock_mnt __read_mostly;  
感觉__read_mostly很奇怪,就深入分析了一下。
__read_mostly原语将定义为存放在.data.read_mostly段中。
  www.2cto.com  
[plain] 
#if defined(CONFIG_X86) || defined(CONFIG_SPARC64)  
#define __read_mostly __attribute__((__section__(".data.read_mostly")))  
#else  
#define __read_mostly  
#endif  
由此可见,我们可以将经常需要被读取的数据定义为 __read_mostly类型,这样Linux内核被加载时,该数据将自动被存放到Cache中,以提高整个 系统的执行效率。另一方面,如果所在的平台没有Cache,或者虽然有Cache,但并不提供存放数据的接口(也就是并不允许人工放置数据在Cache中),这样定义为 __read_mostly类型的数据将不能存放在 Linux内核中,甚至也不能够被加载到系统内存去执行,将造成Linux 内核启动失败。
 
解决的方法有两种:
修改include/asm/cache.h中的__ready_mostly定义为:#define __read_mostly
修改arch/xxx/kernel/vmlinux.S,将.data.read_mostly段的位置到实际内存空间中去,例如放置在 .data段之后等等。
此外,内核源码通过CONFIG_X86)和(CONFIG_SPARC64)来判断该怎样定义__read_mostly,因此在arm中这个宏没有意义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值