隨機(jī)訪問存儲(chǔ)器 Random-Access Memory,RAM
-
靜態(tài)RAM(SRAM)
速度比動(dòng)態(tài)的RAM要快,但是也貴得多,通常作為高速緩存存儲(chǔ)器。
電路類似于下面的圖,只有兩個(gè)狀態(tài)是穩(wěn)定的,其他狀態(tài)都是不穩(wěn)定的,從不穩(wěn)定狀態(tài)開始,電路會(huì)迅速地轉(zhuǎn)移到兩個(gè)穩(wěn)定狀態(tài)的其中一個(gè)。每位用六晶體管來實(shí)現(xiàn)。
image.png
SRAM只要有電,就會(huì)永遠(yuǎn)保持它的值,有干擾的電壓也不會(huì)改變值,干擾消除時(shí),電路就會(huì)恢復(fù)穩(wěn)定。
動(dòng)態(tài)RAM(DRAM)
DRAM將每個(gè)位存儲(chǔ)為對(duì)一個(gè)電容的充電,這個(gè)電容非常小,對(duì)干擾非常敏感,當(dāng)電容的電壓被擾亂之后,它就無法恢復(fù)了。
很多原因會(huì)導(dǎo)致漏電,所以內(nèi)存系統(tǒng)必須周期性地通過讀出,然后重寫刷新內(nèi)存每一位。
每位一個(gè)晶體管。-
傳統(tǒng)DRAM
為了方便尋址,將DRAM芯片中的單元(位)劃分為d個(gè)超單元,每個(gè)超單元都由w個(gè)DRAM單元組成。超單元被組織成一個(gè)r行c列的長方形陣列,rc = 。每個(gè)單元有形如(i,j)的二維地址。
取值的時(shí)候先傳送i,再傳送j,再通過(i,j)取值。這樣可以減少引腳的數(shù)量,但是需要加倍的傳送時(shí)間。
內(nèi)部有一個(gè)行緩沖區(qū),比如讀取(2,1)的時(shí)候,會(huì)先將2讀入內(nèi)部行緩沖區(qū),再將列1讀出發(fā)給內(nèi)存控制器。
image.png -
內(nèi)存模塊
將多個(gè)DRAM組合成一個(gè)內(nèi)存模塊,例如將8個(gè)8Mx8的DRAM組成64M的內(nèi)存模塊,8個(gè)芯片編號(hào)0-7,每個(gè)超單元存儲(chǔ)主存的一個(gè)字節(jié),一個(gè)地址(i,j)表示的是64位。內(nèi)部將64位組合成8字節(jié)返回給內(nèi)存控制器。
image.png 非易失性存儲(chǔ)器
斷電后仍然可以保存數(shù)據(jù)的存儲(chǔ)器。
ROM中有的類型既可以讀,也可以寫,但是被統(tǒng)稱為只讀存儲(chǔ)器(Read-Only Memory)。
- PROM(Programmable ROM)只能被編程一次。
- 可擦寫可編程ROM(Erasable Programmable ROM,EPROM)可以寫入與擦除次數(shù)達(dá)1000次。
- 電子可擦除PROM(Electrically Erasable PROM,EEPROM),可以達(dá)10^5次編程次數(shù)。
- 閃存(flash memory)是基于EEPROM的存儲(chǔ)器
存儲(chǔ)在ROM中的程序稱為固件(firmware),當(dāng)計(jì)算機(jī)系統(tǒng)通電后機(jī)會(huì)運(yùn)行存儲(chǔ)器在ROM中的固件。
-
訪問主存
數(shù)據(jù)流通過稱為總線(bus)的電路在CPU和DRAM主存之間來來回回。每次傳送數(shù)據(jù)的一系列步驟稱為總線事務(wù)(bus transaction)。讀事務(wù)從主存?zhèn)魉蛿?shù)據(jù)到CPU。寫事務(wù)從CPU傳送數(shù)據(jù)到主存。
image.png
I/O橋包括內(nèi)存控制器。
movq A,%rax的具體過程:
image.png
image.png
-
旋轉(zhuǎn)磁盤
image.png
每個(gè)盤片有兩面,有磁性記錄材料。每個(gè)同心圓都是一個(gè)磁道(track),每個(gè)磁道被劃分為一組扇區(qū)(sector)。多個(gè)半徑相等的磁道被稱為一個(gè)柱面(cylinder)。
磁盤為了對(duì)操作系統(tǒng)隱藏復(fù)雜性,將磁盤構(gòu)造呈現(xiàn)為一個(gè)簡單的視圖,一個(gè)B個(gè)扇區(qū)大小的邏輯塊的序列,序號(hào)為0,1,...,B-1。磁盤中有一個(gè)固件設(shè)備,稱為磁盤控制器,扶著維護(hù)邏輯塊號(hào)與實(shí)際磁盤扇區(qū)之間的映射關(guān)系,會(huì)將邏輯塊號(hào)翻譯成一個(gè)(盤面,磁道,扇區(qū))三元組。
局部性(locality)
時(shí)間局部性(temporal locality):被引用過一次的內(nèi)存位置很可能在不遠(yuǎn)的將來再被多次引用。
空間局部性(spatial locality):如果一個(gè)內(nèi)存位置被引用了一次,那么程序很可能在不遠(yuǎn)的將來引用附件的一個(gè)內(nèi)存位置。
此種程序具有較好的局部性:sum具有時(shí)間局部性,a數(shù)組具有空間局部性。但是如果將a[i][j]變?yōu)?a[j][i]那么空間局部性很可能會(huì)降低。

存儲(chǔ)器層次結(jié)構(gòu)

- 緩存
高速緩存(cache)是一個(gè)小而快速的存儲(chǔ)設(shè)備,它作為存儲(chǔ)在更大、也更慢的設(shè)備中的數(shù)據(jù)對(duì)象的緩沖區(qū)域。使用高速緩存的過程稱為緩存(caching)。
- 緩存命中:在第k層的某些塊中找到了要訪問的第k+1層的數(shù)據(jù)對(duì)象d,就是緩存命中。
- 緩存不命中:如果第k層中沒有數(shù)據(jù)對(duì)象d,就是緩存不命中。此時(shí)要從k+1層中取出包含d的那個(gè)塊,放到第k層中緩存起來,如果緩存已滿,則需要一定的替換策略(replacement policy)進(jìn)行覆蓋,例如LRU,最近最少被使用。
- 緩存不命中的種類
沖突不命中:一定的放置策略導(dǎo)致無法命中。
容量不命中:緩存太小。
-
高速緩存存儲(chǔ)器
image.png 有關(guān)寫的問題
當(dāng)更新了緩存的字w,如何寫回低一層的副本中呢?直寫(write-through),立即將w的高速緩存塊寫回到第一層中。
寫回(write-back),當(dāng)替換算法要替換這個(gè)更新過的塊時(shí),才寫到第一層中。必須維護(hù)一個(gè)額外的修改位(dirty bit),表明是否被修改過。
-
真實(shí)高速緩存層次結(jié)構(gòu)
真實(shí)的高速緩存可以分為i-cache(只保存指令),d-cache(只保存數(shù)據(jù)),統(tǒng)一高速緩存(都可以保存)
image.png








