【Linux 内核 内存管理】优化内存屏障 ③ ( 编译器屏障 | 禁止 / 开启内核抢占 与 方法保护临界区 | preempt_disable 禁止内核抢占源码 | 开启内核抢占源码 )
文章目录
一、禁止 / 开启内核抢占 与 方法保护临界区
如果要使用 " 内存屏障 " , 如 : 禁止 内核 抢占 " 方法保护临界区 " :
首先 , 声明 preempt_disable();
宏 , 表示下面的代码就是 " 方法保护临界区 " 内的代码 , 这些代码禁止 内核 抢占 ;
然后 , 编写 " 方法保护临界区 " 代码 ;
最后 , 使用 preempt_enable();
宏 , 表示之后的代码允许 内核 抢占 ;
preempt_disable();
与 preempt_enable();
之间的代码 , 就是 " 方法保护临界区 " 代码 , 这样可以 阻止编译器重排指令 , 在 禁止 内核抢占 preempt_disable
与 开启内核抢占 preempt_enable
之间的 " 方法保护临界区 " 代码中 , 添加 " 编译器优化屏障 " ;
声明 " 方法保护临界区 " 代码示例 :
preempt_disable();
// 方法保护临界区
preempt_enable();
二、编译器优化屏障
gcc 编译器优化屏障 参考 【Linux 内核 内存管理】优化内存屏障 ① ( barrier 优化屏障 | 编译器优化 | CPU 执行优化 | 优化屏障源码 barrier 宏 ) 博客 ; " 编译器优化屏障 " 是通过 barrier()
宏定义 实现的 , gcc 编译器 的 " 优化屏障 " 定义在 linux-5.6.18\include\linux\compiler-gcc.h
源码中 ;
/* Optimization barrier */
/* The "volatile" is due to gcc bugs */
#define barrier() __asm__ __volatile__("": : :"memory")
源码路径 : linux-5.6.18\include\linux\compiler-gcc.h#20
三、preempt_disable 禁止内核抢占 源码
在 Linux 内核源码 linux-5.6.18\include\linux\preempt.h
中 , 定义了 preempt_disable
宏 ;
preempt_disable() 宏源码如下 :
#define preempt_disable() \
do { \
preempt_count_inc(); \
barrier(); \
} while (0)
源码路径 : linux-5.6.18\include\linux\preempt.h#169
四、preempt_enable 开启内核抢占 源码
在 Linux 内核源码 linux-5.6.18\include\linux\preempt.h
中 , 定义了 preempt_enable
宏
#ifdef CONFIG_PREEMPTION
#define preempt_enable() \
do { \
barrier(); \
if (unlikely(preempt_count_dec_and_test())) \
__preempt_schedule(); \
} while (0)
源码路径 : linux-5.6.18\include\linux\preempt.h#185
相关文章
- Linux 下查看内核参数的方法(linux查看内核设置)
- 学习Linux:获知不一样的价格标准(linux学费)
- 修改Linux内核:探究其神奇魅力(linux源码修改)
- 如何快速启动Linux系统(怎样启动linux)
- Linux开启无极限兼容之旅(linux兼容内核)
- 深入Linux:查询服务器内存实例(linux查询服务器内存)
- Linux:开放源码的操作系统内核(linux是什么内核)
- 驱动 Linux 加载无线网卡驱动程序的步骤 Linux加载无线网卡驱动:完整步骤详解(linux加载无线网卡)
- Linux如何删除指定行的文件(linux删除指定行)
- 缓存Linux系统清理缓存快速减负(linux清除)
- 走进新时代:了解Linux上网本(上网本linux)
- Linux虚拟机中安装Qt的指南(linux虚拟机安装qt)
- 手机解锁Linux之路:刷安卓手机(linux刷安卓)
- Git实现Linux内核快速下载(git下载linux内核)
- Linux中查看文件/目录数量的方法(linux查看个数)
- Linux终端下的VI之旅(linux终端vi)
- 开启Linux系统安全优化之旅(linux系统安全优化)
- 深入探究Linux内核文件路径(linux内核文件路径)
- 手把手教你制作Linux内核(linux 内核 制作)
- Linux内核视频教程:精彩技术深度解析一步步学习(linux 内核视频教程)
- 原理Linux内核:深入理解实现原理(linux内核实现)
- Linux内核虚拟化: 迈向新世纪的信息技术创新(linux内核虚拟化)
- Linux下快速刷新内存的方法(linux刷新内存)
- Linux C语言开发串口通信应用程序(linux c 串口通信)