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

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

教材學習內容總結

1.存儲技術

三種常見存儲技術:RAM/ROM/磁盤

(1)隨機訪問存儲器RAM

  • 兩類:靜態RAM(SRAM)和動態RAM(DRAM)html

  • 靜態RAM(SRAM)比動態RAM(DRAM)更快,但也貴不少。git

  • 靜態RAM
    • SRAM將每一個位存儲在一個雙穩態的存儲器單元裏,每一個單元是用一個六晶體管電路來實現的。
    • 這個電路的一個屬性:它能夠無限制地保持在兩個不一樣的電壓配置或狀態之一。其餘任何狀態都是不穩定的。算法

      - 特色:因爲SRAM的雙穩態特性,只要有電,它就會永遠地保持它的值,即便有干擾,如電子噪音,來擾亂電壓,當干擾消除,電路也能恢復到穩定值。
        - 應用:SRAM用來做爲高速緩存存儲器,便可以在CPU芯片上,也能夠在片下。
  • 動態DRAM
    • DRAM將每一個位存儲爲對電容的充電。電容約爲30×10-15F。編程

      - 特色:對干擾特別敏感,當電容的電壓被擾亂以後,它就永遠不會恢復了。暴露在光線下會致使電容電壓改變。
        - 應用:DRAM用來做爲主存以及圖形系統的幀緩衝區。

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

  • ROM的區分:能被重編程的次數和對他們進行重編程所用的機制。數組

    - PROM:只能被編程一次。
      - EPROM:可擦寫可編程ROM,紫外線光照清除單元內容,可擦寫次數數量級1000。
      - E2PROM:電子可擦除PROM,能夠直接在印製電路卡上編程,可擦寫次數數量級10^5。
      - FLASH:閃存,基於EEPROM。(固態硬盤SSD基於閃存)
  • 存儲在ROM設備中的程序一般稱爲固件。瀏覽器

(3)訪問主存

- 讀事務:從主存傳送數據到CPU。
- 寫事務:從CPU傳送數據到主存。
- 總線:一組並行的導線,能攜帶地址、數據的控制信號。
    數據總線、控制總線、地址總線
  • 讀事務語句緩存

    movl A,%eax

    - CPU將地址A放到存儲器總線
      - 主存從總線讀出A,接收字x,而後將x放到總線上
      - CPU從總線讀出字x,並將它copy到寄存器eax中。
  • 寫事務語句安全

    movl %eax,A

    - CPU將地址A放到存儲器總線,主存讀出這個地址,等待接收數據字
      - CPU將數據字y放到總路上
      - 主存從總線讀數據字y,並將它存儲在地址A。

(4)磁盤存儲

  • 磁盤構造
    • 盤片構成,每一個盤片有兩面或者稱爲表面,表面覆蓋着磁性記錄材料。盤片中央有一個能夠旋轉的主軸,使得盤片以固定的旋轉速率旋轉,一般是5400~15000轉每分鐘(RPM)
    • 每一個表面是由一組稱爲磁道的同心圓組成;每一個磁道被劃分紅一組扇區;每一個扇區包含相等數量的數據位(一般是512字節);這些數據編碼在扇區上的磁性材料中。扇區之間由一些間隙分隔開,這些間隙中不存在數據位。間隙存儲用來標識扇區的格式化位。

  • 磁盤容量網絡

    • 一個磁盤上能夠記錄的最大位數稱爲它的最大容量/容量。
    • 磁盤容量的決定因素:函數

      - 記錄密度:磁道一英寸的段能夠放入的位數。
        - 磁道密度:從盤片中心出發半徑上一英寸的段內能夠有的磁道數。
        - 面密度:記錄密度與磁道密度的乘積。
    • 磁盤容量

      • 即扇區大小×每條磁道平均扇區數×每一個面磁道的磁道數×每一個盤片的面數×每一個磁盤的盤數

      • 例子:

      • 對於與DRAM和SRAM容量相關的單位,一般

        K = 210,M = 220,G = 230
      • 對於磁盤和網絡這樣的I/O設備容量相關的單位,一般

        K = 103,M = 106,G = 109
  • 磁盤操做
    • 磁盤用讀寫頭來讀寫存儲在磁性表面的位,而讀寫頭鏈接到一個轉動臂一端。尋道就是經過沿着半徑軸先後移動這個轉動臂,使得驅動器能夠將讀寫頭定位在盤面上的任何磁道上。

    • 任什麼時候刻,全部的讀寫頭都位於同一柱面上。
    • 在傳動臂末端的讀/寫頭在磁盤表面高度約0.1微米處一層薄薄的氣墊上飛翔,速度大約爲80km/h。
    • 磁盤以扇區大小的塊來讀寫數據。
  • 對扇區的訪問時間有三個主要的部分:

    - 尋道時間:爲了讀取某個目標扇區的內容,傳動臂把讀/寫頭首先定位到包含目標扇區的磁道上,所需時間即爲尋道時間,約等於最大旋轉時間。
          - 尋道時間Tseek依賴於讀寫頭之前的位置和轉動臂在盤面上移動的速度。
      - 旋轉時間:定位到指望的磁道後,驅動器等待目標扇區的第一個位旋轉到讀/寫頭下。依賴於當讀寫頭到達目標扇區時盤面的位置和磁盤旋轉速度。
          - 定位到指望的磁道後,驅動器等待目標扇區的第一個位旋轉到讀/寫頭下。
          - 最大旋轉時間 = 1/最大旋轉數率
          - 平均旋轉時間 = (1/2) * 最大旋轉時間。
      - 傳送時間:當目標扇區的第一個位位於讀寫頭下時,驅動器就能夠開始讀或者寫該扇區的內容。依賴於旋轉速度和每條磁道的扇區數目。
          - 平均傳送時間 = (1/最大旋轉數率) * (1/每磁道的平均扇區數)

