20145218 《信息安全系統設計基礎》第六週學習總結
教材學習內容總結
在簡單模型中,存儲器系統是一個線性的字節數組,而cpu可以在一個常數時間嫩訪問每一個存儲器位置。實際上,存儲器系統是一個具備不一樣容量、成本和訪問時間的存儲設備的層次結構。html
6.1 存儲技術
隨機訪問存儲器(RAM)git
- 靜態RAM(SRAM):用來做爲高速緩存存儲器,每一個位存儲在一個雙穩態的存儲器單元裏。雙穩態:電路能夠無限期的保持在兩個不一樣的電壓配置或者狀態之一。只要供電,就會保持不變。即便有干擾,例如電子噪音來擾亂電壓,當干擾消除後,電路就會恢復到穩定值。
- 動態RAM(DRAM):用來做爲主存以及圖形系統的幀緩衝區。將每一個位存儲爲對一個電容的充電,當電容的電壓被擾亂以後,他就永遠都不會再恢復了。暴露在光線下會致使電容電壓改變。
- SRAM與DRAM的對比:
SRAM DRAM
不須要刷新 以納秒爲週期刷新
存取速度快 存取速度慢
對光電噪聲不敏感 光電因素易致使電壓改變
晶體管多密集度低 電容小,密集度高
功耗貴代價高 功耗低
SRAM DRAM
每位晶體管數 6 1
相對訪問時間 1x 10x
持續的? 是 否
敏感的? 否 是
相對花費 100x 1x
應用 高速緩存存儲器 主存,幀緩衝區
- 傳統的DRAM
- DRAM芯片中的單元(位)被分紅了d個超單元,每一個超單元都由w個DRAM單元組成, 一個d*w的DRAM共存儲dw位信息。超單元被組織成一個r行c列的長方形陣列,rc=d。每一個超單元的地址用(i,j)來表示(從零開始)。設計成二維矩陣是爲了下降芯片上地址引腳的數量。
- 信息經過稱爲引腳的外部鏈接器流入/流出芯片,每一個引腳攜帶一個1位信號。
- 每一個DRAM信號被鏈接到稱爲存儲控制器的電路,電路每次傳輸量爲8位。行地址i,RAS請求;列地址j,CAS請求共享相同的DRAM地址引腳。組織成二維陣列而不是線性數組的一個緣由是下降芯片上地址引腳的數量。
- 二維陣列阻止的缺點是必須分兩步發送地址,這增長了訪問時間。
- 電路設計者將DRAM組織成二維陣列而不是線性數組的一個緣由是下降芯片上地址引腳的數量。
- 而爲真理組織的缺點是必須分兩步發送地址,這增長了訪問時間。
- 存儲器模塊
- 雙列直插存儲器模塊(DIMM):168個引腳,以64位爲塊傳入/傳出數據到存儲控制器。
- 單列直插存儲器模塊(SIMM):72個引腳,以32位爲塊傳入/傳出數據到存儲控制器。
- 加強的DRAM
- 快頁模式DRAM:容許對同一行連續的訪問能夠直接從行緩衝區獲得服務,避免內部行緩衝區使用一個丟棄其餘的現象。
- 擴展數據輸出DRAM:容許單獨的CAS信號在時間上靠的更緊密一點。
- 同步DRAM:用驅動存儲控制器相同的外部時鐘信號的上升沿來替代許多的異步信號,速度更快。
- 雙倍數據速率同步DRAM:經過使用兩個時鐘沿做爲控制信號,使得DRAM的速度翻倍。
- RambusDRAM:增大了最大帶寬
- 視頻DRAM:用在圖形系統的幀緩衝區中,容許對存儲器並行的讀和寫。
- 訪問主存
- 總線:數據流經過稱爲總線的共享電子電路在處理器和DRAM之間傳送。是一組並行的導線,能攜帶地址、數據和控制信號。
- 總線事務:CPU和主存之間的數據傳送的過程。讀事務,從主存傳數據到CPU;寫事務,從CPU傳數據到主存。
- I/O橋:將系統總線的電子信號翻譯成存儲器總線的電子信號。系統總線鏈接CPU和I/O橋,控制總線鏈接I/O橋和主存。
非易失性存儲器(ROM)算法
若是斷電,DRAM和SRAM都會丟失信息,非易失性存儲器——只讀存儲器:ROM。ROM是以他們可以被重編程的次數和對他們重編程的機制來區分的。編程
- 可編程ROM(PROM):只能被編程一次。PROM每一個存儲單元有一種熔絲,只能用高電流熔斷一次。
- 可擦寫可編程ROM(EPROM):紫外線光照射過窗口,EPROM就被清除爲0,被擦除和重編程的次數爲1000次。
- 電子可擦除ROM(EEPROM):不須要一個物理上獨立的編程設備,所以能夠直接在印製電路卡上編程,可以編程的次數爲10^5。
- 閃存:基於EEPROM,爲大量的電子設備提供快速而持久的非易失性存儲。
磁盤存儲數組
- 磁盤構造:磁盤由盤片構成,表面覆蓋着磁性記錄材料,中央有一個能夠旋轉的主軸 ,旋轉速率大約爲5400-15000每分鐘。磁盤的每一個表面是一組稱爲磁道的同心圓組成,每一個磁道被劃分爲一組扇區,扇區之間由一些間隙隔開,間隙存儲用來標識扇區的格式化位。
- 磁盤容量由如下技術因素決定:
- 記錄密度(位/英寸):磁道一英寸的段中能夠放入的位數。
- 磁道密度(道/英寸):從盤片中心出發半徑上一英寸的段內能夠有的磁道數
- 面密度(位/平方英寸):記錄密度與磁道密度的乘積。
- 現代大容量磁盤使用一種稱爲多區記錄的技術,柱面的集合被分割稱爲不相交的子集合,稱爲記錄區,每一個區包含一組連續的柱面。
- 磁盤操做:磁盤用讀/寫頭來讀寫存儲在磁性表面的位,而讀寫頭鏈接到一個傳動臂 一端,經過移動轉動臂將讀寫頭定位在磁道上的機械運動稱爲尋道。磁盤以扇區大小的塊來讀寫數據,對扇區的訪問時間有三個主要的組成部分:
- 尋道時間:轉動臂將讀/寫頭定位到包含目標扇區的磁道上所需時間。
- 旋轉時間:驅動器等待目標扇區的第一個位旋轉到讀/寫頭下的時間。最大爲
- 平均旋轉時間是Tmax的一半。
- 傳送時間:讀寫並傳送該扇區內容的時間。平均傳送時間爲:
- 邏輯磁盤塊:現代磁盤將盤面的構造視爲一個B個扇區大小的邏輯塊序列,磁盤控制器維護着邏輯塊號和實際磁盤扇區之間的映射關係。邏輯塊號可識別爲一個盤面、磁道、扇區三元組,惟一的標識了相對應的物理扇區。內存能夠當作字節數組、磁盤能夠當作塊數組。
- 鏈接到I/O設備:全部的I/O設備都是經過I/O總線鏈接到CPU和主內存。有三種不一樣類型:
通用串行總線:一個普遍的使用標準,用於鏈接各類外圍I/O設備。
- 圖形卡(或適配器):包含硬件和軟件邏輯,表明CPU在顯示器上畫像素。
- 主機總線適配器: 將一個或者多個磁盤鏈接到I/O總線,使用一個特別的主機總線接口定義的通訊協議。
- 訪問磁盤:CPU使用一種稱爲存儲器映射I/O的技術向I/O設備發出命令,地址空間中爲I/O設備通訊保留的地址稱爲I/O端口。
固態硬盤緩存
- 固態硬盤是一種基於閃存的存儲技術。一個硬盤包由一個或者多個閃存芯片和內存翻譯層組成,閃存芯片替代旋轉磁盤中的機械驅動器,而閃存翻譯層將對邏輯塊的請求翻譯成對底層物理設備的訪問
存儲技術趨勢安全
- 不一樣的存儲技術有不一樣的價格和性能折中。
- 不一樣存儲技術的價格和性能屬性以大相徑庭的速率變化着
- DRAM和磁盤的性能滯後於CPU的性能。
6.2局部性
局部性原理:一個編寫良好的計算機程序傾向於引用鄰近於其餘最近引用過的數據項,或者最近引用過的數據項自己。有良好局部性的程序比局部性差的程序運行的更快,在硬件層引入高速緩存存儲器就體現了局部性原理。異步
對程序數據引用的局部性函數
- 時間局部性(temporal locality):被引用過一次的存儲器位置在將來會被屢次引用(一般在循環中)。
- 空間局部性(spatial locality):若是一個存儲器的位置被引用,那麼未來他附近的位置也會被引用。
- 一個連續向量中,每隔k個元素進行訪問,被稱爲步長爲k的引用模式,具備步長爲1的引用模式稱爲順序引用模式,隨着步長增長空間局部性降低。
- 雙重嵌套循環按照行優先順序讀取數組元素。(由於C數組在存儲器中是按照行順序來存放的)
取指令的局部性性能
- 程序指令是存放在存儲器中的,CPU讀取這些指令的過程當中評價一個程序關於取指令的局部性。
- 代碼區別與程序數據的一個重要屬性就是在運行時指令是不能被修改的。
局部性小結
- 重複引用同一個變量的程序有良好的時間局部性
- 對於具備步長爲k的引用模式的程序,步長越小,空間局部性越好。
- 對於取指令來講,循環具備良好的時間和空間局部性。循環體越小,迭代次數越多局部性越好。
v6.3存儲器層次結構
存儲器層次結構中的緩存
- 高速緩存是一個小而快速的存儲設備,做爲存儲在更大、更慢的設備中的數據對象的緩衝區域。每一層存儲器被劃分紅連續的數據對象片,稱爲塊,每一個塊都有惟一的對象和名字。數據老是以塊大小爲傳送單元在第k層和第k+1層之間來回拷貝。
- 緩存命中:當程序須要第k+1層的某個數據對象d時,首先在當前存儲的第k層的一個塊中查找d,若是d恰好在第k層中,則稱爲緩存命中。
- 緩存不命中:若是k層中沒有緩存數據d,則稱爲緩存不命中,此時要從k+1層取出包含d的塊,可能會覆蓋(替換/驅逐)如今的一個塊(犧牲塊)。決定該替換哪一個快是緩存的替換策略來控制的。(例如,隨機替換策略/LRU策略)
- 緩存不命中的種類
- 強制性不命中/冷不命中:第k層緩存是空的(冷緩存),只是短暫的狀態,不會在反覆訪問存儲器使得緩存暖身以後的穩定狀態出現。
- 衝突不命中:第k+1層的第i塊,必須放置在第k層的塊(i mod 4)中,這種限制性的放置策略引發衝突不命中。
存儲器層次結構概念小結
- 利用時間局部性: 一旦一個數據在第一次不命中時被拷貝到緩存中,咱們就會指望後面對該目標有一系列的訪問命中。
- 利用空間局部性:塊一般包含多個數據對象,咱們一般指望後面對該塊中其餘對象的訪問可以補償不命中後拷貝該塊的花費。
v6.4高速緩存存儲器
通用的高速緩存存儲器結構
- 一個計算機系統每一個存儲地址有m位,造成M=2^m個不一樣的地址。
- 高速緩存被組織成一個有S=2^s個高速緩存組的數組,每一個組包含E個高速緩存行,每一個行是由一個B=2^b字節的數據塊、一位有效位以及t=m-(b+s)個標記位組成,惟一標識存儲在這個高速緩存行中的塊。
- 高速緩存的結構用元組(S,E,B,m)來描述,高速緩存的大小C = S * E * B。
地址: t位 s位 b位
標記 組索引 塊偏移
- s個組索引位:一個無符號整數,說明字必須存儲在哪一個組中。
- t個標記位:組中的哪一行包含這個字。
- b個塊偏移位:在B個字節的數據塊中的字偏移。
直接映射的高速緩存
- 每組只有一行(E=1)的高速緩存稱爲直接映射高速緩存。高速緩存肯定一個請求是否命中,而後抽取出被請求字的過程分爲三步:1)組選擇,2)行匹配,3)字抽取。
- 直接映射高速緩存中的組選擇:高速緩存從要抽取的字的地址中抽取出S個組索引位,這些位被解釋成一個對應於一個組號的無符號整數。
- 直接映射高速緩存中的行匹配:當且僅當設置了有效位,並且高速緩存行標記與w的地址中的行標記相匹配時,這一行中包含w的一個拷貝。
- 直接映射高速緩存中的字抽取:塊偏移位提供了所須要的字的第一個字節的偏移。
- 直接映射高速緩存中不命中時的行替換:須要從存儲器層次結構中的下一層取出被請求的塊,而後將新的塊存儲在組索引位指示的組中的一個高速緩存行中。
組相連高速緩存
- 組相連高速緩存中的組選擇:與直接映射高速緩存中的組選擇同樣,組索引位標識組。
- 組相連高速緩存中的行匹配和字選擇:把每一個組看作一個小的相關聯存儲器,是一個(key,value)對的數組,以key爲輸入,返回對應數組中的value值。高速緩存必須搜索組中的每一行,尋找有效的行其標記與地址中的相匹配。
- 組相連高速緩存中不命中時的行替換:最簡單的替換策略是隨機選擇要替換的行,其餘複雜的策略則使用了局部性原理,例如最不常使用、最近最少使用,等。
全相連高速緩存
- 全相連高速緩存中的組選擇:只有一個組,沒有組索引位。
- 全相連高速緩存中的行匹配和字選擇:與組相連高速緩存是同樣的,但規模大不少,所以只適合作小的高速緩存,例如虛擬存儲系統中的翻譯備用緩衝器。
有關寫的問題
- 寫命中
- 直寫:當即將w的高速緩存塊寫回緊接着的低一層中,雖然簡單但每次都會引發總線流量。
- 寫回:儘量地推遲存儲器更新,只有當替換算法要驅逐更新過的塊時,才把它寫到低一級的塊中。減小流量但增長了複雜性。
- 寫不命中
- 寫分配:加載相應的低一層中的塊到高速緩存中,而後更新這個高速緩存塊。(寫回)
- 非寫分配:避開高速緩存,直接把這個字寫到低一層中。(直寫)
高速緩存參數的性能影響
- 不命中率:不命中數量/引用數量
- 命中率:1-不命中率
- 命中時間:從高速緩存傳送一個字到CPU所需的時間,包括組選擇,行匹配,字抽取的時間。
- 不命中處罰:因爲不命中所須要的額外時間。
影響性能的因素
- 高速緩存大小的影響:較大的高速緩存可能會提升命中率,但使大存儲器運行的更快是更難一些的。
- 塊大小的影響:較大的塊能利用程序中可能存在的空間局部性,幫助提升命中率;但塊越大意味着高速緩存行較少,損害時間局部性。
- 相聯度的影響:相聯度較大(E值較大)優勢是下降了高速緩存因爲衝突不命中出現抖動的可能性,但成本較高。
- 寫策略的影響:直寫高速緩存易實現,並且能使用獨立於高速緩存的寫緩衝區,用來更新存儲器,不命中開銷小。寫回高速緩存引發的傳送比較少,容許更多的到存儲器的寬帶用於執行DMA的I/O設備。越下層越可能使用寫回。
6.5編寫高速緩存友好的代碼
確保代碼高速緩存友好的基本方法:
- 讓最多見的狀況運行的快。
- 在每一個循環內部緩存不命中數量最小。
- 對局部變量的反覆引用是好的,由於編譯器可以將他們緩存在寄存器文件中。
- 步長爲1的引用模式是好的,由於存儲器層次結構中全部層次上的緩存都是將數據存儲爲連續的塊(空間局部性)。
6.6綜合:高速緩存對程序性能的影響
存儲器山
- 一個程序從存儲系統中讀數據的速率稱爲讀吞吐量,或者讀帶寬,一般以兆字節每秒(MB/s)爲單位。
- 讀帶寬的時間和空間局部性的二維函數稱爲存儲器山。
根據代碼驅動的程序設計學習創建的項目結構
課後做業中的問題和解決過程
習題6.2
計算這樣一個磁盤的容量。它有2個盤片,10 000個柱面,每條磁道平均有400個扇區,每一個扇區平均有512個字節
磁盤容量 = (512/400)*400*10000*2*2= 8 192 000 000 字節 = 8.192GB
習題6.3
估計訪問下面的一個磁盤上的一個扇區須要的時間(以ms爲單位)。旋轉速率:15000RPM;Taveseek = 8ms;每條磁道的平均扇區數:500
訪問時間 = Taveseek+Taverotation+Tavetransfer = 8ms+0.51/15000RPM60secs.min1000ms/s+1/15000RPM1/50060secs/min1000ms/s=8ms+2ms+0.008ms=10.008ms
習題6.4
假設1MB的文件由512字節的邏輯塊組成,存儲在有以下特性的磁盤驅動器上(旋轉速率:10 000RPM,Taveseek=5ms,平均扇區/磁道 = 1000)。
(1)最好的狀況:給定邏輯塊到磁盤扇區的最好的可能的映射(即,順序的),估計讀這個文件須要的最優時間
(2)隨機的狀況:若是塊是隨機地映射到磁盤扇區的,估計讀這個文件須要的時間
(1)T=Taveseek+Taverotation+2Tmaxrotation=5ms+3ms+26ms=20ms
(2)在這種狀況下,塊被隨機的映射到扇區上,讀2000塊的每一塊都須要Taveseek+Tavgrotation=8ms。因此讀這個文件的總時間爲T = 8ms*2000=16000ms=16s
習題6.11
在前面dotprod的例子中,在咱們對數組x作了填充以後,全部對x和y的引用的命中率是多少?
在填充了以後,對於x和y數組,只有在引用第0個和第4個元素的時候發生不命中。於是命中率爲75%
本週代碼託管截圖
代碼託管連接:https://git.oschina.net/senlinmilelu/ISdesign20145218/tree/master
其餘(感悟、思考等,可選)
本次學習過程整體來講較上一次輕鬆,由於概念性知識點並不晦澀,而代碼部分也並不困難。同時,本章節各部分之間的聯繫性加強,只要好好閱讀課本,課本上練習題都不是問題,基本上都有公式。
學習進度條
目標 |
5000行 |
30篇 |
400小時 |
|
第一週 |
200/200 |
2/2 |
20/20 |
|
第二週 |
300/500 |
3/4 |
18/38 |
|
第三週 |
500/1000 |
4/7 |
22/60 |
|
第四周 |
300/1300 |
4/9 |
30/90 |
|
第五週 |
200/500 |
5/4 |
18/38 |
|
第六週 |
120/1000 |
6/7 |
22/60 |
|
第七週 |
70/1300 |
7/9 |
30/90 |
|
參考資料