20135203齊嶽 信息安全系統設計基礎第六週學習總結html
學習計時:共9小時算法
讀書:4編程
代碼:2數組
做業:1緩存
博客:2安全
高速緩存的原理和應用異步
實驗:須要動手的到實驗樓中練習一下函數
存儲器系統:具備不一樣容量、成本和訪問時間的存儲器設備的層次結構。性能
計算機程序的基本屬性:局部性。具備良好局部性的程序傾向於一次又一次訪問相同的或者鄰近的數據項集合,傾向於從存儲器層次結構中較高層次處訪問數據項,所以運行的更快。學習
靜態RAM(SRAM):用來做爲高速緩存存儲器,每一個位存儲在一個雙穩態的存儲器單元裏。雙穩態:電路能夠無限期的保持在兩個不一樣的電壓配置或者狀態之一。只要供電,就會保持不變。
動態RAM(DRAM):用來做爲主存以及圖形系統的幀緩衝區。將每一個位存儲爲對一個電容的充電,當電容的電壓被擾亂以後,他就永遠都不會再恢復了。暴露在光線下會致使電容電壓改變。
SRAM與DRAM的對比:
SRAM DRAM 不須要刷新 以納秒爲週期刷新 存取速度快 存取速度慢 對光電噪聲不敏感 光電因素易致使電壓改變 晶體管多密集度低 電容小,密集度高 功耗貴代價高 功耗低
DRAM芯片中的單元(位)被分紅了d個超單元,每一個超單元都由w個DRAM單元組成, 一個d*w的DRAM共存儲dw位信息。超單元被組織成一個r行c列的長方形陣列,rc=d。每一個超單元的地址用(i,j)來表示(從零開始)。設計成二維矩陣是爲了下降芯片上地址引腳的數量。
信息經過稱爲引腳的外部鏈接器流入/流出芯片,每一個引腳攜帶一個1位信號。
每一個DRAM信號被鏈接到稱爲存儲控制器的電路,電路每次傳輸量爲8位。行地址i,RAS請求;列地址j,CAS請求共享相同的DRAM地址引腳。
雙列直插存儲器模塊(DIMM):168個引腳,以64位爲塊傳入/傳出數據到存儲控制器。
單列直插存儲器模塊(SIMM):72個引腳,以32位爲塊傳入/傳出數據到存儲控制器。
快頁模式DRAM:容許對同一行連續的訪問能夠直接從行緩衝區獲得服務,避免內部行緩衝區使用一個丟棄其餘的現象。
擴展數據輸出DRAM:容許單獨的CAS信號在時間上靠的更緊密一點。
同步DRAM:用驅動存儲控制器相同的外部時鐘信號的上升沿來替代許多的異步信號,速度更快。
雙倍數據速率同步DRAM:經過使用兩個時鐘沿做爲控制信號,使得DRAM的速度翻倍。
RambusDRAM:增大了最大帶寬
視頻DRAM:用在圖形系統的幀緩衝區中,容許對存儲器並行的讀和寫。
訪問主存
總線:數據流經過稱爲總線的共享電子電路在處理器和DRAM之間傳送。是一組並行的導線,能攜帶地址、數據和控制信號。
總線事務:CPU和主存之間的數據傳送的過程。讀事務,從主存傳數據到CPU;寫事務,從CPU傳數據到主存。
I/O橋:將系統總線的電子信號翻譯成存儲器總線的電子信號。系統總線鏈接CPU和I/O橋,控制總線鏈接I/O橋和主存。
若是斷電,DRAM和SRAM都會丟失信息,非易失性存儲器——只讀存儲器:ROM。ROM是以他們可以被重編程的次數和對他們重編程的機制來區分的。
可編程ROM(PROM):只能被編程一次。PROM每一個存儲單元有一種熔絲,只能用高電流熔斷一次。
可擦寫可編程ROM(EPROM):紫外線光照射過窗口,EPROM就被清除爲0,被擦除和重編程的次數爲1000次。
電子可擦除ROM(EEPROM):不須要一個物理上獨立的編程設備,所以能夠直接在印製電路卡上編程,可以編程的次數爲10^5。
閃存:基於EEPROM,爲大量的電子設備提供快速而持久的非易失性存儲。
磁盤構造:磁盤由盤片構成,表面覆蓋着磁性記錄材料,中央有一個能夠旋轉的主軸 ,旋轉速率大約爲5400-15000每分鐘。磁盤的每一個表面是一組稱爲磁道的同心圓組成,每一個磁道被劃分爲一組扇區,扇區之間由一些間隙隔開,間隙存儲用來標識扇區的格式化位。
磁盤容量由如下技術因素決定:
記錄密度(位/英寸):磁道一英寸的段中能夠放入的位數。
磁道密度(道/英寸):從盤片中心出發半徑上一英寸的段內能夠有的磁道數
面密度(位/平方英寸):記錄密度與磁道密度的乘積。
現代大容量磁盤使用一種稱爲多區記錄的技術,柱面的集合被分割稱爲不相交的子集合,稱爲記錄區,每一個區包含一組連續的柱面。
磁盤操做:磁盤用讀/寫頭來讀寫存儲在磁性表面的位,而讀寫頭鏈接到一個傳動臂 一端,經過移動轉動臂將讀寫頭定位在磁道上的機械運動稱爲尋道。磁盤以扇區大小的塊來讀寫數據,對扇區的訪問時間有三個主要的組成部分:
尋道時間:轉動臂將讀/寫頭定位到包含目標扇區的磁道上所需時間。
旋轉時間:驅動器等待目標扇區的第一個位旋轉到讀/寫頭下的時間。最大爲
平均旋轉時間是Tmax的一半。
傳送時間:讀寫並傳送該扇區內容的時間。平均傳送時間爲:
邏輯磁盤塊:現代磁盤將盤面的構造視爲一個B個扇區大小的邏輯塊序列,磁盤控制器維護着邏輯塊號和實際磁盤扇區之間的映射關係。邏輯塊號可識別爲一個盤面、磁道、扇區三元組,惟一的標識了相對應的物理扇區。內存能夠當作字節數組、磁盤能夠當作塊數組。
通用串行總線:一個普遍的使用標準,用於鏈接各類外圍I/O設備。
圖形卡(或適配器):包含硬件和軟件邏輯,表明CPU在顯示器上畫像素。
主機總線適配器: 將一個或者多個磁盤鏈接到I/O總線,使用一個特別的主機總線接口定義的通訊協議。
訪問磁盤:CPU使用一種稱爲存儲器映射I/O的技術向I/O設備發出命令,地址空間中爲I/O設備通訊保留的地址稱爲I/O端口。
固態硬盤是一種基於閃存的存儲技術。一個硬盤包由一個或者多個閃存芯片和內存翻譯層組成,閃存芯片替代旋轉磁盤中的機械驅動器,而閃存翻譯層將對邏輯塊的請求翻譯成對底層物理設備的訪問
不一樣的存儲技術有不一樣的價格和性能折中。
不一樣存儲技術的價格和性能屬性以大相徑庭的速率變化着
DRAM和磁盤的性能滯後於CPU的性能。
局部性原理:一個編寫良好的計算機程序傾向於引用鄰近於其餘最近引用過的數據項,或者最近引用過的數據項自己。有良好局部性的程序比局部性差的程序運行的更快,在硬件層引入高速緩存存儲器就體現了局部性原理。
時間局部性(temporal locality):被引用過一次的存儲器位置在將來會被屢次引用(一般在循環中)。
空間局部性(spatial locality):若是一個存儲器的位置被引用,那麼未來他附近的位置也會被引用。
一個連續向量中,每隔k個元素進行訪問,被稱爲步長爲k的引用模式,具備步長爲1的引用模式稱爲順序引用模式,隨着步長增長空間局部性降低。
雙重嵌套循環按照行優先順序讀取數組元素。(由於C數組在存儲器中是按照行順序來存放的)
練習題6.9中,空間局部性從好到壞分別是:clear1,clear2,clear3,編寫程序測試三個算法運行的時間長短,獲得結果以下:
(由於代碼比較簡單,程序運行速度快,單次運行時間短,沒法準確表示,因此圖中時間是運行1000000次的總時間除以1000以後的結果)
程序指令是存放在存儲器中的,CPU讀取這些指令的過程當中評價一個程序關於取指令的局部性。
代碼區別與程序數據的一個重要屬性就是在運行時指令是不能被修改的。
重複引用同一個變量的程序有良好的時間局部性
對於具備步長爲k的引用模式的程序,步長越小,空間局部性越好。
對於取指令來講,循環具備良好的時間和空間局部性。循環體越小,迭代次數越多局部性越好。
高速緩存是一個小而快速的存儲設備,做爲存儲在更大、更慢的設備中的數據對象的緩衝區域。每一層存儲器被劃分紅連續的數據對象片,稱爲塊,每一個塊都有惟一的對象和名字。數據老是以塊大小爲傳送單元在第k層和第k+1層之間來回拷貝。
緩存命中:當程序須要第k+1層的某個數據對象d時,首先在當前存儲的第k層的一個塊中查找d,若是d恰好在第k層中,則稱爲緩存命中。
緩存不命中:若是k層中沒有緩存數據d,則稱爲緩存不命中,此時要從k+1層取出包含d的塊,可能會覆蓋(替換/驅逐)如今的一個塊(犧牲塊)。決定該替換哪一個快是緩存的替換策略來控制的。(例如,隨機替換策略/LRU策略)
強制性不命中/冷不命中:第k層緩存是空的(冷緩存),只是短暫的狀態,不會在反覆訪問存儲器使得緩存暖身以後的穩定狀態出現。
衝突不命中:第k+1層的第i塊,必須放置在第k層的塊(i mod 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設備。越下層越可能使用寫回。
確保代碼高速緩存友好的基本方法:
讓最多見的狀況運行的快。
對局部變量的反覆引用是好的,由於編譯器可以將他們緩存在寄存器文件中。
步長爲1的引用模式是好的,由於存儲器層次結構中全部層次上的緩存都是將數據存儲爲連續的塊(空間局部性)。
一個程序從存儲系統中讀數據的速率稱爲讀吞吐量,或者讀帶寬,一般以兆字節每秒(MB/s)爲單位。
讀帶寬的時間和空間局部性的二維函數稱爲存儲器山。
1.習題6.11在P414dotprpd的例子中,在對數組x填充以後爲什麼全部對x和y的命中率變成3/4?是如何計算的?
2.存儲器山中爲何時間局部性經過山脊來體現,而空間局部性表現爲斜坡?(對存儲器山的理解還不是很透徹,但願老師上課的時候集中講解。)
1.《深刻理解計算機系統》
2.《局部性原理淺析——良好代碼的基本素質》http://www.cnblogs.com/yanlingyin/archive/2012/02/11/2347116.html