計算機組成原理9-CPU組成、緩存、內存


 

1、存儲器(原文)

  SRAM:CPU 高速緩存。只要處在通電狀態,里面的數據就可以保持存在。而一旦斷電,里面的數據就會丟失了。電路簡單,訪問速度快。

  DRAM:動態隨機存取存儲器,密度更高,容量更大。

  存儲器的層級結構:

 

 

  從 Cache、內存,到 SSD 和 HDD 硬盤,一台現代計算機中,就用上了所有這些存儲器設備。其中,容量越小的設備速度越快,而且,CPU 並不是直接和每一種存儲器設備打交道,而是每一種存儲器設備,只和它相鄰的存儲設備打交道。比如,CPU Cache 是從內存里加載而來的,或者需要寫回內存,並不會直接寫回數據到硬盤,也不會直接從硬盤加載數據到 CPU Cache 中,而是先加載到內存,再從內存加載到 Cache 中。
  這樣,各個存儲器只和相鄰的一層存儲器打交道,並且隨着一層層向下,存儲器的容量逐層增大,訪問速度逐層變慢,而單位存儲成本也逐層下降,也就構成了存儲器層次結構。

 

2、局部性原理(原文)

  緩存:服務端系統遇到的第一個性能瓶頸,往往就發生在訪問數據庫的時候。使用“緩存”,通過使用 Redis 或者 Memcache 這樣的開源軟件,在數據庫前面提供一層緩存的數據,來緩解數據庫面臨的壓力,提升服務端的程序性能。

 

    局部性原理:CPU 速度快,但造價高。存儲速度慢,但造價低。既享受 CPU Cache 的速度,又享受內存、硬盤巨大的容量和低廉的價格。

  時間局部性:將用戶的個人信息,從存儲在硬盤的數據庫讀取到內存的緩存中來。

 

  空間局部性:如果一個數據被訪問了,那么和它相鄰的數據也很快會被訪問。 在存儲數據的時候,數組內的多項數據會存儲在相鄰的位置。加載的時候,也會一並加載。

   有了時間局部性和空間局部性,我們不用再把所有數據都放在內存里,也不用都放在 HDD 硬盤上,而是把訪問次數多的數據,放在貴但是快一點的存儲器里,把訪問次數少的數據,放在慢但是大一點的存儲器里。這樣組合使用內存、SSD 硬盤以及 HDD 硬盤,使得我們可以用最低的成本提供實際所需要的數據存儲、管理和訪問的需求。如何進行存儲器的硬件規划。你需要考慮硬件的成本、訪問的數據量以及訪問的數據分布,然后根據這些數據的估算,來組合不同的存儲器,能用盡可能低的成本支撐所需要的服務器壓力。

 

3、高速緩存(原文)

  CPU運轉速度快,但是內存運轉速度慢。運行程序的時間主要花在了將對應的數據從內存中讀取出來,加載到 CPU Cache 里。CPU 從內存中讀取數據到 CPU Cache 的過程中,是一小塊一小塊來讀取數據的,而不是按照單個數組元素來讀取數據的。這樣一小塊一小塊的數據,在 CPU Cache 里面,叫作 Cache Line(緩存塊)。現代 CPU 進行數據讀取的時候,無論數據是否已經存儲在 Cache 中,CPU 始終會首先訪問 Cache。只有當 CPU 在 Cache 中找不到數據的時候,才會去訪問內存,並將讀取到的數據寫入 Cache 之中。當時間局部性原理起作用后,這個最近剛剛被訪問的數據,會很快再次被訪問。而 Cache 的訪問速度遠遠快於內存,這樣,CPU 花在等待內存訪問上的時間就大大變短了。

 

4、MESI協議(原文)

  [1]緩存一致性問題

   某個數據,1號核心剛剛更新過,這個更新的信息,只出現在 1 號核心的 L2 Cache 里,而沒有出現在 2 號核心的 L2 Cache 或者主內存里面。這個問題,就是所謂的緩存一致性問題,1 號核心和 2 號核心的緩存,在這個時候是不一致的。

   解決方式:

  第一點叫寫傳播(Write Propagation)。寫傳播是說,在一個 CPU 核心里,我們的 Cache 數據更新,必須能夠傳播到其他的對應節點的 Cache Line 里。
  第二點叫事務的串行化(Transaction Serialization),事務串行化是說,我們在一個 CPU 核心里面的讀取和寫入,在其他的節點看起來,順序是一樣的。

 

  [2] MESI協議

  總線嗅探:解決的是多個 CPU 核心之間的數據傳播問題。本質上就是把所有的讀寫請求都通過總線(Bus)廣播給所有的 CPU 核心,然后讓各個核心去“嗅探”這些請求,再根據本地的情況進行響應。

  MESI 協議:一種寫失效(Write Invalidate)的協議。在寫失效協議里,只有一個 CPU 核心負責寫入數據,其他的核心,只是同步讀取到這個寫入。在這個 CPU 核心寫入 Cache 之后,它會去廣播一個“失效”請求告訴所有其他的 CPU 核心。其他的 CPU 核心,只是去判斷自己是否也有一個“失效”版本的 Cache Block,然后把這個也標記成失效的就好了。與之對應的寫廣播(Write Broadcast)協議。在那個協議里,一個寫入請求廣播到所有的 CPU 核心,同時更新各個核心里的 Cache。

 

5、內存(原文

  想要把虛擬內存地址,映射到物理內存地址,最直觀的辦法,就是來建一張映射表。這個映射表,能夠實現虛擬內存里面的頁,到物理內存里面的頁的一一映射。這個映射表,在計算機里面,就叫作頁表(Page Table)。

  一個內存地址轉換,其實就是這樣三個步驟:
  把虛擬內存地址,切分成頁號和偏移量的組合;
  從頁表里面,查詢出虛擬頁號,對應的物理頁號;
  直接拿物理頁號,加上前面的偏移量,就得到了物理內存地址。

   多級頁表:

  解決單頁表占用內存空間大的問題。在一個實際的程序進程里面,虛擬內存占用的地址空間,通常是兩段連續的空間。而不是完全散落的隨機的內存地址。而多級頁表,就特別適合這樣的內存地址分布。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM