《計算機組成原理》——記憶體層次結構學習筆記(一)

2020-10-23 11:00:27


一、相關概念

1.區域性性原理

①時間區域性性
定義:某個資料項在被存取之後可能很快再次被存取的特性。
解釋:如果某個資料項被存取,那麼在不久的將來可能再次被存取。
舉例:當我們在圖書館讀書,從書架上取來一本書放在了自己的書桌上,我們很有可能會很快再次翻閱它。
②空間區域性性
定義:某個資料項子啊被存取之後,與其地址相近的資料項可能很快被存取的特性。
解釋:圖書館經常將同一類的書放在一起,便於讀者查詢,當我們找到一本需要的書時,其附近的書也很有可能很快被我們用到。

2.記憶體的層次結構

我們利用區域性性原理將計算機的記憶體組織成記憶體層級結構。
定義:一中由多記憶體層次組成的結構,記憶體的容量和存取時間隨著離處理器距離的增加而增加。
圖片來自於《計算機組成與設計:硬體/軟體介面》圖5-1
越靠近處理器的記憶體越快、越小、每位價格越高;
相反越原理處理器的記憶體越慢、越大、每位價格越低。

記憶體層次可以由多層構成,但資料每次只能在相鄰的兩個層次之間進行復制。
我們將一個兩級層次結構中儲存資訊交換的最小單元稱為

3.命中與缺失

①如果處理器需要的資料存放在高層記憶體的某個快中,則成為一次命中;反之,若在高層記憶體中沒有找到所需要的資料,本次資料請求則成為一次缺失
②命中率(命中比率):在高層記憶體中找到資料的儲存存取比例。命中率通常為衡量記憶體層次結構效能的標準。
③缺失率:(1-命中率)在高層記憶體中沒有找到資料目標的儲存存取比例。
④命中時間:存取某記憶體層次結構所需要的時間,其中包括本次存取是命中還是失效的判定時間。
⑤缺失代價:將相應的塊從地層記憶體替換到高層記憶體所需要的時間。包括存取塊將資料逐層傳輸將資料插入發生缺失的層將資訊塊傳送給請求者的時間。

4.區域性性與記憶體的層次結構

①記憶體層次結構利用了時間區域性性,將最近被存取的資料項放在靠近處理器的地方,以便在不久的將來再次存取。
②記憶體層次結構也利用了空間區域性性,將一些包含連續字的塊移動到記憶體層次結構的較高層次,以便接下來存取其鄰近資料項。

補充:在記憶體的層次結構中,距離處理器越近的層次容量越小而速度越快。因此當資料在層次結構的最高層命中時,可以很快被處理器處理;而當缺失時,處理器需要存取容量大但速度慢的低層記憶體層次。所以當命中率足夠高時,整個的記憶體層次結構對處理器來說,就擁有接近最高層的處理速度和最低層的容量。

二、記憶體技術

1.前言

構建記憶體層次結構的主要有四種技術:
①SRAM(靜態隨機存取記憶體):構成靠近處理器的層次。
②DRAM(動態隨機存取記憶體):主要用來構成主記憶體儲器(主記憶體)。
③快閃記憶體:一種非易失性記憶體,常用作個人移動裝置中的二級記憶體。
④磁碟:通常是伺服器中容量最大且速度最慢的一層。

補充:RAM中的R指「隨機」,其含義為:存取任意地址單元的時間是相同的。

2.SRAM技術

SRAM是一種組織成儲存陣列結構的簡單積體電路,對任何資料存取時間都是固定的。

SRAM的一個基本儲存單元通常由6-8個(一般為6個)電晶體組成。其相對穩定,不容易收到干擾,在空閒模式下僅需最小的功率來保持電荷,不需要重新整理。

任何一個SRAM都有三組訊號線與外部打交道:
①地址線:地址線決定了記憶體的容量,對於有n條地址線的記憶體,其容量為2n個儲存單元。
②傳輸線:傳輸線的數量制定了記憶體的字長,對於有n條傳輸線的記憶體,其字長為n位。
③控制線:指定了對記憶體進行讀操作還是寫操作。
(例如R/ W \frac{}{W} W,表示高電平時進行讀操作,低電平進行寫操作)

3.DRAM技術

