天天看點

計組第三章:存儲系統

文章目錄

    • 存儲系統基本概念
    • 主存儲器的基本組成
    • SRAM 和 DRAM
        • 1.SRAM 和 DRAM 的差別
        • 2.DRAM的重新整理
        • 小結
    • 隻讀存儲器(ROM)
        • 小結
    • 主存儲器與CPU的連接配接
        • 1.位擴充
        • 2.字擴充
            • ①線選法
            • ②片選法
            • 比較
        • 3.字位同時擴充
    • 雙口RAM、多子產品存儲器
        • 1.雙端口RAM
        • 2.多體并行存儲器
        • 3.單體多字存儲器
        • 小結
    • Cache基本原理
        • 小結
    • Cache-主存 映射方式
        • 1.全相聯映射
        • 2.直接映射
        • 3.組相聯映射
        • 小結
    • Cache 替換算法
        • 1.随機算法(RAND)
        • 2.先進先出(FIFO)
        • 3.近期最少使用(LRU)
        • 4.最不經常使用(LFU)
        • 小結
    • Cache 寫政策
        • 1.寫命中
            • ①寫回法
            • ②全寫法
        • 2.寫不命中
            • ①寫配置設定法
            • ②非寫配置設定法
        • 小結
    • 頁式存儲器

存儲系統基本概念

計組第三章:存儲系統
計組第三章:存儲系統
計組第三章:存儲系統

存取周期包括存取時間和恢複時間(後面有)

計組第三章:存儲系統

主存儲器的基本組成

計組第三章:存儲系統

這是存儲體的模型,一個存儲元長這樣,由摩斯管(到一定的電壓才是通路,否則是斷路,是個半導體)、電容和接地線構成。一行存儲元構成一個存儲單元,一行一行存儲單元最終構成存儲體。

上面都是有一根根導線的(一根根綠色的),讀寫的時候都是通過控制電壓來使摩斯管開關,然後對電容進行操作

寫:通高電位(代表1)讓電容裡充上電荷;通低電位(代表0),電容間沒有電荷(由于另一端接地,兩邊電壓差距不大)

讀:控制電壓使摩斯管打開,讀取電容,如果有電荷就是1,沒有就是0(這種方式會讓電容裡的電荷消失,是以叫破壞性讀取,要通過重新整理來恢複資料)

計組第三章:存儲系統

讀取出來的一行資料就可以放到MDR裡,然後轉移到外面

譯碼器就是把n位位址轉換成2n個控制信号,來确定是讀取哪個存儲單元(000、010這些就知道是具體哪行了)

上圖的控制電路實作的就是控制功能,讀寫控制線就是控制這次操作是讀還是寫(這個決定了對電容的操作),然後它還連着MAR和MDR這是因為電流有可能不穩定,是以說每次都要等這些電流穩定了才轉換成信号讀取出來

頭上劃線代表是低電平(0)的時候有效

比如 C S ‾ \overline{CS} CS

計組第三章:存儲系統

有可能問你有多少個金屬引腳

SRAM:位址線+資料線+片選線+讀寫控制線

DRAM:位址線/2 +資料線+行通選線+列通選線+讀寫控制線(片選線由行通選代替),用位址複用技術的時候用行通選線和列通選線表明位址是行還是列

計組第三章:存儲系統

前面的8K代表存儲單元的個數(位址線,2n根),後面的8位代表每個存儲單元能放8bit(資料線,直接8根)

計組第三章:存儲系統

每個小塊塊就是一個存儲單元,一行就是一個字(具體有多少個看情況,上面隻是舉個例子),其他就推

計組第三章:存儲系統

SRAM 和 DRAM

1.SRAM 和 DRAM 的差別

DRAM(dynamic RAM):用于主存,使用栅極電容存儲資訊,就是上一節的那些

SRAM(static RAM):用于cache,使用雙穩态觸發器存儲資訊

核心差別:存儲元不一樣

計組第三章:存儲系統
計組第三章:存儲系統

DRAM存儲元靠電容,放了電之後資料就丢失了,是以需要重寫,導緻讀寫速度更慢,稱為破壞性讀出。存儲元制造成本更低,內建度高(占的面積少),功耗低。隔一段時間需要重新整理(因為電容裡的電荷會自動消失,時間一般為2ms,是以在2ms内要重新整理一次)