(5)邏輯磁盤塊

內存能夠當作字節數組、磁盤能夠當作塊數組
  • 現代磁盤構造複雜,有多個盤面,這些盤面上有不一樣的記憶區。爲了對操做系統隱藏這樣的複雜性,現代磁盤將他們的構造呈現爲一個簡單的試圖,一個B個扇區大小的邏輯塊的序列,編號爲0,1,...,B-1。
  • 磁盤中有一個小的硬件/固件設備,稱爲磁盤控制器,維護着邏輯塊號和實際(物理)扇區之間的映射關係。
  • 控制器上的固件執行一個快速表查找,將一個邏輯塊號翻譯一個(盤面、磁道、扇區)的三元組,這個三原則惟一地表示了對應的物理扇區。控制器上的硬件解釋這個三元組,將讀寫頭移動到適當的煮麪,等待扇區移動到讀寫頭下,將讀寫頭感知到的位放在控制器上的一個小緩衝區中,而後將他們拷貝到主存中。

(6)鏈接到I/O設備

  • 想圖形卡、監視器、鼠標、鍵盤和磁盤這樣的輸入輸出設備,都是經過I/O總線鏈接到CPU和主存的。
  • 系統總線和存儲器總線是與CPU相關的,I/O總線設計成與底層CPU無關。
  • I/O總線比系統總線比存儲器總線慢,可是它能夠容納種類繁多的第三方I/O設備。

    - 通用串行總線USB:2.0最大帶寬60MB/S,3.0最大帶寬600MB/S
      - 圖形卡(適配器)
      - 主機總線適配器

(7)訪問磁盤

  • CPU使用一種存儲器映射I/O技術來向I/O設備發出命令,在使用存儲器映射I/O的系統中,地址空間中有一塊地址是爲與I/O設備通訊保留的,稱爲I/O端口。當一個設備鏈接到總線時,它與一個或多個端口相連。
  • 直接存儲器訪問:設備能夠本身執行讀或者寫總線事務,而不須要CPU干涉的過程。這種數據傳送稱爲DMA傳送。
  • 例:

(8)固體磁盤

  • 固態硬盤是一種基於閃存的存儲技術。
  • 一個SSD包由一個或多個閃存芯片和閃存翻譯層組成,閃存芯片替代傳統旋轉磁盤中機械驅動器;閃存翻譯層(一個硬件/固件設備)替代磁盤控制器,將對邏輯塊的請求翻譯成對底層物理設備的訪問。
  • 性能特性

    - 順序讀和寫(CPU按順序訪問邏輯磁盤塊)性能至關,順序讀比順序寫稍快一點。
      - 隨機順序訪問邏輯塊時,寫比讀慢一個數量級。
    
      *讀寫性能差異是由底層閃存基本屬性決定的。
  • 優缺點

    優勢:
      - 由半導體構成,沒有移動的部件
      - 隨機訪問時間比旋轉磁盤要快、能耗低、結實
      缺點
      - 易磨損、更貴

    #### (9)存儲技術趨勢

  • 不一樣的存儲技術有不一樣的價格和性能折中
  • 不一樣存儲技術的價格和性能屬性以大相徑庭的速率變化着(增長密度從而下降成本比下降訪問時間更容易)
  • DRAM和磁盤的性能滯後於CPU的性能

