1. 程式人生 > >2017-2018-1 20155202 《信息安全系統設計基礎》第13周學習總結

2017-2018-1 20155202 《信息安全系統設計基礎》第13周學習總結

track 並行 hpu i/o ack owin ridge sys 廠商

2017-2018-1 20155202 《信息安全系統設計基礎》第13周學習總結

本周任務:

  • 找出全書你認為最重要的一章,深入重新學習一下,要求(期末占10分):
  • 完成這一章所有習題
  • 詳細總結本章要點
  • 給你的結對學習搭檔講解你的總結並獲取反饋

教材的第六章學習:

  • 技術分享圖片

    教材學習主要內容:

  • 了解常見的存儲技術(RAM、ROM、磁盤、固態硬盤等)
  • 理解局部性原理
  • 理解緩存思想
  • 理解局部性原理和緩存思想在存儲層次結構中的應用
  • 高速緩存的原理和應用

    1.==++存儲器系統++==

  • 在簡單模型中,存儲器系統是一個線性的字節數組,CPU能夠在一個常數訪問每個存儲器位置。

  • 雖然是一個行之有效的模型,但沒有反應現代系統實際工作方式。
  • 實際上,存儲器系統(memory system)是一個具有不同容量,成本和訪問時間的存儲設備的層次結構。

  • CPU寄存器保存著最常用的數據。(0周期)
  • 靠近CPU的小的,快速的高速緩存存儲器(cache memory)作為一部分存儲在相對慢速的主儲存器(main memory,簡稱主存)中的數據和指令的緩沖區。(1~30周期)
  • 主存暫時存放 儲存在容量較大的,慢速磁盤上的數據。(50~200周期)
  • 磁盤又作為存儲在通過網絡連接的其他機器的磁盤或磁帶上數據的緩沖區。(幾千萬個周期)

2.==存儲技術==

2.1 ==隨機訪問存儲器==

  • 隨機訪問存儲器(Random-AccessMem)分為兩類:靜態的和動態的。
  • 靜態RAM (SRAM)比動態RAM(DRAM)更快,但也貴得多。SRAM用來作為高速緩存存儲器,既可以在CPU芯片上,也可以在片下。
    靜態存儲器
    SRAM將每個位存儲在一個雙穩態的(bitable)存儲器單元裏。每個單元是用一個六晶體管電路來實現的。
  • 動態RAM
    DRAM將每個位存儲為對一個電容的充電。這個電容非常小,通常只有大約30毫微微法拉 (femtofarad)——30*10^15法拉。不過,回想一下法拉是一個非常大的計量單位。DRAM存儲 器可以制造得非常密集——每個單元由一個電容和一個訪問晶體管組成。
  • 技術分享圖片

  • 靜態RAM(SRAM)比動態RAM(DRAM)快地多,也貴得多。
  • SRAM用來作為高速緩存存儲器。(一般只有幾兆)
  • DRAM用來作為主存以及圖形系統的幀緩沖區(顯存)。(一般有幾G)
    具體分析

==SRAM==

  • SRAM將每個位存儲在一個雙穩態(bistable)存儲器單元裏。
  • 每個存儲單元用一個六晶體管電路來實現。

有這樣屬性,可以無限期保持在兩個不同的電壓配置(configuration)或狀態之一。
其他任何狀態都是不穩定的。如圖所示

  • 技術分享圖片

  • 由於這種雙穩態特性,只要有電,它就會永遠保持他的值,即使有幹擾。
  • 例如電子噪音,來擾亂電壓,當消除幹擾時,電路就會恢復穩定值。

==動態RAM==

  • DRAM將每個位存儲為對一個電容充電,這個電容非常小,通常只有30*10^-15法拉。
  • 因此,DRAM存儲器可以造的十分密集。
  • 每個單元由一個電容和一個訪問晶體管組成。
  • 但是,DRAM存儲器對幹擾非常敏感。當電容電壓被擾亂後,就永遠不會恢復。
  • 很多原因會漏電,使得DRAM單元在10~100毫秒時間內失去電荷。幸運的是,計算機的時鐘周期以納秒衡量,這個保持時間也相當長。
  • 存儲器系統必須周期性地讀出,然後重寫來刷新存儲器的每一位。
  • 有些系統也使用糾錯碼。
  • 技術分享圖片

