4-存储器
【README】
1.本文總結自B站 《計算機組成原理(哈工大劉宏偉)》的視頻講解,非常棒,墻裂推薦;
【1】概述
【1.1】存儲器分類
1)按存儲介質分類
- 1,?? ?半導體存儲器,分為 TTL, MOS 兩種; (易失)
- 2,?? ?磁表面存儲器,非易失;
- 3,?? ?磁芯存儲器,非易失;
- 4,?? ?光盤存儲器,非易失;
2)按存取方式分類
3)按在計算機的作用分類?
- Flash memory :閃存,閃速存儲器(斷電時不丟失數據);;
- 高速緩沖存儲器-cache: 使用靜態ram做的,速度比主存快; 放在cpu 與 主存之間的;
【1.2】 存儲器層次結構
【1.2.1】存儲器的3個主要特性關系
特性包括: 速度,容量,價格/位;??
寄存器:不僅僅是CPU中有寄存器,IO端口中也有寄存器;
用戶需求: 高速度,大容量,低價格;
【1.2.2】緩存-主存層次 與 主存-輔存層次
采用軟硬件,相結合的方法,把主存與輔存構成一個整體;
- 緩存主要解決主存低速度的問題;
- 輔存主要解決主存的容量小的問題;
【2】 主存儲器
【2.1】 主存儲器概述
【2.1.1】主存的基本組成
讀寫控制電路:
- 如果是寫入,則把MDR的數據寫入到存儲體中MAR指定地址上;
- 如果是讀出,則把存儲體上MAR地址的數據讀出到MDR寄存器;
【2.1.2】主存和cpu的聯系
控制信號,由控制器發出; 是讀還是寫?
CPU與主存之間的通信, 主要有3種信號;
- 信號1,數據信號;
- 信號2,地址信號;
- 信號3,控制信號;
【2.1.3】主存中存儲單元地址的分配
24根地址線,字節尋址是 2^24=16M字節;
- 字長為16位,即1字=2字節;則按照機器字尋址 8M字(Word)
- 字長為32位,即1字=4字節;則按照機器字尋址 4M字(Word)
【2.1.4】主存技術指標
存取時間 = 存入或取出數據所需時間;
【2.2】 半導體存儲芯片簡介
【2.2.1】半導體存儲芯片的基本結構?
存儲矩陣: 存儲了0 1 信號(信息); 有多個存儲單元;
步驟如下:
- 第1步:地址線傳送地址信號給存儲器;
- 第2步:譯碼驅動程序 翻譯地址并選擇存儲單元;完成讀寫操作;
- 第3步:把數據傳給讀寫電路,讀寫電路傳給數據線;
其他設備:
- 片選線: 表示給定地址在哪幾個存儲器中可以尋址;
- 讀寫控制線:給出讀信號,還是寫信號;
地址線 10條 數據線4條, 芯片容量 1K*4 ;
- 地址線10條表示可以尋址1k 個存儲單元;
- 數據線4條表示每個存儲單元存儲4個bit;
1.2)片選信號線
?片選線信號: CS(chip select) 或? CE (chip enable)
片選信號線的作用:
一片 16K * 1bit 的存儲芯片的含義: 該芯片有16K個存儲單元,每個單元1個bit;把8個芯片組合(縱向擴展)為1個大芯片,那大芯片的每個單元存儲空間為8個bit,即1個字節;
存儲芯片擴展方式:
- 縱向擴展:8片 16K*1位的存儲芯片可以擴展到 16K*8bit 的 存儲芯片2 ;
- 橫向擴展:32片 16K*1位的存儲芯片,可以組成 4片 16K*8bit的存儲芯片3;
片選信號線作用:
- 由上文知,存儲器(主存或內存)不是由一個芯片構成的,它是由多個小芯片組合(擴展)而成的;
- 正因為存儲器是把多個小芯片組合起來構成的;在存取時,我們需要用片選信號選擇參與芯片擴展的一組或一簇小芯片,如選中某組8個,則讀取這8個小芯片的bit位才能構成一個字節,多選或漏選一個小芯片,讀取的數據都是不正確的;
?【2.2.2】半導體存儲芯片的譯碼驅動方式
1)線選法:
地址線4條,可以尋址16個存儲單元;
數據線8條,每個存儲單元存儲8個bit;
存儲容量是 16*8 bit ;
那如果有20根地址線,則容量是1M*8bit,要尋址1M個單元,用單個譯碼器,則存儲器中地址譯碼器的線就有1M=100w條;(可以理解為單個地址譯碼器是一維空間尋址)
線選法缺點:成本非常高,不適用;
2)重合法
地址譯碼器有2個,分為行地址譯碼器X,列地址譯碼器Y;
那如果有20根地址線,則容量是1M*8,那么存儲器中有2個譯碼器,分為行譯碼器1k條線,列譯碼器1k條線;共計2k條線;(相比于線選法,重合法更加高效,因為使用線選法的地址譯碼器需要1M根線);
可以理解為重合法是二維空間尋址;
如 存儲存儲的設計結構是 32 * 32 個;
則x,y軸地址譯碼器分別用 32根和32根線就可以定位二維空間中的某個存儲單元了;
而如果是一維線選法的話,地址譯碼器需要 32*32 根線;
【2.3】 隨機存取存儲器-RAM-random access memory
【2.3.1】 靜態RAM-SRAM
2)靜態ram舉例:
10個地址線,可以尋址1k個存儲單元;
4個數據線,每個存儲單元可以存儲4個bit;
補充:如何實現選一次四列?
行地址0,則選中第0行;
列地址0,則選中4組中每組的第0列上的bit輸出;即(黃色部分);
?【2.3.2】動態RAM-DRAM
0)保存0和1的原理:
- 電容當中有電荷,則為1,否則為0;
- 采用電容進行表示;
1)動態ram基本電路
動態ram 4116芯片讀原理:
?
豎方向是行, 橫方向是列;
在讀放大器的左側那一行, 電容有電表示0,沒有電表示1;
讀放大器的右側正好相反;
讀放大器是一個蹺蹺板電路,左邊與右邊的電平相反;
4)動態刷新ram
為啥要刷新?
電容非常小,很容易漏電;
在一段時間內,如果不對電容充電,則長時間,電容就會漏電,信息丟失;
動態ram刷新有3種方式:(集中刷新,分散刷新,異步刷新)
?
4.1) 集中刷新; 2ms內,對128行地址線進行刷新;
2ms內有4000個存取周期, 前面 3872個周期可以共cpu操作,后面128個周期需要用于刷新電容;也就是說? 0.5us*128=64us; 64個微秒內,動態ram是不能使用的;
?
?4.2)分散刷新
一半時間用于存取或讀寫數據,另一半時間用來刷新 動態ram;
4.3)異步刷新(集中刷新與分散刷新相結合)
【2.3.3】動態ram與靜態ram的比較(重要*)
?單元電路:
- 動態ram 每個單元電路,包括1個晶體管,1個電容; 簡單;
- 靜態ram每個單元電路,包括6個晶體管; 復雜;
作用:
- 動態ram 主要用于主存(速度稍慢,慢于靜態ram);
- 靜態ram 主要用于緩存(速度快);
?【2.4】只讀存儲器rom(了解)
【2.5】 存儲器與cpu的連接(本章重點內容*)
【2.5.1】存儲器容量擴展?
- bit位擴展;(存儲單元的存儲容量擴展)
- 存儲字擴展;(存儲單元的數量擴展)
- bit位,存儲字同時擴展;
問題: 存儲器10根地址線,共計1k個存儲單元;每個單元存儲4個bit位(4位數據);如何構成 1k*8位 的存儲器?
解決方法: 用2個 1k*4bit 的芯片;
1)bit位擴展(增加單個存儲單元的存儲容量):
解決方法:把2個小芯片組合為1個大芯片來用; 同時做讀寫操作;2個小芯片同時工作;
2)字擴展(增加存儲字或存儲單元的數量)
?2個芯片不能同時工作;
11條地址線;如果第11根A10等于0 選擇第1個芯片;如果A10等于1選擇第2個芯片;(高位bit A10 作為片選信號)
3)字,位同時擴展
存儲空間分配到4個存儲器當中,每個存儲器兩個芯片(2個芯片為一組),共計8個芯片;
- 000000000000~001111111111? = 1k個地址; 給第1組芯片;
- 010000000000~011111111111 =? 1k個地址;給第2組芯片;
- 100000000000~101111111111 =? 1k個地址;給第3組芯片;
- 110000000000~111111111111 =? 1k個地址;給第4組芯片;
A11A10 作為片選信號; 取值為 00, 01, 10, 11 ;
片選信號作用(經過片選譯碼器譯碼):選擇一組或一簇小芯片進行尋址;
【2.5.2】存儲器與cpu的連接
1)地址線的連接:把低位bit作為地址信號;高位bit作為片選信號;
4)片選線的連接:對存儲器的訪問信號要在片選線進行體現; 每個存儲器芯片,都有一個地址范圍;(是訪問存儲器還是IO設備,根據地址范圍來判斷)
5)合理選擇存儲芯片;
- 是選擇 rom 還是ram? Rom存儲系統程序;ram存儲用戶程序;
- 是選擇2個1k*4還是1個1k*8;
- 芯片數量竟可能少,片選邏輯盡可能簡單;
【例】cpu與存儲器的連接圖
MREQ(低電平有效)信號線一定要用(不要忘記,非常重要);
只有當 MREQ是低電平時,訪問的地址才在存儲器范圍中;否則訪問的是IO設備;
ROM的數據線是單向的; RAM的數據線是雙向的;(上圖是重點)
【2.6】主存儲器校驗(跳過)
【2.7】提高訪存速度的措施
Cpu訪問速度從1985到2002年,每年提升 52%;
但內存每10年訪問速度提高50%;
Cpu再快,cpu執行的指令來自于內存;數據來自于內存;結果需要保存到內存中;
如果cpu再快,但內存慢,計算機整體運行速度也提不上來;
提高訪存速度的方法有:
- 單體多字系統;
- 多體并行系統;
【2.7.1】單體多字系統 (方法1)
增加存儲器的帶寬,即每次存取多個存儲單元(增加了單次存取的bit數);
CPU一次能夠處理的bit(機器字長)為16bit;但存儲器字長可以設置為64位;
Cpu 可以一次性取出64位放入數據寄存器以便cpu處理;
問題是: 如果需要的數據不是連續存儲在64位數據; 則以上方案不很好;
?【2.7.2】多體并行系統(方法2)
多體并行系統:包括4個存儲體; 前2位(高位)作為存儲器選擇信號;后4位是存儲體內部地址編碼;
有兩種方式:
- 高位交叉:體號在前,體內地址在后(在每個存儲器內部編址);
- 低位交叉: 編碼方式不一樣; 體內地址在前,體號在后(使用所有存儲器進行編址);
1) 高位交叉 :各個體并行工作
高位交叉的問題: 程序指令是連續存儲的;如果那樣的話,就只能對某一個存儲器進行訪問,無法對其他3個存儲器進行訪問(因為高位交叉編址不連續,是跳躍的); 造成某一個存儲體非常繁忙,其他閑;
適合存儲器容量擴展,但不適合提高存儲器帶寬;
2)低位交叉: 各個體輪流編址
?2.1)低位交叉特點:(在不改變存取周期的情況下,增加存儲器帶寬)
存取周期為T; 總線周期為t(濤);把存取周期與總線周期區別開;
高位交叉用于存儲器容量擴展;
低位交叉用于存儲器帶寬擴展;
【2.7.3】高性能存儲芯片
【3】高速緩沖存儲器(高速緩存) 單獨一篇文章;
?為啥引入緩存?
因為cpu的速度再快,但存儲器速度跟不上,那cpu整體速度也起不來,因為cpu需要和存儲器或內存交互;所以需要在 cpu 和 主存之間添加一種速度比主存快,與寄存器接近的存儲介質,即高速緩沖存儲器;
計算機中高速緩存的訪問時間如下圖:
計算機中高速緩存的物理位置如下圖:
【3.1】概述
【3.1.1】問題提出
引入高速緩存可以提高cpu執行速度的理論依據是局部性原理:
- 時間局部性,當前正在使用的指令和數據,還將來還會被使用到;
- 空間局部性: 當前正在使用的指令和數據,其相鄰地址的指令和數據也可能會被使用到;
【3.1.2】cache工作原理
主存有M塊; 緩存有C塊; M遠遠大于C;
緩存中:標記存儲的是主存塊號;
命中率與cache容量和塊長有關:
塊太小,則cpu從某緩存塊中沒有取幾條指令,則又會去訪問內存;
塊長:在一個存取周期中從主存調出的信息長度; 如1個塊=4個存儲字,存儲字=存儲單元;
效率e的最大值為100%,全部訪問緩存;
效率e的最小值為 tc/tm ;
【3.1.3】cache基本結構
【3.1.4】cache讀寫操作(非常重要,涉及數據一致性問題)
1.有些操作只在cache寫,沒有在主存寫; 所以寫操作一定要注意cache與主存的數據一致性問題(進一步的,我們可以擴展到 jvm的內存可見性問題);
2.Cache寫操作:
- 2.1寫直達法: 寫操作的數據,既要寫入cache也要寫入主存;
- 2.2 寫回法: 寫操作的數據,只寫入cache,不寫入主存; 當cache數據被替換時才寫回主存;(cache與主存的數據一致性問題)
如果多個cpu,對同一個內存塊都有自己的cache副本,那多個cache副本就存在數據一致性問題; 這是并行計算機體系結構中一個主要問題;
【3.1.5】cache改進
離cpu比較近的cache,直接就把cache做在cpu中,作為集成cache(片內cache);
Cpu有多個核,每個核都有cache,多個核有共享cache;
統一緩存和分立緩存:
- 統一緩存: 指令和數據放在同一個cache;
- 分立緩存: 指令和數據放在不同的cache;
【3.2】cache與主存地址映射
Cache與主存的地址映射指的是: 主存當中的任意一塊,如果要加載到cache的話, 可以加載到cache當中的那些塊;根據映射方法不同,有3種映射,如下:
- 直接映射;
- 全相聯映射;
- 組相聯映射;
【3.2.1】直接映射
?
主存儲器的第0塊(或第2^c塊),只能放到cache的第0塊;
主存儲器的第1塊,只能放到cache的第1塊; … …? 這種方法就稱為直接映射;
問題: cache的利用率不高;
【3.2.2】全相聯映射
任何一個塊要從主存儲器調入cache,只要cache還有空閑塊,就可以調入;
則主存塊被調用 cache,那它可以被調入cache的任意一個塊中;
優點:
- cache利用率高了;
缺點:
- 這會造成判斷是否cache命中的電路或邏輯非常復雜,因為需要一個一個去比較;
【3.2.3】組相聯映射(推薦*)
先把cache分為塊; 多個塊被分為一個組;如2個塊一個組;
把主存儲器分為塊;多個塊被分為一個組;如2個塊一個區;
cache組的個數,與主存儲器區的個數,是相同的;
cache存放規則: 主存中0區的任意一塊,可以放入cache0組的任意一塊;
主存1區,對應cache1組;
……
某一主存塊J按模Q(cache組的個數)映射到緩存的第i組的任意一塊;
【小結1】cache與主存映射的優缺點
- 直接相聯:不靈活,cache利用率低,但速度快;
- 全相聯: 成本高,速度慢,但cache利用率比較高;
- 組相聯: 速度較快,利用率較高;
【小結2】cache與主存映射的3種方式應用場景
- 靠近cpu的cache采用直接相聯;
- 中間層次的cache采用組相聯;
- 距離cpu最遠的cache采用全相聯方式;
【3.2.3】替換算法
【問題】
- 當cache不夠用了, 選擇哪一個cache塊從cache退出;
?
【4】輔助存儲器 (了解)
【4.1】概述
?
1.?? ?記錄密度
- 道密度 Dt:硬盤單位長度有多少個磁道;
- 位密度:Db,單位長度的磁盤保存了多少二進制信息;
2.存儲容量 = n*k*s ;盤面 * 每個盤面磁道數 * 每個磁道的二進制信息; 磁盤每個磁道是一個同心圓,越往外,位密度越低;
3.平均尋址時間=尋道時間+等待時間;
- 尋道時間:讀寫頭在硬盤表面進行移動找到指定磁道的時間;
- 等待時間: 找到磁道以后,讀寫頭停止,磁盤旋轉,等待給定扇區旋轉到磁頭下面的時間;
【4.2】 磁記錄原理與記錄方式
【4.3】 硬磁盤存儲器
?【4.3.1】磁盤驅動器
【4.3.2】磁盤控制器
【4.4】 軟盤
?
【4.5】 光盤存儲器
?
總結
- 上一篇: 摘要算法与加密(以MD5算法为例)
- 下一篇: 刑警2010结局 是一个什么故事