2. 局部性

(1)局部性原理

  • 一個編寫良好的計算機程序經常具備良好的局部性,即傾向於引用臨近於其餘最近引用過的數據項的數據項,或者最近引用過的數據項自己。
  • 兩種不一樣形式

    空間局部性
      時間局部性
  • 有良好局部性的程序比局部性差的程序運行得更快

    - 硬件層:局部性原理容許計算機設計者經過引入高速緩存存儲器來保存最近被引用的指令和數據項,從而提升對主存的訪問速度。
      - 操做系統級:局部性原理容許系統使用主存做爲虛擬地址空間最近被引用塊的高速緩存,用主存來緩存磁盤文件系統中最近被使用的磁盤塊。
      - 應用程序中:例如,Web瀏覽器將最近被引用的文檔放在本地磁盤上。

(2)對程序數據引用的局部性

  • 步長爲k的引用模式
    • 定義:一個連續變量中,每隔k個元素進行訪問。
    • 步長爲1的引用模式:就是順序訪問一個向量的每一個元素,有時也被稱爲順序引用模式,它是程序中空間局部性常見和重要的來源。

      通常來講,隨着步長增長,空間局部性降低。
  • 多維數組程序

    • C語言中數組在存儲器中是按照行順序存放的,因此按照行優先順序執行的代碼的局部性要好於按列優先順序的代碼。

(3)取指令的局部性

  • 程序指令是存放在存儲器中的,CPU必須取出(讀出)這些指令。
  • 代碼區別於程序數據的一個重要屬性是在運行時它是不能被修改的。當程序正在執行時,CPU只從存儲器中讀出它的指令,CPU毫不會重寫或修改這些指令。

(4)量化評價一個程序中局部性的簡單原則:

重複引用同一個變量的程序有良好的時間局部性
對於具備步長爲k的引用模式的程序,步長越小,空間局部性越好
對於取指令來講,循環有好的時間和空間局部性。循環體越小,循環迭代次數越多,局部性越好。

3. 存儲器層次結構

(1)存儲技術和計算機軟件

- 存儲技術:不一樣的存儲技術的訪問時間差別很大,速度較快的技術每字節的成本要比速度較慢的技術高,並且容量較小,CPU和主存之間的速度差距在增大。
- 計算機軟件:一個編寫良好的程序傾向於展現出良好的局部性。
  • 通常而言,高層往底層走,存儲設備變的更慢、更便宜、更大。
  • 每一層存儲設備都是下一層的緩存。

(2)緩存

  • 高速緩存與緩存:高速緩存cash是一個小而快速的存儲設備,它做爲存儲在更大、更慢的設備中的數據對象的緩衝區域。使用高速緩存的過程稱爲緩存。

    存儲器層次結構的中心思想:對於每一個k,位於k層的更快更小的存儲設備做爲位於k+1層的更大更慢的存儲設備的緩存。
      - 即每層存儲設備都是下一層的「緩存」
  • 數據老是以塊大小爲傳送單元在第k層與第k+1層之間來回拷貝。任一對相鄰的層次之間塊大小是固定的,可是其餘的層次對之間能夠有不一樣的塊大小。

  • 緩存命中
    • 當程序須要第k+1層的某個數據對象d時,首先在當前存儲在第k層的一個塊中查找d,若是d恰好緩存在第k層中,就稱爲緩存命中。
    • 該程序直接從第k層讀取d,比從第k+1層中讀取d更快。
  • 緩存不命中
    • 即第k層中沒有緩存數據對象d。
    • 這時第k層緩存會從第k+1層緩存中取出包含d的那個塊。若是第k層緩存已滿,就可能會覆蓋現存的一個塊.

      - 覆蓋一個現存的塊的過程稱爲替換/驅逐這個塊。
        - 被驅逐的塊有時也稱爲犧牲塊。
    • 替換策略:決定替換哪一個塊

      - 隨機替換策略:隨機選擇一個犧牲塊
        - 最近最少被使用替換策略(LRU):選擇最後被訪問的時間距如今最遠的塊
  • 緩存不命中的種類
    • 強制性不命中/冷不命中:即第k層的緩存是空的(稱爲冷緩存),對任何數據對象的訪問都不會命中。一般是短暫事件,不會在反覆訪問存儲器使得緩存暖身以後的穩定狀態中出現。
    • 衝突不命中:因爲一個放置策略:將第k+1層的某個塊限制放置在第k層塊的一個小的子集中,這就會致使緩存沒有滿,可是那個對應的塊滿了,就會不命中。
    • 容量不命中:當工做集的大小超過緩存的大小時,緩存會經歷容量不命中,就是說緩存過小了,不能處理這個工做集。

