《深入理解電腦系統》自學曆程(一)類比快取邏輯(上)

來源:互聯網
上載者:User

《深入理解電腦系統》筆記

一、首先複習一下

  儲存越大定址時間越慢、效率越低,雖然相對來說每一個資料電腦都會用到,但在某一階段、某一個特定時間,使用到的資料範圍是相對固定的

  處理器需要更快速的處理速度,需要快速得到指令和資料,而這些指令和資料都是存在低級的儲存中(硬碟等本機存放區或網路儲存),單純拿硬碟來說,讀取時間就包括了傳輸時間、旋轉時間、尋道時間,效率太低。為了更快速的讓處理器得到資料,更好的利用處理器的效能,現代處理器演化出了分支預測的功能單元,可以讓處理器在未執行到某一個分支之前就通過投機先行計算(不在本次範圍內)。另外,除了內部的檔案寄存器,電腦將處理器和主存之間增加了多級緩衝,用來存放處理器需要用到的指令和資料。因此,處理器在活動時可以通過分支預測等技術同步的將後續將會使用到的指令和資料載入到緩衝中(指令快取/資料快取),可以讓整個處理器流水線的效率更高。

  註:L0,L1,L2,L3級緩衝的效率都是成百倍的降低,L4主存的效率相比L1更是天差地別。客觀條件相同的情況下,儲存越大定址速度越慢。雖然說從材料上面來說也有不同,不單單是大小的問題,但材料方面不在本次討論範圍內。

二、緩衝

  緩衝是低層次儲存的緩衝,或者說是對低層次緩衝的“凝練和融合”(L1是L2的緩衝,L2是L3的緩衝)。通過建立一套規則和邏輯,我們將低層次儲存中的資料根據需要讀取到高層次緩衝中。

  本次說到的快取的結構劃分為以下幾個部分(概念)

  組  行  資料區塊

  S   E    block

  

  一個快取的大小(C)就是 S*E*B(blockSize)  其中 B S 必須是2的N次冪

 2.1 為什麼要這麼劃分?

  我們需要一套機制,將記憶體位址與快取的索引之間建立關係,上面說的方式就是其中一種。

  S代表了快取的組數,E代表了每組中的行數,B代表每行中的資料區塊大小,通過這S值和B值,我們就可以對記憶體位址進行掩碼處理,並得到相應的組值和資料區塊位移。

       簡單分步驟的說:

    1)電腦中的資訊是用二進位表示的。

    2)S組都是 2的N次冪,代表他們都是通過範圍的2進位位元表示的(如果S=5,那麼值就可能是0,1,10,11,100,101;但三位二進數還有110、111的值,就無法用三位截取地址的方式來計算群組索引了)

    3)B資料區塊也是2的N次冪,原因同S。

  所以 s = log2(S) 就是 組索引在地址中的位元,b = log2(B)就是資料區塊位移的位元。

  1000 1000 1000 1000

     t             s            b

 2.2 t是什嗎?

  t代表標識,設想一下,既然是緩衝,那麼就是將低級儲存進行緩衝,大小一定是比低級儲存更小,所以速度更快。更小代表著較多的資料要使用較小的位置,也就是說多個地址的資料使用一個緩衝位置來存數(覆蓋什麼規則後期再談),那麼久需要一個標識來表示這個緩衝單元中的數到底是哪個記憶體的,否則讀取資料的時候都不知道該讀哪個了。

  t的公式是  memAddrLength - b - s。就是說,去掉組索引位和資料區塊位移位,剩下的就是標識位了。

  

 2.3 結果呢,總體來說快取到底什麼樣子?

  通過組和行我們把快取劃分成了一個樹形結構,當需要讀取低級儲存的時候,先將地址根據t s b的規則進行拆分,通過s找到相應的組(組數*行數*快取單元的大小),再通過標識找到對應的行,然後根據塊位移把資料讀出來。總的來說就是這麼簡單。

  實際上呢還有不少細節的問題,比如如果不命中怎麼辦?如果命中的時候對應的快取單元還沒熱身怎麼辦(沒讀取資料)?如果現在記憶體位址對應的組都已經寫滿了應該替換哪一個? 等等,這些電腦現在都有相應的策略,感興趣的同學可以去看看書。

 

3.我要做什麼

  我準備用C語言自己寫一個快取的機制試試,首先我沒有低級儲存(目前還不會硬體),低級儲存是用一個指標加一部分記憶體空間抽象的。而快取也一樣,也在記憶體裡,用一個指標加一部分記憶體空間抽象的。寫這個的目的是為了讓自己更好的理解快取的原理。

  實現的功能是:

    1)實現快取讀功能,可以根據記憶體位址進行掩碼處理得到對應的t s b值並從“快取空間”中擷取到快取單元。

    2)實現快取的寫功能,現在計劃使用直寫的方式,即直接寫入到“低級儲存”中不根據快取的寫狀態進行處理。

  

  目前進行了組件設計和活動圖表設計,圖如下:

  1)元件圖表:

  

 

   2)互動圖

3)讀活動圖表

4)寫活動圖表

 

 

 代碼後續會放到 git@code.aliyun.com:qdxiayongming/C.learn.git

 望有有經驗的朋友指正。

  

  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.