==兩者的對比==

  • 技術分享圖片

  • 只要有供電,SRAM就會保持不變。
  • SRAM不需要刷新
  • SRAM讀取比DRAM快
  • SRAM對幹擾不敏感。
  • 代價是SRAM單元比DRAM單元使用更多的晶體管,因而密集度低,更貴,功耗更大。

==傳統的DRAM==

  • DRAM芯片的單元被分為d個超單元(supell cell)
  • 每一個個超單元由w個DRAM單元組成。一個d*w的DRAM總共存儲了dw位信息。
  • 超單元被組織成一個r行c列的長方形陣列。
  • 這裏rc=d,每個超單元有形如(i,j)的地址,這裏i表示行,而j表示列。

  • 技術分享圖片

註釋: 計算機構架師稱為單元(cell),電路設計者稱為字(word),避免混淆,取為超單元。
-每個DRAM芯片被鏈接到某個稱為存儲控制器的電路,這個電路可以一次傳送w位到每個DRAM芯片或一次從每個DRAM 芯片傳出w位。

  • 技術分享圖片

    為何有16個單元,卻只要2位addr?

首先發送一個行地址i給DRAM。這叫RAS(Row Acess Strobe,行訪問選通脈沖)。
DRAM的響應是把第i行全部拷貝到一個內部行緩沖區。
然後發送列地址j給DRAM。這叫CAS(Column Access Strobe,列訪問選通脈沖)請求。
DRAM的響應將內部行緩沖區的超單元(i,j)發送給存儲控制單元。
為何設計成二維陣列,而不是線性?

一個原因是降低芯片上地址引腳的數量。原本需要2N 的引腳,只要N個就好了。
缺點是需要傳輸兩次。增加訪問時間。

- ==2.2存儲器模塊==

  • DRAM芯片包裝在存儲器模塊(memory module)中,它是插到主板的擴展槽上。
  • 技術分享圖片

  • 常見的包裝包括168個引腳的雙列直插存儲器模塊(Dual Inline Memory Module),它以64位為塊傳送數據到存儲控制器和從存儲控制器傳出數據。
  • 還包括72個引腳的單列直插存儲器模塊(Single Inline Memory Module),它以32位為塊傳送數據。
  • 如圖展示一個存儲器模塊的基本思想。
  • 技術分享圖片

  • 用對應超單元地址 (i,j)的8個超單元來表示主存字節地址A處的64位雙字(此處:字=4字節)。
  • 通過將多個存儲器模塊連接到存儲控制器,能夠聚合主存。在這種情況下,當控制器收到一個地址A時,控制器選擇包含A的模塊k,將A轉換成它的(i,j)形式,並發送(i,j)到模塊k

==區別==:
  • 只要有電,SRAM就會保持不變,而DRAM需要不斷刷新;
  • SRAM比DRAM快;
  • SRAM對光和電噪聲等幹擾不敏感;

==增強的DRAM==

  1. 基於傳統DRAM,進行優化,改進訪問速度。
  2. 快頁模式DRAM(Fast Page Mode DRAM,FPM DRAM)。
  3. 傳統的DRAM將超單元的一整行拷貝到它的內部緩沖區,使用一個,然後丟棄剩余的。
  4. FPM DRAM允許對同一行連續地訪問可以直接從行緩沖區獲得服務。
  5. 擴展輸出DRAM(Extended Data Out DRAM,EDO DRAM)
  6. FPM DRAM的一個增強形式,它允許單獨的CAS信號在時間上靠的緊密一些。
  7. 同步DRAM(Synchronous DRAM,SDRAM) 不懂
  8. 就它們與存儲控制器通信使用一組顯示的控制信號來說,常規的,FPM,EDO都是異步的。
  9. 最終效果就是SDRAM能夠比那些異步的存儲器更快輸出超單元內容。
  10. 雙倍數據速率同步DRAM(Double Date-rate Synchronous DRAM,DDR SDRAM)
  11. DDR SDRAM是對SDRAM的一種增強。
  12. 通過使用兩個時鐘沿作為控制信號,從而使DRAM 速度翻倍。
  • 技術分享圖片