(3)緩存管理

  • 某種形式的邏輯必須管理緩存,而管理緩存的邏輯能夠是硬件、軟件,或者二者的集合。

(4)概念小結

  • 利用時間局部性
    • 統一對象可能會被屢次使用。一旦一個數據對象在第一次不命中時被拷貝到緩存中,咱們就會指望後面對該目標有一系列的訪問命中。由於緩存比第一層的存儲設備更快,對後面的命中的服務會比最開始的不命中快不少。
  • 利用空間局部性
    • 塊一般包含有多個數據對象。因爲空間局部性,咱們會指望後面對該塊中的其餘對象的訪問可以補償不命中後拷貝該塊的花費。

4. 高速緩存存儲器

(1)簡介

  • 早期的計算機系統的存儲器層次結構:CPU寄存器、DRAM主存儲器和磁盤存儲
  • CPU與主存之間插入

    - L1高速緩存:位於CPU寄存器文件和主存之間,訪問速度2-4個時鐘週期
      - L2高速緩存:位於L1高速緩存和主存之間,訪問速度10個時鐘週期
      - L3高速緩存:位於L2高速緩存和主存之間,訪問速度30或40個時鐘週期
  • 高速緩存存儲器的典型總線結構

(2)通用的高速緩存存儲器結構

  • 高速緩存是一個高速緩存組的數組,高速緩存的結構將m個地址劃分紅了t個標記位,s個組索引位和b個塊偏移位。
  • 它的結構能夠用元組(S,E,B,m)來描述:

m:每一個存儲器地址有m位,造成M=2^m個不一樣的地址
    S:這個數組中有S=2^s個高速緩存組
    E:每一個組包含E個高速緩存行
    B:每一個行是由一個B=2^b字節的數據塊組成的
    
    - 標記位:t=m-(b+s)個,惟一的標識存儲在這個高速緩存行中的塊
    - 有效位:每一個行有一個有效位,指明這個行是否包含有意義的信息
        
    - 高速緩存的大小/容量C:C=S*E*B
        指全部塊的大小的和,不包括標記位和有效位。
  • 參數小結

(3)直接映射高速緩存

  • 根據E(每一個組的高速緩存行數)劃分高速緩存爲不一樣的類,E=1的稱爲直接映射高速緩存。
  • 高速緩存肯定一個請求是否命中,而後取出被請求的字的過程,分爲三步:

    - 組選擇
      - 行匹配
      - 字抽取
  • 組選擇
    • 高速緩存從w的地址中間抽取出s個組索引位
    • 組索引位:一個對應於一個組號的無符號整數。
  • 行匹配
    • 判斷緩存命中的兩個充分必要條件:

      - 該行設置了有效位
        - 高速緩存行中的標記和w的地址中的標記相匹配
  • 字選擇
    • 肯定所須要的字在塊中是從哪裏開始的。
  • 緩存不命中時的行替換
    • 用新取出的行替換當前的行。
  • 後運行中的直接映射高速緩存
    • 標記位和索引位連起來惟一的標識了存儲器中的每一個塊。
    • 由於有8個存儲塊,4個高速緩存組,多個塊映射到同一個高速緩存組(由於他們有相同的組索引)。
    • 映射到同一個高速緩存組的塊由標記位惟一地標識。
  • CPU執行一系列讀的步驟:

    - 用索引位,肯定針對的是哪一個組
      - 而後看對應的組是否有效:
          - 若是無效則緩存不命中,高速緩存從存儲器或低一層中取出要找的塊,存儲在對應的組中,再把有效位置1,返回須要的值
          - 若是有效,再根據標記找是否有匹配的標記:若是有,則緩存命中,返回須要的值;若是沒有,則替換行,返回。
  • 直接映射高速緩存中的衝突不命中

    • 緣由:在塊之間抖動,即這些塊被映射到了同一個高速緩存組。

      抖動:高速緩存反覆的加載和驅逐相同的高速緩存塊的組
    • 解決方法:在每一個數組的結尾放B字節的填充(B字節是一個塊的長度,一行是一個塊,至關於分開了行)從而使得他們映射到不一樣的組。

