記憶體階層(Memory hierarchy)

來源:互聯網
上載者:User

 

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



 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,並無直接關係,這種情況下記憶體的分配和使用由作業系統通過修改MMU的映射項來協調。
硬碟 位於裝置匯流排上,並不直接和CPU相連,CPU通過裝置匯流排的控制器訪問硬碟。 典型的儲存容量是幾百GB。 硬碟由磁性介質和磁頭組成,訪問硬碟時存在機械運動,磁頭要移動,磁性介質要旋轉,機械運動的速度很難提高到電子的速度,所以訪問速度很受限制。但是儲存在硬碟上的資料掉電後不會丟失。 典型的訪問時間是幾毫秒,是寄存器的106倍。 由驅動程式操作裝置匯流排控制器去訪問。由於硬碟的訪問速度較慢,作業系統通常在一次從硬碟上讀幾個頁面(典型值是4KB)到記憶體中緩衝起來,如果這些資料後來都被程式訪問到了,那麼這一次硬碟訪問的時間就可以分攤(Amortize)給多次資料訪問了。


對這個表格總結如下。

  • 寄存器、Cache和記憶體中的資料都是掉電丟失的,這稱為易失性儲存空間(Volatile Memory),與之相對的,硬碟是一種非易失性儲存空間(Non-volatile Memory)。

  • 除了訪問寄存器由程式指令直接控制之外,訪問其它儲存空間都不是由指令直接控制的,有些是硬體自動完成的,有些是作業系統配合硬體完成的。

  • Cache從記憶體取資料時一次取一個Cache Line緩衝起來,作業系統從硬碟取資料時一次取幾KB緩衝起來,都是希望這些資料以後會被訪問到。大多數程式的行為都具有局部性(Locality)的特點:它們會花費大量的時間反覆執行一小段代碼(例如迴圈),或者反覆訪問一個很小的位址範圍中的資料(例如訪問一個數組)。所以預讀緩衝的辦法是很有效:CPU取一條指令,我把它相鄰的指令也都緩衝起來,CPU很可能馬上就會取到;CPU訪問一個資料,我把它相鄰的資料也都緩衝起來,CPU很可能馬上就會訪問到。設想有兩台電腦,一台有32KB的Cache,另一台沒有Cache,而記憶體都是512MB的,硬碟都是100GB的,雖然多出來32KB的Cache和記憶體、硬碟的容量相比微不足道,但由於局部性原理,有Cache的電腦明顯會快很多。高速儲存空間即使容量只能做得很小也能顯著提升電腦的效能,這就是Memory Hierarchy的意義所在。

     

     

    《Linux C編程一站式學習》http://www.yayu.org/book/Linux_c_study_html/ch17s05.html

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.