不同類型的DDR SDRAM是用提高有效帶寬的很小的預取緩沖區的大小來劃分的:

  • DDR(2位)
  • DDR2(4位)
  • DDR3(8位)

  • Rambus DRAM(RDRAM).這是一種私有技術,它的最大帶寬比DDR SDRAMD的更高。
    它用在圖形系統的幀緩沖區中,VRAM的思想與FPM類似,

    兩個主要區別是
  • VRAM的輸出通過依次對內部緩沖區的整個內容進行移位得到。
  • VRAM允許對存儲器並行地讀或寫。

==非易失性存儲器(ROM)==

  • 非易失性存儲器(nonvolatie memory)即使在關電後,也仍然保存他們的信息。
  • DRAM和SRAM是易失的(volatile).
  • 由於歷史原因,雖然ROM有的類型既可以讀也可以寫,但是它們整體被稱為只讀存儲器(Read-Only Memory,ROM)。
  • ROM通過以它們能夠被寫的次數和對他們進行重編程的方式所用的機制區分。

  • 技術分享圖片

==PROM (Programmable ROM,可編程ROM)==

  • 只能夠被編程一次。PROM的每個存儲器有一個熔絲,它只能用高電流熔斷一次。
  • 可擦寫可編程ROM(Erasable Programmable ROM,EPROM)有一個透明的石英窗口,允許光到達存儲單元。
  • 紫外線光照射過窗口,EPROM單元就被清除為0.
  • 對EPROM編程通過使用一種把1寫入EPROM的特殊設備完成。
  • EPROM 可擦寫次數達到1000次

==電子可擦除PROM(EEPROM)==

  • 類似於EPROM,
  • 但是它不需要一個物理上獨立的編程設備,直接在印刷電路卡上編程。EEPROM能夠被編程次數的數量級可以達到10^5次。
  • 閃存(flash memory)也是一類非易失性存儲器,基於EEPROM,已經成為一種重要的存儲設備。
==存儲在ROM設備中的程序通常稱為固件(firmware)==
  • 一些系統在固件中提供了少量基本的輸入和輸出函數。
  • 例如,PC的BIOS(基本輸入/輸出系統)的例程。

==訪問主存==

  1. 數據流通過稱為總線(bus)的共享電子電路在處理器和DRAM主存之間來來回回。
  2. 總線事務(bus transaction):每次CPU和主存之間的數據傳送都是通過一系列步驟來完成的,這些步驟稱為總線事務(bus transaction).
  3. 讀事務(read transaction): 主存把數據給CPU。
  4. 寫事務(write transaction): CPU把數據寫入主存。
  5. 總線是一組並行的導線,能攜帶地址,數據和控制信號。
  6. 取決於總線的設計,數據和地址信號可以使用一條,也可以使用不同的。
  7. 同時,兩個以上的設備也能共享一根總線。
  8. 控制線攜帶的信號為同步事務,標示當前執行的事務類型。
  9. 示例計算機系統的配置,CPU芯片,I/O橋的芯片組,組成DRAM的存儲器模塊。
  • 技術分享圖片

==有一對總線==

  • 系統總線: 鏈接CPU和I/O橋。
  • 存儲器總線:鏈接I/O橋和主存。

