1. 定义

__read_mostly原语将定义的变量为存放在.data.read_mostly段中,原型在include/asm/cache.h 中定义:

#define __read_mostly __attribute__((__section__(".data.read_mostly")))

2. 作用

因为__read_mostl修饰的变量均放在.data.read_mostly段中,因此,我们可以将经常需要被读取的数据定义为__read_mostly类型, 这样Linux内核被加载时,该数据将自动被存放到Cache中,以提高整个系统的执行效率

但是哪……

如果所在平台没有Cache,或者虽然有Cache,但是并不提供存放数据的接口,(也就是并不允许人工放置数据在Cache中), 那么定义为__read_mostly类型的数据将不能存放在Linux内核中,甚至也不能够被加载到系统内存去执行。

如果数据不能存放在linux内核,甚至也不能够被加载到系统内存去执行,后果非常严重,将造成Linux 内核启动失败。

 

3. 后果的避免方案

方案一:

修改include/asm/cache.h中的__ready_mostly定义为:

#define __read_mostly

方案二:

修改arch/xxx/kernel/vmlinux.S文件,将.data.read_mostly段的位置到实际内存空间中去,例如放置在 .data段之后等等。

最新文章

  1. Python之路Day19-Django(二)
  2. .NET平台下开源框架
  3. Linux 信号详解三(sleep,raise)
  4. Two Sigma OA
  5. 通用sqlserver分页存储过程
  6. 基于AWS的自动化部署实践
  7. 启用aspnet
  8. grep命令实例
  9. lnk后缀名打开方式
  10. cross-document message 跨文档通信 HTML5
  11. C++map类型 之 简单介绍
  12. 1.1 Java并发编程的一些概念
  13. ubuntu下无法在目录下创建文件夹,权限不足解决办法
  14. [20180606]如何dump数据库里面的汉字.txt
  15. Oracle Cursor用法总结
  16. 深入Spring Boot:怎样排查 Cannot determine embedded database driver class for database type NONE
  17. FileReader读取文件详解
  18. np.diff函数
  19. MAP 最大后验——利用经验数据获得对未观测量的点态估计
  20. 20155214 2016-2017-2 《Java程序设计》第3周学习总结

热门文章

  1. Java基础之路(三)下--流程控制语句
  2. yolov2训练ICDAR2011数据集
  3. Mysql的2003错误 cant connect to mysql 10060的解决
  4. django进阶-4
  5. centos6.7编译安装mysql5.7.17
  6. 【react-router】从Link组件和a标签的区别说起,react-router如何实现导航并优化DOM性能?
  7. TypeScript入门-基本数据类型
  8. Mycat安装与使用
  9. GNU/Linux与开源文化的那些人和事
  10. Java并发编程:JDK中的阻塞队列