【Linux 内核 内存管理】优化内存屏障 ② ( 内存屏障 | 编译器屏障 | 处理器内存屏障 | 内存映射 I/O 写屏障 )
文章目录
- 一、内存屏障
- 二、编译器屏障
- 三、处理器内存屏障
一、内存屏障
内存屏障 , 又称为 " 屏障指令 " , 用于保证 " 编译器 “ 或 ” CPU “ 访问内存时 , 保证 按照顺序执行 , 即 ” 内存屏障 之前 “ 的指令 与 ” 内存屏障 之后 " 的指令 不会犹豫 编译器 和 CPU 优化导致 顺序混乱 ;
" 指令 " 优化主要分 222 种 :
- ① 编译器优化 : 为了 提高程序执行性能 , 编译器会在 不影响 程序逻辑的前提下 , 对程序指令进行优化 , 主要操作是 调整程序指令的执行顺序 ;
- ② CPU 执行优化 : 该优化是为了 提高 " 流水线 " 性能 , 但是 CPU 执行优化会导致 指令乱序执行 , 后面的指令先于前面的指令执行 , 导致 寄存器中的值冲突 ;
Linux 内核支持的 333 种内核屏障 :
- ① 编译器屏障
- ② 处理器内存屏障
- ③ 内存映射 I/O 写屏障 , 全称 Memory Mapping I/O , 简称 MMIO , 目前已经被弃用 ;
二、编译器屏障
" 编译器屏障 “ 针对 ” 编译器优化 " ;
编译器优化 是 为了 提高程序执行性能 ,
编译器会在编译代码时 ,
在 不影响 程序逻辑的前提下 , 对程序指令进行重排 , 主要操作是 调整程序指令的执行顺序 ;
优化后的结果 , 可能 不符合软件开发想要开发的需求 ;
三、处理器内存屏障
" 处理器内存屏障 “ 针对 ” CPU " 之间的内存访问乱序 和 CPU 访问外设乱序 问题 ;
为了 提高 " 流水线 " 性能 , 新式处理器可以采用 " 超标量 体系结构 “ 和 ” 乱序执行 " 技术 , 可以在 一个时钟周期 中 并行执行多条指令 ;
但是 CPU 执行优化会导致 指令乱序执行 , 后面的指令先于前面的指令执行 , 导致 寄存器中的值冲突 ;
CPU 执行优化总结 :
- 顺序取指令 ,
- 乱序执行 ,
- 执行结果顺序提交 ;
【Linux 内核 内存管理】优化内存屏障 ② ( 内存屏障 | 编译器屏障 | 处理器内存屏障 | 内存映射 I/O 写屏障 )相关推荐
- C++ 动态内存管理:c/c++的动态内存管理,new/delete,operator new/delete,placement-new, 内存泄漏
c/c++的动态内存管理 new/delete opeartor new/delete placement-new 内存泄漏 c/c++的动态内存管理 在开始之前首先要了解c和c++的内存分布,我简单 ...
- Linux内核页表管理-那些鲜为人知的秘密
1.开场白 环境: 处理器架构:arm64 内核源码:linux-5.11 ubuntu版本:20.04.1 代码阅读工具:vim+ctags+cscope 通用操作系统,通常都会开启mmu来支持虚拟 ...
- Linux内核-进程管理
Linux内核-进程管理 引言 本文主要介绍Linux内核进程管理相关知识,包括进程描述符.进程创建.销毁.状态.线程的实现以及Linux进程相关命令等. 进程描述符 内核把进程的列表存放在叫做任务队 ...
- Linux内核网络性能优化
Linux内核网络性能优化 1. 前言 2. Linux网络协议栈 3. DPDK 4. XDP 4.1 XDP主要的特性 4.2 XDP与DPDK的对比 4.3 应用场景 5. CPU负载均衡 5. ...
- 挑战360无死角讲解Linux内核 进程管理,调度器的5种实现丨C++后端开发丨C/C++Linux服务器开发丨内核开发丨网络编程
挑战360无死角讲解 进程管理,调度器的5种实现 1. 8500行 CFS是什么 2. RT调度器使用场景 3. IDLE/Dealine调度器 视频讲解如下,点击观看: 挑战360无死角讲解Linu ...
- Linux 驱动开发 三十五:Linux 内核时钟管理
参考: linux时间管理,时钟中断,系统节拍_u010936265的博客-CSDN博客_系统节拍时钟中断 Linux内核时钟系统和定时器实现_anonymalias的专栏-CSDN博客_linux内 ...
- Linux内核如何管理内存
在学习了进程的 虚拟地址布局 之后,让我们回到内核,来学习它管理用户内存的机制.这里再次使用 Gonzo: Linux kernel mm_struct Linux 进程在内核中是作为进程描述符 ta ...
- linux 内存管理优化,Linux性能优化实战 内存篇 阅读笔记
第十五讲 基础篇:Linux内存是怎么工作的(2020.6.8) 这一讲相关的内容正好之前看csapp的时候总结了一下,可以直接贴出来作为总结了. Linux的内存工作原理,这又是一个特别大的话题.一 ...
- Linux内存管理 brk(),mmap()系统调用源码分析2:brk()的内存释放流程
Linux brk(),mmap()系统调用源码分析 brk()的内存释放流程 荣涛 2021年4月30日 内核版本:linux-5.10.13 注释版代码:https://github.com/Rt ...
最新文章
- 2014百度之星 Xor Sum(字典树+贪心)
- 学习lulu之——tips 提示
- Class.getResourceAsStream和ClassLoader.getResourceAsStream方法
- SurfaceFlinger与Surface概述
- 移动应用程序和网页应用程序_如何开发感觉像本机移动应用程序的渐进式Web应用程序...
- QML笔记-使用connect界面数据交互(qml中Designer使用)
- ( linker command failed with exit code 1) 错误解决方案 项目使用的是pod
- 前端发送的字符串有大小限制吗_前端经典面试题 30道
- 自考----怎么说我不爱你
- Egret之属性绑定
- ajax获取session值_【JavaWeb】91:Cookie与Session
- vue生命周期心得体会800字
- Hbase 的Java API 操作
- profibus GSD文件详解
- adb inputswipe shell_adb shell 基本使用
- JSP从入门到精通_课堂实战视频教程
- 计算机数学基础:斜率与截距、导数、权重的关系
- 【XSY3331】东非大裂谷(结论,DP)
- 【毕业设计】 stm32智能运动计步系统 - 物联网 嵌入式 单片机
- uniGUI获取设备信息
热门文章
- 【linux排错】error while loading shared libraries: xxx.so.x 错误的原因和解决办法
- Javascript 返回上一页
- legend3---lavarel常用artisan命令操作
- mysql 创建库设置中文
- [Swift通天遁地]七、数据与安全-(19)使用Swift实现原生的SHA1加密
- Gson与FastJson比较
- 移动端geolocation插件+百度地图js获取地址
- Ganglia 调试技巧
- [转]Windows Shell 编程 第十一章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987992】...
- IE6Bug,外层container设置了overflow:auto,但是内层嵌套元素有position:relative的时候,显示错误。...