==I/O橋==

  • 將系統總線的電子信號翻譯成存儲器總線的電子信號。
  • I/O橋也將系統總線,存儲器總線連接到I/O總線。
  • 磁盤和圖形卡這樣I/O設備共享I/O總線。
  • 關於總線設計的註釋
  • 總線設計是計算機系統中的一個復雜而且變化迅速的方面。不同的廠商提出了不同的總線體系結構,作為產品差異化的一種方式。

  • Intel 系統使用北橋(northbridge)和南橋(southbridge)的芯片組分別將CPU連接到存儲器和I/O設備。
  • 在比較老的系統,Pentium和Core 2 系統中,前端總線(Front Side Bus,FSB)將CPU連接到北橋。
  • AMD 將 FSB 替換為 超傳輸(HyperTransprot)互聯.
  • Core i7 使用的是快速通道(QuickPath)互聯。

舉個例子:

movl A,%eax

這裏地址A的內容被加載到寄存器%eax中,有以下步驟。

  1. CPU芯片上稱為總線接口的電路發起總線上的讀事務。
  2. CPU將地址A放到系統總線上。
  3. I/O橋將信號傳遞到存儲器總線。
  4. 主存感覺到存儲器總線上的地址信號,從存儲器總線讀地址,從DRAM取出數據字,並將數據寫到存儲器總線。
  5. I/O橋將信號翻譯稱系統總線信號,然後沿著系統總線傳遞。
  6. 最後,CPU感受到系統總線上的數據,從總線上讀數據,拷貝到寄存器中。

如果是寫事務

movl %eax,A

這裏寄存器%eax的內容寫入地址中中,有以下步驟。

  1. CPU將地址放到系統總線。存儲器從存儲器總線讀出地址,並等待數據到達。
  2. CPU將數據放到系統總線。主存從存儲器總線讀出數據,並拷貝到DRAM中。
  3. 以上兩個步驟是並行的。(如果數據總線和地址總線分開的話)
  • 技術分享圖片

2.2 ++==磁盤存儲==++

磁盤是廣為應用的保存大量數據的存儲設備,存儲數據的數量級可以達到1TB,1PB等等,而基於RAM的 從幾百到幾千M字節。不過,從DRAM中讀比磁盤快10萬倍,從SRAM讀比磁盤快100萬倍。

訪問磁盤:
  • 在磁盤控制器接收到CPU的讀命令後,它將邏輯號翻譯成一個扇區地址,讀該扇區的內容,然後將這些內容直接傳送到主存,不需要CPU的幹涉,這個過程稱為直接存儲器傳送(Direct Memory Access, DMA),這種數據傳送稱為DMA傳送。

==磁盤構造==

  • 磁盤是由盤片(platter)構成的.
  • 每個盤片有兩面或者稱為表面(surface)。
  • 盤片中央有一個可以旋轉的主軸(spindle),它使得盤片以固定的旋轉速率(rotational rate)旋轉,通常是5400~15 000轉每分鐘(Revolution Per Minute,RPM)
  • 磁盤通常含一個或多個這樣的盤片,並封裝到一個密封的容器裏。
  • 如圖,展示了一個典型的磁盤表面的結構。
  • 技術分享圖片
  1. 每個表面是由一組稱為磁道(track)的同心圓組成的。
  2. 每個磁道被劃分為一組扇區(sector)。
  3. 每個扇區包含相等數量的數據位(通常是512字節),這些數據編碼在扇區的磁性材料中。
  4. 扇區之間由一些間隙(gap)分隔
  5. 不存儲數據
  6. 間隙存儲用來標識扇區的格式化位。
  7. 磁盤是由一個或多個疊放在一起的盤片組成,被封裝在密封包裝。
  8. 整個裝置稱為磁盤驅動器(disk drive),我們通常簡稱為磁盤(disk).
  9. 有時又叫旋轉磁盤(rotating disk),使之區別基於閃存的固態硬盤(SSD)。
  10. SSD沒有可移動的地方
  11. 磁盤商通常用術語柱面(cylinder)描述多個盤片。的構造 。
  12. 柱面是所有盤片表面上到主軸中心的距離相等的磁道集合。
    例如,一個驅動器有三個盤片,六個面。那麽柱面k是六個磁道k的集合。G,M, K大小依賴於上下文,磁盤和RAM中所對應的大小一般不同。
  • 技術分享圖片