SRAM存儲元是觸發器(6個mos管),放電之後資料還在,是非破壞性讀出,讀寫速度更快。存儲元制造成本更高,內建度低,功耗大。隻要不斷電,裡面的内容就不會變

內建度高就是面積小,一個闆闆可以內建更多元件

2.DRAM的重新整理

計組第三章:存儲系統

存儲單元按行列來排,這樣可以減少選通線數量,每行一根、每列一根就行

重新整理進行一次訪存,也就是一個存取周期(讀出到重新整理器裡再寫回)

計組第三章:存儲系統

隻有分散重新整理沒有死區(就是在此期間不能對存儲器讀寫),因為分散重新整理是占着一半的存取周期來重新整理,是以沒有死區,即使是異步重新整理也隻是縮小死區時間,仍有死區

2ms内隻需要每個存儲單元都重新整理一次就足夠,是以第一種這個辦法明顯太浪費,第三個比較好。

小結

計組第三章:存儲系統

行列位址分兩次送(位址線複用):這樣可以減少一半的線,使晶片引腳更少(前面說了晶片的引腳跟線的數量有關)

隻讀存儲器(ROM)

read only memory

RAM晶片——易失性,斷電後資料消失

ROM晶片——非易失性,斷電後資料不會丢失

計組第三章:存儲系統

雖然U盤、SD卡這些閃存能夠多次重寫和擦除,但是仍是隻讀存儲器(ROM),支援随機存取不代表是随機存取存儲器,很多ROM都是可以修改的

邏輯上,主存由RAM+ROM組成,且二者常統一編址

小結

計組第三章:存儲系統

主存儲器與CPU的連接配接

MDR和MAR現在都內建在CPU裡

計組第三章:存儲系統

1.位擴充

8片8K × 1位的存儲晶片 → 1個8K × 8位的存儲器,容量8KB

計組第三章:存儲系統

WE(write enable) :1(沒有橫線)的時候是寫,0的時候是讀

CS(chip select):片選信号,為1(沒有橫線)的時候代表這個晶片工作,和CE(chip enable)等價

每次隻能存取1bit,而CPU可以連上8根資料線,是以說可以通過增加晶片,使CPU那裡連滿。在位擴充裡不用關心CS,隻需要每個CS都接上1就行(因為不存在需要選擇晶片工作的情況)

2.字擴充

計組第三章:存儲系統

由于每個晶片都和CPU連滿了的,是以必須通過片選線來選擇是哪個晶片工作(否則資料都往CPU傳會錯誤),此時各晶片的CS和CPU之前空下來的接口接上(A13 ~ A15)

①線選法

n個接口對應連上n個晶片(n條線→n個信号)

以2個接口為例,因為隻能有一個工作,是以信号隻能是10或01,這就導緻了位址是 01x xxxx xxxx xxxx 和 10x xxxx xxxx xxxx(因為A14、 A13是最高位),位址空間不連續,整着很麻煩(上圖就是線選法)

②片選法

n條線→2n個選片信号

計組第三章:存儲系統

整了個譯碼器,這樣2個線可以表示4個信号,3個線表示8個信号(2-4譯碼器、3-8譯碼器),這樣高位可以從00 ~ 11,位址空間就是連續的了。

計組第三章:存儲系統

考試的時候有可能接的是A15、A13,這時就要注意到A14的值是沒有任何影響的,隻需要看A15A13就行了(雖然有點貓病,但是考察的是了解程度)

比較

計組第三章:存儲系統

3.字位同時擴充

計組第三章:存儲系統

就是這種一個晶片4位,兩個一組湊夠八位(位擴充),然後再通過譯碼器的片選信号控制哪兩個晶片工作(字擴充),同一組的晶片收到的片選信号一樣(看成是新的大晶片)

計組第三章:存儲系統

EN(enable) 類似與CS

位址信号穩定後CPU才發送信号通過EN使譯碼器工作,也能控制片選信号的有效時間(EN一切斷,片選信号直接消失)

雙口RAM、多子產品存儲器

計組第三章:存儲系統

1.雙端口RAM

計組第三章:存儲系統

2.多體并行存儲器

