文章目录

  • 一、内存屏障
  • 二、编译器屏障
  • 三、处理器内存屏障

一、内存屏障


内存屏障 , 又称为 " 屏障指令 " , 用于保证 " 编译器 “ 或 ” CPU “ 访问内存时 , 保证 按照顺序执行 , 即 ” 内存屏障 之前 “ 的指令 与 ” 内存屏障 之后 " 的指令 不会犹豫 编译器 和 CPU 优化导致 顺序混乱 ;

" 指令 " 优化主要分 222 种 :

  • ① 编译器优化 : 为了 提高程序执行性能 , 编译器会在 不影响 程序逻辑的前提下 , 对程序指令进行优化 , 主要操作是 调整程序指令的执行顺序 ;
  • ② CPU 执行优化 : 该优化是为了 提高 " 流水线 " 性能 , 但是 CPU 执行优化会导致 指令乱序执行 , 后面的指令先于前面的指令执行 , 导致 寄存器中的值冲突 ;

Linux 内核支持的 333 种内核屏障 :

  • ① 编译器屏障
  • ② 处理器内存屏障
  • ③ 内存映射 I/O 写屏障 , 全称 Memory Mapping I/O , 简称 MMIO , 目前已经被弃用 ;

二、编译器屏障


" 编译器屏障 “ 针对 ” 编译器优化 " ;

编译器优化 是 为了 提高程序执行性能 ,

编译器会在编译代码时 ,

在 不影响 程序逻辑的前提下 , 对程序指令进行重排 , 主要操作是 调整程序指令的执行顺序 ;

优化后的结果 , 可能 不符合软件开发想要开发的需求 ;

三、处理器内存屏障


" 处理器内存屏障 “ 针对 ” CPU " 之间的内存访问乱序 和 CPU 访问外设乱序 问题 ;

为了 提高 " 流水线 " 性能 , 新式处理器可以采用 " 超标量 体系结构 “ 和 ” 乱序执行 " 技术 , 可以在 一个时钟周期 中 并行执行多条指令 ;

但是 CPU 执行优化会导致 指令乱序执行 , 后面的指令先于前面的指令执行 , 导致 寄存器中的值冲突 ;

CPU 执行优化总结 :

  • 顺序取指令 ,
  • 乱序执行 ,
  • 执行结果顺序提交 ;

【Linux 内核 内存管理】优化内存屏障 ② ( 内存屏障 | 编译器屏障 | 处理器内存屏障 | 内存映射 I/O 写屏障 )相关推荐

  1. C++ 动态内存管理:c/c++的动态内存管理,new/delete,operator new/delete,placement-new, 内存泄漏

    c/c++的动态内存管理 new/delete opeartor new/delete placement-new 内存泄漏 c/c++的动态内存管理 在开始之前首先要了解c和c++的内存分布,我简单 ...

  2. Linux内核页表管理-那些鲜为人知的秘密

    1.开场白 环境: 处理器架构:arm64 内核源码:linux-5.11 ubuntu版本:20.04.1 代码阅读工具:vim+ctags+cscope 通用操作系统,通常都会开启mmu来支持虚拟 ...

  3. Linux内核-进程管理

    Linux内核-进程管理 引言 本文主要介绍Linux内核进程管理相关知识,包括进程描述符.进程创建.销毁.状态.线程的实现以及Linux进程相关命令等. 进程描述符 内核把进程的列表存放在叫做任务队 ...

  4. Linux内核网络性能优化

    Linux内核网络性能优化 1. 前言 2. Linux网络协议栈 3. DPDK 4. XDP 4.1 XDP主要的特性 4.2 XDP与DPDK的对比 4.3 应用场景 5. CPU负载均衡 5. ...

  5. 挑战360无死角讲解Linux内核 进程管理,调度器的5种实现丨C++后端开发丨C/C++Linux服务器开发丨内核开发丨网络编程

    挑战360无死角讲解 进程管理,调度器的5种实现 1. 8500行 CFS是什么 2. RT调度器使用场景 3. IDLE/Dealine调度器 视频讲解如下,点击观看: 挑战360无死角讲解Linu ...

  6. Linux 驱动开发 三十五:Linux 内核时钟管理

    参考: linux时间管理,时钟中断,系统节拍_u010936265的博客-CSDN博客_系统节拍时钟中断 Linux内核时钟系统和定时器实现_anonymalias的专栏-CSDN博客_linux内 ...

  7. Linux内核如何管理内存

    在学习了进程的 虚拟地址布局 之后,让我们回到内核,来学习它管理用户内存的机制.这里再次使用 Gonzo: Linux kernel mm_struct Linux 进程在内核中是作为进程描述符 ta ...

  8. linux 内存管理优化,Linux性能优化实战 内存篇 阅读笔记

    第十五讲 基础篇:Linux内存是怎么工作的(2020.6.8) 这一讲相关的内容正好之前看csapp的时候总结了一下,可以直接贴出来作为总结了. Linux的内存工作原理,这又是一个特别大的话题.一 ...

  9. Linux内存管理 brk(),mmap()系统调用源码分析2:brk()的内存释放流程

    Linux brk(),mmap()系统调用源码分析 brk()的内存释放流程 荣涛 2021年4月30日 内核版本:linux-5.10.13 注释版代码:https://github.com/Rt ...

最新文章

  1. 2014百度之星 Xor Sum(字典树+贪心)
  2. 学习lulu之——tips 提示
  3. Class.getResourceAsStream和ClassLoader.getResourceAsStream方法
  4. SurfaceFlinger与Surface概述
  5. 移动应用程序和网页应用程序_如何开发感觉像本机移动应用程序的渐进式Web应用程序...
  6. QML笔记-使用connect界面数据交互(qml中Designer使用)
  7. ( linker command failed with exit code 1) 错误解决方案 项目使用的是pod
  8. 前端发送的字符串有大小限制吗_前端经典面试题 30道
  9. 自考----怎么说我不爱你
  10. Egret之属性绑定
  11. ajax获取session值_【JavaWeb】91:Cookie与Session
  12. vue生命周期心得体会800字
  13. Hbase 的Java API 操作
  14. profibus GSD文件详解
  15. adb inputswipe shell_adb shell 基本使用
  16. JSP从入门到精通_课堂实战视频教程
  17. 计算机数学基础:斜率与截距、导数、权重的关系
  18. 【XSY3331】东非大裂谷(结论,DP)
  19. 【毕业设计】 stm32智能运动计步系统 - 物联网 嵌入式 单片机
  20. uniGUI获取设备信息

热门文章

  1. 【linux排错】error while loading shared libraries: xxx.so.x 错误的原因和解决办法
  2. Javascript 返回上一页
  3. legend3---lavarel常用artisan命令操作
  4. mysql 创建库设置中文
  5. [Swift通天遁地]七、数据与安全-(19)使用Swift实现原生的SHA1加密
  6. Gson与FastJson比较
  7. 移动端geolocation插件+百度地图js获取地址
  8. Ganglia 调试技巧
  9. [转]Windows Shell 编程 第十一章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987992】...
  10. IE6Bug,外层container设置了overflow:auto,但是内层嵌套元素有position:relative的时候,显示错误。...