==磁盤容量==:

  1. 遠古時期,磁道上的扇區是固定的,所以扇區的數目由靠內磁道能記錄的扇區數決定。
  2. 現在通過多區記錄技術。
  3. 在這種技術中,柱面的集合被分割為不可相交的子集合,稱為記錄區。
  4. 每個區包含一組連續的柱面。
  5. 一個區的每個柱面都有相同的扇區數。
  6. 扇區數也是由一個區最裏面磁道的扇區數決定。
  • 記錄密度(位/英寸):磁道一英寸的段中可以放入的位數。
  • 磁道密度(道/英寸):從盤片中心出發半徑上一英寸的段內可以有的磁道數
  • 面密度(位/平方英寸):記錄密度與磁道密度的乘積。

    ==下面給出一個容量計算公式==

  • 技術分享圖片

==關於磁盤的補充講解==
  • 總的來說,磁盤結構包括:盤片、磁頭、盤片主軸、控制電機、磁頭控制器、數據轉換器、接口、緩存等。一般一個磁盤就一個主軸。 一般每個扇區的大小為512B
  • 技術分享圖片

==局部性==

  • 一個編寫良好的計算機程序常常具有良好的局部性(locality)。也就是說,它們傾向於引用 鄰近於其他最近引用過的數據項的數據項,或者最近引用過的數據項本身。這種傾向性,被稱為 局部性原理(principle of locality),是一個持久的概念,對硬件和軟件系統的設計和性能都有著 極大的影響。
  • 局部性通常有兩種不同的形式:時間局部性(temporal locality)和空間局部性(spatial locality)。在一個具有良好時間局部性的程序中,被引用過一次的存儲器位置很可能在不遠的將來再被多次引用。在一個具有良好空間局部性的程序中,如果一個存儲器位置被引用了一次,那 麽程序很可能在不遠的將來引用附近的一個存儲器位置。

==時間局部性(temporal locality)==

  • 被引用過一次的存儲器很可能在不遠的將來再被多次引用。

==空間局部性(spatial locality)==
一個存儲位置被引用了一次,在不遠的將來,很可能引用附近的位置。
現代計算機系統各個層次都利用了局部性。

  • 硬件層,局部性原理允許計算機設計者引入高速緩存存儲器。
  • 保存最近被引用的指令和數據項,從而提高對主存的訪問速度。
  • 操作系統級
  • 局部性原理允許使用主存作為虛擬地址空間最近被引用塊的高速緩存。
  • 利用主存緩存磁盤文件系統最近使用的磁盤塊。

==應用程序設計==

  • Web瀏覽器將最近被引用的文檔放到本地磁盤上,利用的就是時間局部性。
局部性小結: 量化評價一個程序中局部性的簡單原則:
  • 重復引用同一個變量的程序有良好的時間局部性。
  • 對於具有步長為t的引用模式的程序,步長越小,空間局部性越好。具有步長為1的引 用模式的程序有很好的空間局部性。在存儲器中以大步長跳來跳去的程序空間局部性會很差。
  • 對於取指令來說,循環有好的時間和空間局部性。循環體越小,循環叠代次數越多,局部性越好。

==對程序數據引用的局部性==

  • 技術分享圖片

  • 考慮這個簡單函數的局部性。
  • sum具有良好的時間局部性
  • 在一段時間內被多次訪問。
  • v數組 具有良好的空間局部性。
  • 一段時間內臨近的元素被多次訪問
  • 所以該程序具有良好的局部性。
  • 像sumvec這樣順序訪問一個向量中每個元素的函數,稱為具有步長為1的引用模式(stride-1 reference pattern)。
  • 有時稱步長為1的引用模式叫做順序引用模式。
  • 每隔k個訪問,叫做步長為k的引用模式。
  • 步長為1的引用模式是空間局部性常見和最重要的來源。
  • 步長越大,空間局部性越低。
  • 對於二維數組,兩種不同的循環方式,空間局部性的差異十分大。
  • 行優先順序,是最好的。

    ==取指令的局部性==

  • 因為程序指令被放在存儲器中,CPU需要讀出這些指令,所以也能取指令的局部性。
  • 順序執行:良好的空間局部性。
  • for: 良好的時間局部性。
  • 代碼區別於數據的地方,執行後,不會被修改。

