【Linux 内核 内存管理】优化内存屏障 ② ( 内存屏障 | 编译器屏障 | 处理器内存屏障 | 内存映射 I/O 写屏障 )
生活随笔
收集整理的這篇文章主要介紹了
【Linux 内核 内存管理】优化内存屏障 ② ( 内存屏障 | 编译器屏障 | 处理器内存屏障 | 内存映射 I/O 写屏障 )
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、內存屏障
- 二、編譯器屏障
- 三、處理器內存屏障
一、內存屏障
內存屏障 , 又稱為 " 屏障指令 " , 用于保證 " 編譯器 “ 或 ” CPU “ 訪問內存時 , 保證 按照順序執行 , 即 ” 內存屏障 之前 “ 的指令 與 ” 內存屏障 之后 " 的指令 不會猶豫 編譯器 和 CPU 優化導致 順序混亂 ;
" 指令 " 優化主要分 222 種 :
- ① 編譯器優化 : 為了 提高程序執行性能 , 編譯器會在 不影響 程序邏輯的前提下 , 對程序指令進行優化 , 主要操作是 調整程序指令的執行順序 ;
- ② CPU 執行優化 : 該優化是為了 提高 " 流水線 " 性能 , 但是 CPU 執行優化會導致 指令亂序執行 , 后面的指令先于前面的指令執行 , 導致 寄存器中的值沖突 ;
Linux 內核支持的 333 種內核屏障 :
- ① 編譯器屏障
- ② 處理器內存屏障
- ③ 內存映射 I/O 寫屏障 , 全稱 Memory Mapping I/O , 簡稱 MMIO , 目前已經被棄用 ;
二、編譯器屏障
" 編譯器屏障 “ 針對 ” 編譯器優化 " ;
編譯器優化 是 為了 提高程序執行性能 ,
編譯器會在編譯代碼時 ,
在 不影響 程序邏輯的前提下 , 對程序指令進行重排 , 主要操作是 調整程序指令的執行順序 ;
優化后的結果 , 可能 不符合軟件開發想要開發的需求 ;
三、處理器內存屏障
" 處理器內存屏障 “ 針對 ” CPU " 之間的內存訪問亂序 和 CPU 訪問外設亂序 問題 ;
為了 提高 " 流水線 " 性能 , 新式處理器可以采用 " 超標量 體系結構 “ 和 ” 亂序執行 " 技術 , 可以在 一個時鐘周期 中 并行執行多條指令 ;
但是 CPU 執行優化會導致 指令亂序執行 , 后面的指令先于前面的指令執行 , 導致 寄存器中的值沖突 ;
CPU 執行優化總結 :
- 順序取指令 ,
- 亂序執行 ,
- 執行結果順序提交 ;
總結
以上是生活随笔為你收集整理的【Linux 内核 内存管理】优化内存屏障 ② ( 内存屏障 | 编译器屏障 | 处理器内存屏障 | 内存映射 I/O 写屏障 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Linux 内核 内存管理】优化内存屏
- 下一篇: 【Linux 内核 内存管理】优化内存屏