CPU內存結構

開局一張圖

因爲CPU頻率太快了,爲解決直接讀取內存的數據上的延遲,在CPU和內存之間,存在3級緩存。 CPU在解決和緩存不一致上採用兩種方式:緩存

  1. 緩存一致性協議
  2. 總線鎖機制

CPU

CPU的一個時鐘週期指的是機器碼的0和1的變化,是電信號的一高一低的變化是10納秒左右,1s至關於10的9次方納秒。安全

市面上的緩存基本採用SRAM存儲器,能夠不須要電路就能保存內部數據,不像DRAM須要定時刷新充電一次,否則數據會丟失。多線程

所以SRAM具備更好的性能,可是缺點是體積較大,這也是不能將緩存容量作太大的緣由。架構

爲提升CPU的利用率,會增長多級緩存,但數據讀取和寫入都是在主存上進行的。性能

RAM

RAM(隨機讀寫存儲器)工做原理大概是:線程

當cpu讀取主存時,將地址信號放到地址總線傳遞給主存,主存讀取地址信號後,解析信號,並定位到指定存儲單元,而後將存儲單元數據放到總線上返回給CPU,這個慢體如今電信號打交道上。blog

磁盤的慢體如今他是須要藉助磁頭移動的,這個尋址過程伴隨着機械運動,因此就更慢了。內存

MESI

每一個線程都有本身的緩存,這也每每形成多線程數據安全的問題。這時就須要一種協議保證緩存一致性。原理

保證線程在讀取主存時遵循某種規則,保證不出現數據不一致的問題,比較多的就是MESI協議。im

MESI定義了cache line的四種狀態,線程對cache line的四種操做可能產生不一致狀態。

  • M:(modified 被修改) 某CPU緩存某個緩存行和主存數據的不一致,該緩存行須要在將來某個時間點回寫主存,回寫以後狀態變爲(exclusive 獨享)

  • E:(exclusive 獨享)CPU緩存中的某個緩存行和主存數據一致,處於這個狀態的能夠被其餘CPU讀取內存時變成(shared 共享),修改時變成(modified 被修改)

  • S:(shared 共享)某緩存行可能被多個CPU緩存,而且各個緩存中的數據和主存一致,當一個CPU修改該緩存行,其餘CPU中該緩存行能夠變成(invalid 無效)狀態

  • I:(invalid 無效)該行是無效的(可能其餘CPU修改了該緩存行)

當緩存控制器監聽到本地操做和遠程操做的時候,須要對地址一致的cache line進行一致性修改,保證數據在多個緩存之間一致。 cache line能夠根據MESI協議達到不一樣狀態之間的轉化,一個處於M狀態的緩存行必須時刻監聽全部試圖讀該緩存行相應的主存操做,必須該緩存行回寫主存並將狀態變成S才能夠。

總線鎖

MESI協議以前,解決緩存一致性方案是總線鎖機制,這種方案比較低效,鎖期間,其餘CPU沒法訪問內存。

CPU亂序

多核時代,處理器爲提升運算速度,可能做出違背代碼原有初衷的行爲。 解決這種問題的方式就是內存屏障,簡單點說是不一樣的處理器架構提供了不一樣指令集用來創建內存屏障,這樣控制不可亂序。

相關文章
相關標籤/搜索