DRAM使用電容儲存電荷的方式儲存資料。其每一位都只是用一個電晶體(對比SRAM需要使用6個),密度比SRAM要高很多,因此容量一般比SRAM大得多。

DRAM在電容上儲存電荷,由於漏電等原因不能長久地保持資料(一般只能保持幾微秒),從而必須週期性地重新整理,這也是動態隨機存取記憶體中「動態」的原因。

重新整理:為了對單元進行重新整理,我們只需要將其中的資料讀出來後重新寫入即可。但如果DRAM中的每個位都需要獨立地讀出/寫入,那麼則陷入「死區」,即所有的時間都用來進行重新整理操作,而沒有時間用於正常的存取操作。為了解決這個問題,DRAM採用了億中兩級譯碼結構,可以通過在一個讀週期後緊跟一個寫週期的方式一次重新整理一整行

常見的三種重新整理方式
前提說明:由於重新整理相當於進行一次存取過程,所以重新整理一行的時間=存取週期
①集中重新整理
集中重新整理:在規定的一個重新整理週期內,對全部儲存單元集中一段時間逐行進行重新整理。
若採用集中重新整理,則在一個重新整理週期鍾,所有行全部重新整理完畢之前不能進行任何的存取操作,因此重新整理時間又稱為「死區」或「死時間」。
集中重新整理的效率是非常低的,當行數較多時甚至會出現無法相應處理器存取指令的情況。
優點:速度高,重新整理快
缺點:存在死區,行數較多時死時間很長

②分散重新整理
分散重新整理:是指對每行儲存單元的重新整理分散到每個儲存週期內完成。
可以簡單理解為對哪一行進行讀寫操作,就對哪一行進行重新整理。
同時,分散重新整理將重新整理放到存取週期內進行,即擴大了存取週期(由於重新整理時間=存取時間,故此時存取週期為原來的兩倍)。
對於分散重新整理來說不存在死區。
原因:死區是由於記憶體在重新整理時不能相應處理器的請求而阻塞的時間。而此時將重新整理放在了存取週期內,存取週期中既包含了讀寫時間,也包含了重新整理一行的時間,對於處理器來說是看不到重新整理時間的(可以理解為每個存取週期是個原子週期,以處理器的角度來看一直在進行存取操作),所以才沒有死區。
優點:消除了死區
缺點:存取週期延長,導致整個系統的速度降低

留個疑問(待解決):分散重新整理是在存取操作後進行重新整理,若有某行長時間未進行讀寫操作,會不會出現不重新整理導致資料丟失的情況?

③非同步重新整理
非同步重新整理:將每一行的重新整理都分開來看,只要在規定的時間完成對每一行一次的重新整理就可以。
舉例:對64*64的矩陣重新整理,存取週期為0.5us,每行需要在2ms內重新整理一次。此時每經過(2/64)ms重新整理一行,就可以保證2ms內將所有的64行都進行了一次重新整理。
對每一行來說,其都要間隔64個週期才會被再次重新整理。

對於非同步重新整理來說,死區仍然是存在的,但死時間被大大縮短,以剛剛的例子來說,每次重新整理時會有0.5us的時長不能相應處理器操作,因此死時間為0.5us。

有關於DRAM的重新整理方式,還可以參照其他幾位大佬寫的幾篇非常優秀的部落格,連結如下:
https://blog.csdn.net/qq_43610614/article/details/105660357
https://blog.csdn.net/qq_40627648/article/details/83626288

4.快閃記憶體

快閃記憶體是一種電可擦除的可程式化唯讀記憶體(EEPROM)
在對快閃記憶體進行寫操作時,會對儲存位帶來損耗。(相較之下,磁碟與DRAM不必擔心此問題)
解決方案:大多數快閃記憶體產品中會帶有一個控制器,用來將寫操作從寫入次數較多的塊對映到寫入次數較少的塊中,從而使寫操作儘量的分散,這種技術稱為損耗均衡
優點:雖然均衡技術降低了快閃記憶體的潛在效能,但不需要再高層次的軟體中監控塊的損耗情況,所以不必擔心影響高層的效率。同時,快閃記憶體控制器的損耗均衡也實現了將製造過程中出錯的儲存單元進行遮蔽,從而提高成品率。

5.磁碟記憶體

待補充,留空。