天天看點

5、存儲器的層次結構

先想象中一個場景,大學期末準備考試了,你前去圖書館臨時抱佛腳。那麼,在看書的時候,我們的大腦會思考問題,也會記憶知識點,另外我們通常也會把常用的書放在自己的桌子上,當我們要找一本不常用的書,則會去圖書館的書架找。就是這麼一個小小的場景,已經把計算機的存儲結構基本都涵蓋了。

我們可以把 CPU 比喻成我們的大腦,大腦正在思考的東西,就好比 CPU 中的寄存器,處理速度是最快的,但是能存儲的資料也是最少的,畢竟我們也不能一下同時思考太多的事情,除非你練過。大腦中的記憶,就好比 CPU Cache,中文稱為 CPU 高速緩存,處理速度相比寄存器慢了一點,但是能存儲的資料也稍微多了一些。CPU Cache 通常會分為 L1、L2、L3 三層,其中 L1 Cache 通常分成「資料緩存」和「指令緩存」,L1 是距離 CPU 最近的,是以它比 L2、L3 的讀寫速度都快、存儲空間都小。我們大腦中短期記憶,就好比 L1 Cache,而長期記憶就好比 L2/L3 Cache。

說明:寄存器和 CPU Cache 都是在 CPU 内部,跟 CPU 挨着很近,是以它們的讀寫速度都相當的快,但是能存儲的資料很少。

當我們大腦記憶中沒有資料的時候,可以從書桌或書架上拿書來閱讀,那我們桌子上的書,就好比記憶體,我們雖然可以一伸手就可以拿到,但讀寫速度肯定遠慢于寄存器,那圖書館書架上的書,就好比硬碟,能存儲的資料非常大,但是讀寫速度相比記憶體差好幾個數量級,更别說跟寄存器的差距了。

5、存儲器的層次結構

從圖書館書架取書,把書放到桌子上,再閱讀書,我們大腦就會記憶知識點,然後再經過大腦思考,這一系列過程相當于,資料從硬碟加載到記憶體,再從記憶體加載到 CPU 的寄存器和 Cache 中,然後再通過 CPU 進行處理和計算。

對于存儲器,它的速度越快、能耗會越高、而且材料的成本也是越貴的,以至于速度快的存儲器的容量都比較小。

CPU 裡的寄存器和 Cache,是整個計算機存儲器中價格最貴的,雖然存儲空間很小,但是讀寫速度是極快的,而相對比較便宜的記憶體和硬碟,速度肯定比不上 CPU 内部的存儲器,但是能彌補存儲空間的不足。

1、寄存器

最靠近 CPU 的控制單元和邏輯計算單元的存儲器,就是寄存器了,它使用的材料速度也是最快的,是以價格也是最貴的,那麼數量不能很多。

存儲器的數量通常在幾十到幾百之間,每個寄存器可以用來存儲一定的位元組(byte)的資料。比如:

  • 32 位 CPU 中大多數寄存器可以存儲​

    ​4​

    ​ 個位元組;
  • 64 位 CPU 中大多數寄存器可以存儲​

    ​8​

    ​ 個位元組。

寄存器的通路速度非常快,一般要求在半個 CPU 時鐘周期内完成讀寫,CPU 時鐘周期跟 CPU 主頻息息相關,比如 2 GHz 主頻的 CPU,那麼它的時鐘周期就是 1/2G,也就是 0.5ns(納秒)。

CPU 處理一條指令的時候,除了讀寫寄存器,還需要解碼指令、控制指令執行和計算。如果寄存器的速度太慢,則會拉長指令的處理周期,進而給使用者的感覺,就是電腦「很慢」。

2、​​CPU Cache

CPU Cache 用的是一種叫 SRAM(Static Random-Access Memory,靜态随機存儲器) 的晶片。

SRAM 之是以叫「靜态」存儲器,是因為隻要有電,資料就可以保持存在,而一旦斷電,資料就會丢失了。

在 SRAM 裡面,一個 bit 的資料,通常需要 6 個半導體,是以 SRAM 的存儲密度不高,同樣的實體空間下,能存儲的資料是有限的,不過也因為 SRAM 的電路簡單,是以通路速度非常快。

CPU 的高速緩存,通常可以分為 L1、L2、L3 這樣的三層高速緩存,也稱為一級緩存、二級緩存、三級緩存。

5、存儲器的層次結構

L1 高速緩存

L1 高速緩存的通路速度幾乎和寄存器一樣快,通常隻需要 ​

​2~4​

​​ 個時鐘周期,而大小在幾十 KB 到幾百 KB 不等。

每個 CPU 核心都有一塊屬于自己的 L1 高速緩存,指令和資料在 L1 是分開存放的,是以 L1 高速緩存通常分成指令緩存和資料緩存。

在 Linux 系統,我們可以通過這條指令,檢視 CPU 裡的 L1 Cache 「資料」緩存的容量大小:

$ cat /sys/devices/system/cpu/cpu0/cache/index0/size
32K      

而檢視 L1 Cache 「指令」緩存的容量大小,則是:

$ cat /sys/devices/system/cpu/cpu0/cache/index1/size
32K      

L2 高速緩存

L2 高速緩存同樣每個 CPU 核心都有,但是 L2 高速緩存位置比 L1 高速緩存距離 CPU 核心 更遠,它大小比 L1 高速緩存更大,CPU 型号不同大小也就不同,通常大小在幾百 KB 到幾 MB 不等,通路速度則更慢,速度在 ​

​10~20​

​​ 個時鐘周期。

在 Linux 系統,我們可以通過這條指令,檢視 CPU 裡的 L2 Cache 的容量大小:

$ cat /sys/devices/system/cpu/cpu0/cache/index2/size
256K      

L3 高速緩存

L3 高速緩存通常是多個 CPU 核心共用的,位置比 L2 高速緩存距離 CPU 核心 更遠,大小也會更大些,通常大小在幾 MB 到幾十 MB 不等,具體值根據 CPU 型号而定。

通路速度相對也比較慢一些,通路速度在 ​

​20~60​

​​個時鐘周期。

在 Linux 系統,我們可以通過這條指令,檢視 CPU 裡的 L3 Cache 的容量大小:

$ cat /sys/devices/system/cpu/cpu0/cache/index3/size 
3072K      

3、記憶體

記憶體用的晶片和 CPU Cache 有所不同,它使用的是一種叫作 DRAM (Dynamic Random Access Memory,動态随機存取存儲器) 的晶片。

相比 SRAM,DRAM 的密度更高,功耗更低,有更大的容量,而且造價比 SRAM 晶片便宜很多。

DRAM 存儲一個 bit 資料,隻需要一個半導體和一個電容就能存儲,但是因為資料會被存儲在電容裡,電容會不斷漏電,是以需要「定時重新整理」電容,才能保證資料不會被丢失,這就是 DRAM 之是以被稱為「動态」存儲器的原因,隻有不斷重新整理,資料才能被存儲起來。

DRAM 的資料通路電路和重新整理電路都比 SRAM 更複雜,是以通路的速度會更慢,記憶體速度大概在 ​

​200~300​

​ 個 時鐘周期之間。

4、​SSD/HDD 硬碟