5. Memory Hierarchy

硬碟、內存、CPU寄存器,還有本節要講的Cache,這些都是存儲器,計算機為什麼要有這麼多種存儲器呢?這些存儲器各自有什麼特點?這是本節要討論的問題。

由於硬件技術的限制,我們可以製造出容量很小但很快的存儲器,也可以製造出容量很大但很慢的存儲器,但不可能兩邊的好處都占着,不可能製造出訪問速度又快容量又大的存儲器。因此,現代計算機都把存儲器分成若干級,稱為Memory Hierarchy,按照離CPU由近到遠的順序依次是CPU寄存器、Cache、內存、硬碟,越靠近CPU的存儲器容量越小但訪問速度越快,下圖給出了各種存儲器的容量和訪問速度的典型值。

圖 17.8. Memory Hierarchy

Memory Hierarchy

表 17.1. Memory Hierarchy

存儲器類型位於哪裡存儲容量半導體工藝訪問時間如何訪問
CPU寄存器位於CPU執行單元中。CPU寄存器通常只有幾個到幾十個,每個寄存器的容量取決於CPU的字長,所以一共只有幾十到幾百位元組。寄存器”這個名字就是一種數字電路的名字,它由一組觸發器(Flip-flop)組成,每個觸發器保存一個Bit的數據,可以做存取和移位等操作。計算機掉電時寄存器中保存的數據會丟失。寄存器是訪問速度最快的存儲器,典型的訪問時間是幾納秒。使用哪個寄存器,如何使用寄存器,這些都是由指令決定的。
Cache和MMU一樣位於CPU核中。Cache通常分為幾級,最典型的是如上圖所示的兩級Cache,一級Cache更靠近CPU執行單元,二級Cache更靠近物理內存,通常一級Cache有幾十到幾百KB,二級Cache有幾百KB到幾MB。Cache和內存都是由RAM(Random Access Memory)組成的,可以根據地址隨機訪問,計算機掉電時RAM中保存的數據會丟失。不同的是,Cache通常由SRAM(Static RAM,靜態RAM)組成,而內存通常由DRAM(Dynamic RAM,動態RAM)組成。DRAM電路比SRAM簡單,存儲容量可以做得更大,但DRAM的訪問速度比SRAM慢。典型的訪問時間是幾十納秒。Cache緩存最近訪問過的內存數據,由於Cache的訪問速度是內存的幾十倍,所以有效利用Cache可以大大提高計算機的整體性能。一級Cache是這樣工作的:CPU執行單元要訪問內存時首先發出VA,Cache利用VA查找相應的數據有沒有被緩存,如果Cache中有就不需要訪問物理內存了,如果是讀操作就直接將Cache中的數據傳給CPU寄存器,如果是寫操作就直接改寫到Cache中;如果Cache沒有緩存該數據,就去物理內存中取數據,但並不是要哪個位元組就取哪個位元組,而是把相鄰的幾十個位元組都取上來緩存着,以備下次用到,這稱為一個Cache Line,典型的Cache Line大小是32~256位元組。如果計算機還配置了二級緩存,則在訪問物理內存之前先用PA去二級緩存中查找。一級緩存是用VA定址的,二級緩存是用PA定址的,這是它們的區別。Cache所做的工作是由硬件自動完成的,而不是像寄存器一樣由指令決定先做什麼後做什麼。
內存位於CPU外的晶片,與CPU通過地址和數據匯流排相連。典型的存儲容量是幾百MB到幾GB。由DRAM組成,詳見上面關於Cache的說明。典型的訪問時間是幾百納秒。內存是通過地址來訪問的,在啟用MMU的情況下,程序指令中的地址是VA,而訪問內存用的是PA,它們之間的映射關係由操作系統維護。
硬碟位於設備匯流排上,並不直接和CPU相連,CPU通過設備匯流排的控製器訪問硬碟。典型的存儲容量是幾百GB到幾TB。硬碟由磁性介質和磁頭組成,訪問硬碟時存在機械運動,磁頭要移動,磁性介質要旋轉,機械運動的速度很難提高到電子的速度,所以訪問速度很受限制。保存在硬碟上的數據掉電後不會丟失。典型的訪問時間是幾毫秒,是寄存器訪問時間的106倍。由驅動程式操作設備匯流排控製器去訪問。由於硬碟的訪問速度較慢,操作系統通常一次從硬碟上讀幾個頁面到內存中緩存起來,如果這幾個頁面後來都被程序訪問到了,那麼這一次讀硬碟的時間就可以分攤(Amortize)給程序的多次訪問了。

對這個表格總結如下。