(4)組相聯高速緩存

  • 組選擇
    • 與直接映射高速緩存中的組選擇同樣,組索引位標識組。
  • 行匹配和字選擇
    • 把每一個組看作一個小的相關聯存儲器,是一個(key,value)對的數組,以key爲輸入,返回對應數組中的value值。高速緩存必須搜索組中的每一行,尋找有效的行其標記與地址中的相匹配。
    • 形式是(key, value),用key做爲標記和有效位去匹配,匹配上了以後返回value。
    • 組中的任意一行均可以包含任何映射到這個組的存儲器塊,因此告訴緩存必須搜索組中的每一行。

    • 組相連高速緩存中不命中時的行替換:

      • 隨機替換
      • 最不常使用策略LFU:替換在過去某個時間窗口內引用次數最少的那一行。
      • 最近最少使用策略LRU:替換最後一次訪問時間最久遠的那一行。

(5)全相連高速緩存

  • 組選擇
    • 只有一個組,沒有組索引位。
  • 行匹配和字選擇
    • 與組相連高速緩存是同樣的,但規模大不少,所以只適合作小的高速緩存,例如虛擬存儲系統中的翻譯備用緩衝器。

(6)寫

  • 寫命中時,更新低一層中的拷貝的方法

    - 直寫:當即將w的高速緩存塊協會到緊接着的低一層中
              - 缺點:每次寫都會引發總線流量。
      - 寫回:只有當替換算法要驅逐更新過的塊時,才寫到緊接着的低一層中。
              - 優勢:符合局部性原理,顯著的減小總線流量
              - 缺點:增長了複雜性,必須爲每一個高速緩存行維護一個額外的修改位
  • 寫不命中的處理方法

    - 寫分配(對應寫回):加載相應的低一層中的塊到高速緩存中,而後更新這個高速緩存塊。
      - 非寫分配(對應直寫):避開高速緩存,直接把這個字寫在低一層中。

(7)高速緩存參數的性能影響

  • 性能

    - 不命中率 = 不命中數量/引用數量
      - 命中率 = 1 - 不命中率
      - 命中時間:從高速緩存傳送一個字到CPU所需的時間,包括組選擇,行匹配,字抽取的時間。
      - 不命中處罰:由於不命中所須要的額外的時間
  • 具體影響

    - 高速緩存大小:較大的高速緩存可能會提升命中率,但使大存儲器運行的更快是更難一些的。
      - 塊大小:較大的塊能利用程序中可能存在的空間局部性,幫助提升命中率;但塊越大意味着高速緩存行較少,損害時間局部性。
      - 相聯度:相聯度較大(E值較大)優勢是下降了高速緩存因爲衝突不命中出現抖動的可能性,但成本較高。
      - 寫策略:直寫高速緩存易實現,並且能使用獨立於高速緩存的寫緩衝區,用來更新存儲器,不命中開銷小。寫回高速緩存引發的傳送比較少,容許更多的到存儲器的寬帶用於執行DMA的I/O設備。越下層,越可能用寫回而不是直寫。

5. 編寫高速緩存友好的代碼

  • 確保代碼高速緩存友好的基本方法:

    - 讓最多見的狀況運行的快。
      - 在每一個循環內部緩存不命中數量最小。
  • 對局部變量的反覆引用是好的,由於編譯器可以將他們緩存在寄存器文件中(時間局部性)。
  • 步長爲1的引用模式是好的,由於存儲器層次結構中全部層次上的緩存都是將數據存儲爲連續的塊(空間局部性)。

6.高速緩存對程序性能的影響

存儲器山

(1)概念

  • 一個程序從存儲系統中讀數據的速率稱爲讀吞吐量,或者讀帶寬,一般以兆字節每秒(MB/s)爲單位。
  • 讀帶寬的時間和空間局部性的二維函數稱爲存儲器山。
  • 每臺計算機都有代表他存儲器系統的能力特點的惟一的存儲器山。就是把存儲器系統的性能用關於時間和空間局部性的山表示。

(2)分析

  • 存儲器山中時間局部性的山脊:從這座山中取出一個片斷,保持步長爲常數,咱們就能清楚地看到高速緩存的大小和時間局部性對性能的影響。
  • 一個空間局部性的斜坡:以相反的方向橫切這座山,保持工做集大小不變,咱們能從中看到空間局部性對讀吞吐量的影響。

教材學習中的問題和解決過程

代碼調試中的問題和解決過程

代碼託管

(statistics.sh腳本的運行結果截圖)

上週考試錯題總結

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 200/200 2/2 20/20
第二週 300/500 2/4 18/38
第三週 500/1000 3/7 22/60
第四周 300/1300 2/9 30/90

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

參考:軟件工程軟件的估計爲何這麼難軟件工程 估計方法

  • 計劃學習時間:10小時

  • 實際學習時間:7.5小時

相關文章
相關標籤/搜索