講完了Cache,再來講講主存是怎么考察的,我始終認為,一圖勝千言,所以對于很多部件,我都是通過畫圖進行形象的記憶,那么接下來我們對主存也畫個圖,然后再來詳細解讀其考察套路~
文章目錄
- 零、主存的真面目
- 一、按存儲方式分類的存儲器
- (一)隨機存取存儲器(Random Access Memory,RAM)
- 1.靜態隨機存取存儲器(Static RAM,SRAM)
- 2.動態隨機存取存儲器(Dynamic RAM,DRAM)
- 3.SRAM與DRAM的對比
- (二)只讀存儲器(Read Only Memory,ROM)
- 1.掩模式只讀存儲器(Mask ROM,MROM)
- 2.一次可編程只讀存儲器(Programmable ROM,PROM)
- 3.可擦除可編程只讀存儲器(Erasable Programmable ROM,EPROM)
- 4.閃速存儲器(Flash Memory)
- 5.固態硬盤(SolidState Drives,SSD)
- (三)順序存取存儲器(SAM)
- (四)直接存取存儲器(DAM)
- (五)相聯存儲器(CAM)
- 二、線數計算
- (一)地址線位數
- (二)數據線位數
- (三)片選線位數
- 1.線選法
- 2.譯碼片選法
- (四)讀寫控制線位數
- 三、主存容量的擴展
- (一)位擴展
- (二)字擴展
- (三)字位同時擴展
- 四、多模塊存儲器
- (一)單體多字存儲器
- (二)多體并行存儲器
- 1.高位交叉編址
- 2.低位交叉編址
零、主存的真面目
接下來我們所有關于主存的考察形式的討論都將圍繞這張圖展開~
一、按存儲方式分類的存儲器
我們觀察這張主存圖,可以發現它包含了兩個部分,分別是RAM和ROM,它們是按存儲方式分類的兩種存儲器,如果按存儲方式來進行分類,可以將存儲器分為以下五類:
(一)隨機存取存儲器(Random Access Memory,RAM)
存儲器的任何一個存儲單元的內容都可以隨機存取,而且存取時間與存儲單元的物理位置無關,主要用作主存或高速緩沖存儲器。RAM 又分為以下兩種:
1.靜態隨機存取存儲器(Static RAM,SRAM)
SRAM的存儲元是用雙穩態觸發器(六晶體管 MOS)來記憶信息的,靜態是指即使信息被讀出后,它仍保持其原狀態而不需要再生(非破壞性讀出),一般用于Cache。
2.動態隨機存取存儲器(Dynamic RAM,DRAM)
利用存儲元電路中柵極電容上的電荷來存儲信息的,DRAM的基本存儲元通常只使用一個晶體管,所以它比 SRAM 的密度要高很多。相對于 SRAM來說,DRAM具有集成度高、位價低和功耗低等優點,但DRAM的存取速度比 SRAM慢,且必須定時刷新和讀后再生,一般用于主存。
刷新方式分為三種:
3.SRAM與DRAM的對比
類型特點 | SRAM(不刷新) | DRAM(要刷新) |
---|---|---|
存儲信息 | 觸發器(比較穩定) | 柵極電容(容易跑電) |
破壞性讀出? | 否 | 是(讀一次放一次電) |
讀出后需要重寫? | 否 | 是(放完電得給它補) |
運行速度 | 快(不需要補電) | 慢(需要補電) |
集成度 | 低 | 高 |
發熱量 | 高 | 低 |
存儲成本 | 高 | 低 |
易失性存儲器? | 是(沒電不行) | 是(沒電不行) |
需要刷新? | 否 | 是 |
送行列地址 | 一起送 | 分開送 |
常用作 | Cache | 主存 |
(二)只讀存儲器(Read Only Memory,ROM)
存儲器的內容只能隨機讀出而不能寫入。信息一旦寫入存儲器就固定不變,即使斷電,內容也不會丟失,它與隨機存儲器可共同作為主存的一部分,統一構成主存的地址域。根據制造工藝的不同,ROM 可分為以下幾種:
1.掩模式只讀存儲器(Mask ROM,MROM)
直接寫入,無法修改。
2.一次可編程只讀存儲器(Programmable ROM,PROM)
只可寫入一次,不可再修改。
3.可擦除可編程只讀存儲器(Erasable Programmable ROM,EPROM)
可進行多次重寫。
4.閃速存儲器(Flash Memory)
可進行多次快速擦除重寫,由于寫的時候需要先擦除,所以寫比讀慢,每個存儲元只需要單個MOS管,位密度比RAM高,如U盤,SD卡。
5.固態硬盤(SolidState Drives,SSD)
由控制單元+Flash芯片組成,可進行多次快速擦除重寫,如電腦上的機械硬盤。
(三)順序存取存儲器(SAM)
屬于串行訪問存儲器,對存儲單元進行讀/寫操作時,需按其物理位置的先后順序尋址,包括順序存取存儲器,如磁帶。
(四)直接存取存儲器(DAM)
屬于串行訪問存儲器,對存儲單元進行讀/寫操作時,需按其物理位置的先后順序尋址,包括直接存取存儲器,如磁盤。
(五)相聯存儲器(CAM)
可以按內容訪問的存儲器,主要用于虛擬存儲器中存放段表、頁表和快表,以及Cache中存放塊地址,這是因為在這兩種應用中都需要快速查找。
二、線數計算
關于主存有一類題目是計算主存相關的線總位數,我們觀察上面的圖,可以發現主要有四類線:地址線、數據線、片選線、讀寫控制線,因此計算線位數主要就是這四類線,我們一個個來看。
(一)地址線位數
地址線用于尋址,其位數與MAR位數相同,其決定了主存地址空間的最大可尋址范圍,例如36位地址最大尋址范圍為0~236-1,即地址從0開始編號。
(二)數據線位數
數據線用于傳送數據,其位數與MDR位數相同,其決定了一次可傳送的最大數據位數,比如64位數據線,采用字節編址,那么最多可以存取8個單元的內容。
(三)片選線位數
CPU要實現對存儲單元的訪問,首先要選擇存儲芯片,即進行片選;然后在選定的芯片中選擇具體的存儲單元,以進行數據的讀/寫,即進行字選。芯片內的字選通常是由CPU送出的N條低位地址線完成(N由片內存儲容量2N決定)。片選信號的產生方法分為線選法和譯碼片選法。
1.線選法
線選法用除片內尋址外的高位地址線直接連接至各個存儲芯片的片選端,當某位地址線信息為“0”時,就選中與之對應的存儲芯片。這些片選地址線每次尋址時只能有一位有效,不允許同時有多位有效,這樣才能保證每次只選中一個芯片(或芯片組)。假設 4片2K×8位存儲芯片采用線選法構成 8K×8 位存儲器,其中A10-A0用于片內尋址,則各芯片的片選信號如表:
所選中芯片 | A14-A11 |
---|---|
0 | 1110 |
1 | 1101 |
2 | 1011 |
3 | 0111 |
因此如果采用線選法進行片選,片選線位數等于所要選的片總數。
2.譯碼片選法
譯碼片選法用除片內尋址外的高位地址線通過地址譯碼器產生片選信號。如用8片8K×8位的存儲芯片組成64K×8位存儲器(地址線為16位,數據線為8位),需要8個片選信號;若采用線選法,除去片內尋址的13位地址線,僅余高3位,不足以產生8個片選信號。因此,采用譯碼片選法,即用一片74LS138作為地址譯碼器,高3位用于片選,則A15A14A13=000時選中第一片,A15A14A13=001時選中第二片,以此類推。
因此如果采用譯碼片選法進行片選,片選線位數等于 log2(所要選的片總數) 。
(四)讀寫控制線位數
控制對芯片的讀寫,一般為1位。
三、主存容量的擴展
由于單個存儲芯片的容量是有限的,它在字數或字長方面與實際存儲器的要求都有差距,因此需要在字和位兩方面進行擴充才能滿足實際存儲器的容量要求。
(一)位擴展
位擴展是指對字長進行擴展(增加存儲字長)。當CPU 的系統數據線數多于存儲芯片的數據位數時,必須對存儲芯片擴位,使其數據位數與CPU的數據線數相等。如圖,8片8Kx1bit的RAM芯片組成8Kx8bit的存儲器:
(二)字擴展
字擴展是指對存儲字的數量進行擴展,而存儲字的位數滿足系統要求。系統數據線位數等于芯片數據線位數,系統地址線位數多于芯片地址線位數。如圖,用4片16K×8位的RAM芯片組成64K×8位的存儲器:
(三)字位同時擴展
字位同時擴展是前兩種擴展的組合,這種方式既增加存儲字的數量,又增加存儲字長。如圖,用8片16K×4位的RAM芯片組成64K×8位的存儲器:
四、多模塊存儲器
多模塊存儲器是一種空間并行技術,利用多個結構完全相同的存儲模塊的并行工作來提高存儲器的吞吐率。常用的有單體多字存儲器和多體低位交叉存儲器。CPU的速度比存儲器快得多,若同時從存儲器中取出n條指令,就可以充分利用 CPU資源,提高運行速度。多體交叉存儲器就是基于這種思想提出的。
(一)單體多字存儲器
在單體多字系統中,每個存儲單元存儲m個字,總線寬度也為m個字,一次并行讀出m個字。在一個存取周期內,從同一地址取出m條指令,然后將指令逐條送至CPU執行,即每隔 1/m存取周期,CPU 向主存取一條指令,這顯然提高了單體存儲器的工作速度。
(二)多體并行存儲器
多體并行存儲器由多體模塊組成。每個模塊都有相同的容量和存取速度,各模塊都有獨立的讀/寫控制電路、地址寄存器和數據寄存器。它們既能并行工作,又能交叉工作。多體并行存儲器分為高位交叉編址和低位交叉編址兩種。
高位交叉編址和低位交叉編址的區別在于體號在地址的前面部分還是后面部分。
1.高位交叉編址
在高位交叉方式下,總把低位的體內地址送到由高位體號確定的模塊內進行譯碼。訪問一個連續主存塊時,總是先在一個模塊內訪問,等到該模塊訪問完才轉到下一個模塊訪問,CPU總是按順序訪問存儲模塊,各模塊不能被并行訪問,因而不能提高存儲器的吞吐率。
2.低位交叉編址
低位交叉方式下,總是把高位的體內地址送到由低位體號所確定的模塊內進行譯碼。程序連續存放在相鄰模塊中,因此稱采用此編址方式的存儲器為交叉存儲器。交叉存儲器可以采用輪流啟動或同時啟動兩種方式。
在輪流啟動方式下,若每個模塊一次讀/寫的位數正好等于數據總線位數,模塊的存取周期為T,總線周期為r,為實現輪流啟動方式,存儲器交叉模塊數應大于或等于m=T/r,按每隔1/m個存取周期輪流啟動各模塊,則每隔1/m個存取周期就可讀出或寫入一個數據,存取速度提高m倍。交叉存儲器要求其模塊數大于或等于m,以保證啟動某模塊后經過m×r的時間后再次啟動該模塊時,其上次的存取操作已經完成(以保證流水線不間斷)。
這樣,連續存取m個字所需的時間為t1=T+(m-1)r。而順序方式連續讀取m個字所需的時間為t2=mT,可見交叉存儲器的帶寬大大提高。
在同時啟動方式下,若所有模塊一次并行讀/寫的總位數正好等于數據總線位數,則可以同時啟動所有模塊進行讀/寫。設每個模塊一次讀/寫的位數為16位,模塊數m=4,數據總線位數為64位,4個模塊一共提供64位,正好構成一個存儲字,因此應該同時啟動4個模塊進行并行讀/寫。
寫在后面
這個專欄主要是我在學習408真題的過程中總結的一些筆記,因為我學的也很一般,如果有錯誤和不足之處,還望大家在評論區指出。希望能給大家的學習帶來一點幫助,共同進步!!!
參考資料
[1]王道408教材(2025版)
[2]王道課程資料