==小結==

  • 在我們學習了高速緩存存儲器以及它們是如何工作的之後,我們會介紹如何用高速緩存命中率和不命中率來量化局部性的概念。

==++存儲器層次結構++==

==存儲層次結構中的緩存==

  • 一般而言,高速緩存(cache,讀作"cash")是一個小而快速的存儲設備,它作為存儲在更大,也更慢的設備中的數據對象的緩沖區域。使用高速緩存的過程稱為緩存(caching,讀作"cashing")。
  • 存儲器層次結構的中心思想是:層次結構中的每一層都是來自較低一層的緩存。
  • 技術分享圖片

  • 第k+1層被分為連續的數據對象片(chunk),稱為塊(block)。
  • 數據總是以塊作為傳送單元,在存儲層間。
  • 傳輸一個字節,和傳輸一個塊的時間上差不多
  • 塊使空間局部性得到發揮
  • 限制性的放置策略中可能出現容量不命中

==緩存管理==

  • 管理緩存可以是硬件,也可以是軟件,可以是兩者的結合。
  • 寄存器文件:編譯器管理.
  • L1,L2,L3:內置在緩存中的硬件邏輯管理。
  • DRAM,內存 由地址翻譯硬件和操作系統共同管理。
  • 本地磁盤: 由軟件管理。

    ==存儲器層次結構概念小結==

  1. 基於緩存的結構行之有效。
  2. 較慢的存儲器比塊的存儲器便宜。
  3. 能很好利用局部性。
  4. 利用時間局部性:由於時間局部性,同一數據對象可能被多次使用,一旦一個數據對象在第一次不命中時被拷貝到緩存中,我們就會期望後面對該目標有一些的緩存命中。
  5. 利用空間局部性:塊通常包含多個數據對象,由於空間局部性,我們希望對該塊中其他對象節約的訪問時間補償不命中時的拷貝時間。

    ==高速緩存存儲器==

==通用的高速緩存存儲器結構==
  1. S個高速緩存組。
  2. 每個組有E個高速緩存行
  3. 每行是由一個B=2^b字節的數據塊組成的,一個有效位,還有t=m-(b+s)個標記位。
  4. m:地址長度
  5. 高速緩存的結構可以用元組(S,E,B,m)描述。
  6. 高速緩存的大小C指所有塊大小的和。標記位和有效位不包括在內。
  7. C=SEB;
  • 技術分享圖片

==直接映射高速緩存==

根據E高速緩存分為不同的類
  1. E=1時叫直接映射高速緩存
  2. E>1時叫組相連高速緩存
  3. S=1時叫全相連高速緩存
抽取請求字的過程,分為三步:
  1. 組選擇
  2. 行匹配
  3. 字抽取
不命中時
直接映射高速緩存中的沖突不命中
  • 技術分享圖片
如果 x[i]與y[i]恰好在同一個高速緩存組。
會不停的沖突不命中。
在x和y塊之間不停的抖動。 
抖動描述的就是,高速緩存反復加載和驅逐相同的高速緩存塊。

==避免方法==

  • 改變x數組大小。
  • 組相連高速緩存

    ==為什麽用中間的位來做索引==
  • 如果用高位作索引,那麽組內的數據在物理地址也是相鄰的。不能充分利用空間的局部性。