紅線畫的地方就是存取時間r,剩下的是恢複時間(右下M3存取完M0就直接開始存取,可以一直接上)

計組第三章:存儲系統

每個存儲體存取之後要恢複一段時間,在恢複的時候取别的存儲體

低位交叉編址可以使位址是連續的,這樣就可以一個一個挨着從不同的存儲體取

計組第三章:存儲系統

3.單體多字存儲器

沒啥特殊的,顧名思義就是一個存儲器

計組第三章:存儲系統

多體并行存儲器容量相等,不然多出來的容量隻能和單體存儲器一樣,如果程式放在這一塊裡就會變慢;存取速度也要相等

小結

計組第三章:存儲系統

Cache基本原理

記憶體再怎麼優化還是很慢,為了比對和CPU之間的速度差,弄了Cache(用SRAM,Cache在CPU内部)

計組第三章:存儲系統

局部性原理就是

①空間局部性:使用的代碼附近的代碼可能在之後被用到

②時間局部性:使用的代碼可能馬上還要用

都是可能,是因為這都說不清楚,是一種預判(作業系統裡也有)

主存與Cache之間以“塊”為機關進行資料交換(比如使用了某個代碼,就把它所在的塊放到Cache裡),塊又叫頁、頁框、頁面

CPU和這些還是以字為機關傳送資訊

計組第三章:存儲系統

小結

計組第三章:存儲系統

Cache-主存 映射方式

除了用一位表明是主存哪個塊,還要增加有效位來區分0和0号塊(初始時全是0)

1.全相聯映射

計組第三章:存儲系統
計組第三章:存儲系統

2.直接映射

計組第三章:存儲系統

主存塊号 % 23,相當于留下最後三位二進制數(在計算機裡儲存三位就是直接取餘了,很友善)

若Cache總塊數=2n,則主存塊号末尾n位直接反映它在Cache中的位置 ,将主存塊号的其餘位作為标記即可(在圖中隻用存19位就行了,還有3位隻要知道放在Cache哪個塊就可以确定(是隐含的))

命中之後通路Cache那一塊的塊内位址為001110的單元即可

3.組相聯映射

其實就是兩種的一個結合方式

計組第三章:存儲系統

如果是四組,用2位(2n的n)作為組号(隐含着),通過後面幾位确定組号,然後在組裡周遊,看标記是否有比對,還要有效位也為1,命中之後開始通路。

小結

計組第三章:存儲系統

Cache 替換算法

滿了的時候才需要考慮置換,不然直接放進去就行

1.随機算法(RAND)

随機選一個替換

2.先進先出(FIFO)

最先進來的被替換

3.近期最少使用(LRU)

least recently used

基于“局部性原理”,命中率高,效果好,但是仍然有可能發生抖動(被頻繁通路的主存塊數量 > Cache行的數量,如1,2,3,4,5,1,2,3,4,5)

計組第三章:存儲系統

每次替換計數器最大的

命中時,計數器變為0,但是比它大的計數器不變(不需要變就可以維持大小關系,隻是為了選到最少使用的塊,不是為了精準計數),其他的都 +1

Cache有2n塊時,計數器隻需要n位(前面更大的計數器不變也是為了這個,且Cache裝滿後所有計數器的值一定不重複)

4.最不經常使用(LFU)

least frequently used

替換總通路次數最少的

新調入的塊計數器=0,之後每被通路一次計數器+1。

若有多個計數器最小的行,可按行号遞增、或FIFO政策進行選擇

曾經被經常通路的主存塊在未來不一定會用到(如:微信視訊聊天相關的塊),并沒有很好地遵循局部性原理(而且有可能因為之前頻繁運作導緻計數器裡的數字刷的很大,半天淘汰不出來),是以實際運作效果不如 LRU

小結

計組第三章:存儲系統

Cache 寫政策

1.寫命中

①寫回法

計組第三章:存儲系統

②全寫法

計組第三章:存儲系統

訪存次數增加,速度變慢,但更能保證資料一緻性

2.寫不命中

①寫配置設定法

計組第三章:存儲系統

不命中時,把主存的塊調入Cache,在Cache中修改

②非寫配置設定法

計組第三章:存儲系統

小結

計組第三章:存儲系統

頁式存儲器

計組第三章:存儲系統

這些内容去作業系統看

繼續閱讀