天天看點

作業系統–前言05--存儲器-緩存

存儲器分級政策

不能用一塊存儲器來解決所有的需求,那就必須把需求分級。

一種可行的方案,

  • 根據資料的使用頻率使用不同的存儲器:
  • 高頻使用的資料,讀寫越快越好,是以用最貴的材料,放到離 CPU 最近的位置;
  • 使用頻率越低的資料,我們放到離 CPU 越遠的位置,用越便宜的材料。

寄存器分為6個級别

  1. 寄存器;
  2. L1-Cache;
  3. L2-Cache;
  4. L3-Cahce;
  5. 記憶體;
  6. 硬碟/SSD。

寄存器 --> l1-cache --> l2-cache --> l3-cache --> 記憶體 --> SSD/磁盤

從左到右,距離CPU逐漸變遠,讀取速度逐漸減低,空間逐漸增大。

寄存器:

寄存器緊挨着CPU的控制單元和邏輯計算單元,是以使用的材料是速度最快的,因而儲存的速度最快,耗能就最高,産熱就最大,而且花費也是最貴的,是以數量不多.

  • 32 位 CPU 中大多數寄存器可以存儲 4 個位元組;
  • 64 位 CPU 中大多數寄存器可以存儲 8 個位元組。

寄存器的通路速度非常快,一般在半個CPU時鐘周期内完成

L1-Cache

L1- 緩存在 CPU 中,相比寄存器,雖然它的位置距離 CPU 核心更遠,但造價更低。通常 L1-Cache 大小在幾十 Kb 到幾百 Kb 不等,讀寫速度在 2~4 個 CPU 時鐘周期。

L2-Cache

L2- 緩存也在 CPU 中,位置比 L1- 緩存距離 CPU 核心更遠。它的大小比 L1-Cache 更大,具體大小要看 CPU 型号,有 2M 的,也有更小或者更大的,速度在 10~20 個 CPU 周期。

L3-Cache

L3- 緩存同樣在 CPU 中,位置比 L2- 緩存距離 CPU 核心更遠。大小通常比 L2-Cache 更大,讀寫速度在 20~60 個 CPU 周期。

L3 緩存大小也是看型号的,比如 i9 CPU 有 512KB L1 Cache;有 2MB L2 Cache; 有16MB L3 Cache。

記憶體

記憶體的主要材料是半導體矽,是插在主機闆上工作的。因為它的位置距離 CPU 有一段距離,是以需要用總線和 CPU 連接配接。因為記憶體有了獨立的空間,是以體積更大,造價也比上面提到的存儲器低得多。現在有的個人電腦上的記憶體是 16G,但有些伺服器的記憶體可以到幾個 T。記憶體速度大概在 200~300 個 CPU 周期之間。

SSD和硬碟

SSD也叫固态硬碟結構和記憶體類似,

主要的優點就是在于斷電後資料還在.記憶體,寄存器,緩存斷電後資料就消失了.記憶體的記憶體的讀寫速度比 SSD 大概快 10~1000 倍

當CPU需要記憶體中某個資料的時候,如果寄存器這個資料,直接用,如果寄存器沒有這個資料,查詢 L1 緩存;L1 中沒有,再查詢 L2 緩存;L2 中沒有再查詢 L3 緩存;L3 中沒有,再去記憶體中拿。

緩存條目結構

無論是緩存還是,記憶體,是一個線性儲存器,也就是資料一個挨着一個的儲存.比如:把記憶體想象成一個隻有 1 列的表格,那麼緩存就是一個多列的表格,這個表格中的每一行叫作一個緩存條目。

方案 1

緩存本質上是一個 Key-Value 的存儲,它的 Key 是記憶體位址,值是緩存時刻記憶體位址中的值。

  • 記憶體的位址;
  • 緩存的值。

CPU讀取到一個記憶體位址,就增加一個條目.當查詢一個記憶體位址的資料在不在 L1- 緩存中的時候,可以周遊每個條目,,看條目中的記憶體位址是否和查詢的記憶體位址相同.如果相同,我們就取出條目中的緩存的值.

缺點:效率低.

方案 2

想要快速的定位緩存條目可以通過取餘(類似hash算法)快速定位緩存條目位置。位址 % 10

指令的預讀

通過對于指令的預讀,使得讀取指令的速度跟的上指令的執行速度。減少指令從記憶體中的讀取次數(更耗時),其實就是批處理。

緩存的命中:

所謂命中就是指在緩存中找的需要的資料.和命中相反的是穿透,也叫miss.就是一次讀取操作沒有從緩存中找到對應的資料。

  • l1的緩存命中率約為80%,
  • l1 l2 l3緩存加在一塊命中率高達95%。
  • CPU 緩存的設計還是相當合理的。隻有 5% 的記憶體讀取會穿透到記憶體,95% 都能讀取到緩存。

緩存置換:

當緩存滿了之後,再讀取資料到緩存将置換掉之前的緩存。

SSD、記憶體和 L1 Cache 相比速度差多少倍?

繼續閱讀