==組相連高速緩存==
  • 一個1<E<C/B的高速緩存通常稱為E路組相連高速緩存。
  • 組相連高速緩存中的組選擇
  • 與之前的一樣,通過組索引位。
  • 組相連高速緩存中的 行匹配 和 字選`
==有效位和標記位==
  • 組相連高速緩存中不命中時的行替換
  • 隨機
  • 最不常用(Least-Frequently-Used,LFU)
  • 頻數最低
  • 最近最少使用(Least-Recently-Used,LRU)
  • 時間最久遠

==全相連高速緩存==

一個全相聯高速換粗(full associative cache)是由一個包含所有高速緩存行的組(即E=C/B)組成的。

==全相連的組選擇==

只有一個組

==全相連的 行匹配 和 子選擇==

  • 和組相連一樣,但是規模更大。
  • 所以只適用於做小的高速緩存
  • 如TLB,緩存頁表項

==有關寫的問題==

==處理寫命中==

直寫:立即將w的高速緩存塊寫會到緊接著的下一層。

  • [ ] 優點:簡單
  • [ ] 缺點:引起總線流量,速度慢

寫回:盡可能地推遲操作,只有當替換算法要驅逐時更新。

  • [ ] 優點:減少總線流量。
  • [ ] 缺電:復雜,額外維護一個修改位。

    ==處理寫不命中==
  • 寫分配:加載相應的低一層塊到高速緩存中,然後更新這個高速緩存塊。

  • [ ] 跟寫回搭配。
  • [ ] 寫不分配:直接寫到低層。
  • [ ] 跟直寫搭配

    ==++一個真實的高速緩存層次結構的解剖++==

  1. 高速緩存,指令,數據
  2. 只保存指令的高速緩存叫做i-cache
  3. 只保存程序數據的高速緩存叫做d-cache
  4. 兩者都保存的高速緩存叫做unified cache

==高速緩存參數的性能影響==

  • 不命中率(miss rate) :不命中數量/引用數量。
  • 命中率(hit rate) : 1-不命中率 。
  • 命中時間(hit time): 從高速緩存傳送一個字到CPU的時間。
  • 不命中處罰(miss penalty):由於不命中的額外時間。
  • 優化高速緩存的成本和性能的折中是一項很精細的工作

==高速緩存大小的影響==

  1. 提高命中率
  2. 增加命中時間
  3. 塊大小的影響
  4. 更好利用空間局部性,提高命中率
  5. 影響時間局部性
  6. 不命中處罰越長
  7. 現代系統一般在32~64字節中。

    ==相連度影響==

  8. 降低了高速緩存中的抖動的可能性
  9. 好的替換策略能大大增強效率(提高命中率)。
  10. 價格更昂貴,命中時間更長,不命中處罰更多。
  11. 所以是處罰時間((1-命中率)*不命中處罰)和命中時間的折中。
  12. 不命中處罰越高用這個。讓處罰時間更少
  13. 命中率提高
  14. 不命中處罰增長忽略不計。

    ==寫策略影響==

  15. 層次越往下,越用寫回。
  • 技術分享圖片

++==綜合==++:==高速緩存對程序性能的影響==

==存儲器山==

  • 技術分享圖片
  • 一個程序從存儲系統中讀數據的速率稱為讀吞吐量(read throughput),或者有時稱為讀帶寬(rand bandwidth)。
  • 通過讀吞吐量來分析存儲器性能。
  • 存儲器山是一種綜合研究存儲器層次結構的工具。它反映了存儲器層次結構中不同層次的帶寬。也反映了具有不同的時間局部性與空間局部性的程序的性能。通過分析存儲器山的數據,還可以看出存儲器系統的部分硬件參數。

==重新排列循環以提高空間局部性==

技術分享圖片

  • 考慮n*n的矩陣乘法問題。
  • C[i][j]+=A[i][k]*B[k][j]
  • i,j,k三層循環的順序無所謂,都能得到正確的結果。
  • 但是時間差異卻十分大。
代碼如下:
  • 技術分享圖片

  • 顯然能看出kij版本和ikj版本都十分優秀
  • tisp:r=A[i][k] 在i,k循環或k,i循環下,其實差不了多少,因為n次循環才調用一次。
  • 也因此上圖左右相鄰的兩個版本的復雜度都會差不多。

  • 網絡旁註;使用分塊來提高空間局部性
  • 就是類似將數據結構盡量設計成塊。能提高效率,但會使得代碼更難懂。它更適合優化編譯器或者頻繁執行的庫函數。

==在程序中利用局部性==

  • 精力註重內循環
  • 步長為1,
  • 一旦讀入一個對象,就盡可能多使用它。

    ==小結==

  • 基本存儲技術包括RAM,ROM和磁盤。

==RAM有兩個類型==

  1. SRAM
  2. DRAM

    SDRAM
    DDR

    程序通過編寫良好的局部性代碼利用好緩存。

代碼托管

  • 技術分享圖片
  • 技術分享圖片

課後習題及其解答:

有關高速緩存的說法正確的是()

A. 高速緩存的容量可以用C=SEB來計算

B. 高速緩存容量為2048,高速緩存結構為( 32 ,8,8,32)

C. 直接映射高速緩存要:組選擇、行匹配、字抽取

D. 當程序訪問大小為2的冪的數組時,直接映射高帶緩存中常發生沖突不命中

  • 錯選:a,b【答案】A C D

The following table gives the parameters for a number of di erent caches. For each cache, determine the number of cache sets (S), tag bits (t), set index bits (s), and block o set bits (b)

A. 第三行S為1

B. 第一行t為24

C. 第二行b為5

D. 第三行s的值為0

  • 錯選:a,b 【答案】A C D

  • 【解析】p427

下面說法正確的是()

A. CPU通過內存映射I/O向I/O設備發命令

B. DMA傳送不需要CPU的幹涉

C. SSD是一種基於閃存或Flash的存儲技術

D. 邏輯磁盤塊的邏輯塊號可以翻譯成一個(盤面,磁道,扇區 )三元組。

  • 錯選:a,b 【答案】A B C D

  • 【解析】p413 411

有關磁盤操作,說法正確的是()

A. 對磁盤扇區的訪問時間包括三個部分中,傳送時間最小。

B. 磁盤以字節為單位讀寫數據

C. 磁盤以扇區為單位讀寫數據

D. 讀寫頭總處於同一柱面

  • 錯選:a,b,c 【答案】A C

  • 【解析】p409

結對

  • 結對學習搭檔講解你的總結並獲取反饋
    • 我結對的搭檔:呂宇軒 20155239
      他的問題很簡單,是匯編的問題 :

      問題1:匯編後的文件嘈雜難懂?

      問題1解決方案:
  • gcc -S 產生的匯編中可以把 以”.“開始的語句都刪除了再閱讀
  • RET指令是子程序的最後一條指令,即恢復斷點,返回主程序。 沒有要求RET指令非要和哪一條指令要配對使用。
      RET是子程序返回指令,放在子程序的結尾,當子程序執行完後,靠該指令返回主程序。就是return, 返回. 用於子程序的返回
  • 技術分享圖片
  • 技術分享圖片

    問題2:cmp與sub有什麽區別?
  • 問題2解決方案:查看課本練習上學期學習的匯編cmp與sub類似,都是從目的操作數減去源操作數,但sub會將運算結果送至目的操作數,而cmp不會送至目的操作數,cmp用於檢測標識符

其他(感悟、思考等,可選)

學習了存儲器層次結構讓我知道了原來硬盤是那麽脆弱,結構如此復雜,怪不得電腦要輕拿輕放,cpu通過I/O總線訪問主存和硬盤使我對系統內部程序和硬件之間的交互學習理解又加深了一步。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第13周 270/200 3/2 33/20

嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進自己的計劃能力。這個工作學習中很重要,也很有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。

參考:軟件工程軟件的估計為什麽這麽難,軟件工程 估計方法

  • 計劃學習時間:33小時
    • 實際學習時間:20小時
  • 改進情況:

(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表)

參考資料

  • 《深入理解計算機系統V3》學習指導
  • ...

2017-2018-1 20155202 《信息安全系統設計基礎》第13周學習總結