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

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

enter 拷貝 當前 緩存 大小 緩沖 嘗試 找到 個數

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

教材內容總結

1.了解常見的存儲技術(RAM、ROM、磁盤、固態硬盤等)

  • ram,掉電數據全部丟失,內存,顯存都是ram;
  • rom,掉電不易失,bios就是一種rom,這裏註意,目前閃存也是掉電不易失,但本質屬於nandflash,rom細分還有很多種,有些rom只能一次性寫入,有些可以反復擦寫;
  • 內存,本質是ram,馮諾依曼結構上面的定義,cpu直接訪問的是內存;
  • 硬盤,hdd,ssd都是硬盤,屬於外存,上面的東西需要先讀入內存才可以被計算機訪問;

2.理解局部性原理

  • 局部性通常有兩種不同的形式:時間局部性和空間局部性。在一個具有良好時間局部性的程序中,被引用一次的存儲器位置很有可能在接下來時間內再被多次引用。在已給具有良好空間局部性的程序中,若一個存儲器位置被引用了一次,那麽在接下來時間內將引用附近的一個存儲器位置。

    int sum1(int array[])
    {
        int i, sum = 0;
        int length = sizeof(v);
        for(i = 0; i < length; i++)
            sum += array[i];
        return sum;
    }
  • 該函數中,變量sum在每次循環叠代時被引用一次,因此對sum來說,有好的時間局部性。對變量v來說,它是一個int類型數組,循環時按順序訪問v[i],因而有很好的空間局部性,但時間局部性不好,因為每個元素只被訪問了一次。這就有點像一個程序的時間復雜度和空間復雜度一樣,二者是不可兼得的,所以只要滿足時間和空間局部性二者之一,就可以說符合程序的局部性原則。

3.理解緩存

  • 緩存是什麽?
    用於加速數據交換,達到用時即取的作用。緩存也是優化的一種方式。
  • 理解:
    一般我們在進行訪問請求網站流程:用戶通過客戶端(瀏覽器)發送請求到服務器端,服務器端連接到數據庫讀取數據,最後服務器把數據信息返送到客戶端。
    加入緩存的理解是:

技術分享圖片

    (1)服務器從數據庫讀取數據時,可以把數據存入內存中,下次用到同樣數據,不需要再次連接數據庫,直接從內存中讀取。
    (2)數據庫(mysql)緩存:我們在做sql查詢的時候,可以使用mysql自帶的緩存機制,把更改不頻繁的查詢數據緩存起來,下次查詢直接在緩存內讀取,大大的節約了查詢時間。
    (3)客戶端和服務器端之間用上反向代理服務器,客戶端發送請求,代理服務器會代替客戶端請求服務器,之後把訪問到的時結果緩存到本服務器,下次客戶端直接在反向代理服務器中把結果得到,極大的加快了訪問速度。
    (4)客戶(瀏覽器)端的緩存:用戶訪問網站靜態頁面,可以把靜態頁面緩存到本地文件,下次訪問直接從文件內讀取,不需要走php解析的過程。

4.存儲器層次結構

技術分享圖片

  • 緩存

高速緩存:是一個小而快速的存儲設備,它作為存儲在更大、更慢的設備中的數據對象的緩沖區域。
緩存:使用高速緩存的過程稱為緩存。
數據總是以塊大小為傳送單元在第k層與第k+1層之間來回拷貝。任一對相鄰的層次之間塊大小是固定的,但是其他的層次對之間可以有不同的塊大小。
特點:層越低,塊越大。
1)緩存命中

    當程序需要第k+1層的某個數據對象d時,首先在當前存儲在第k層的一個塊中查找d,如果d剛好緩存在第k層中,就稱為緩存命中。
    該程序直接從第k層讀取d,比從第k+1層中讀取d更快。

2)緩存不命中

    即第k層中沒有緩存數據對象d。
    這時第k層緩存會從第k+1層緩存中取出包含d的那個塊。如果第k層緩存已滿,就可能會覆蓋現存的一個塊

3)緩存不命中的種類
a.強制性不命中/冷不命中

    即第k層的緩存是空的(稱為冷緩存),對任何數據對象的訪問都不會命中。

b.沖突不命中

    由於一個放置策略:將第k+1層的某個塊限制放置在第k層塊的一個小的子集中,這就會導致緩存沒有滿,但是那個對應的塊滿了,就會不命中。

c.容量不命中

    當工作集的大小超過緩存的大小時,緩存會經歷容量不命中,就是說緩存太小了,不能處理這個工作集。

4)緩存管理

    某種形式的邏輯必須管理緩存,而管理緩存的邏輯可以是硬件、軟件,或者兩者的集合。
  • 存儲器層次結構概念小結

技術分享圖片

5.高速緩存存儲器

①L1高速緩存:位於CPU寄存器文件和主存之間,訪問速度2-4個時鐘周期
②L2高速緩存:位於L1高速緩存和主存之間,訪問速度10個時鐘周期
③L3高速緩存:位於L2高速緩存和主存之間,訪問速度30或40個時鐘周期

  • 通用的高速緩存存儲器結構
    高速緩存是一個高速緩存組的數組,它的結構可以用元組(S,E,B,m)來描述:

    S:這個數組中有S=2^s個高速緩存組
    E:每個組包含E個高速緩存行
    B:每個行是由一個B=2^b字節的數據塊組成的
    m:每個存儲器地址有m位,形成M=2^m個不同的地址

    除此之外還有標記位和有效位:

    有效位:每個行有一個有效位,指明這個行是否包含有意義的信息
    標記位:t=m-(b+s)個,唯一的標識存儲在這個高速緩存行中的塊
    組索引位:s
    塊偏移位:b

    高速緩存的結構將m個地址劃分成了t個標記位,s個組索引位和b個塊偏移位。
    1)高速緩存的大小/容量C:指所有塊的大小的和,不包括標記位和有效位,所以:

    C=S*E*B

    2)工作過程
    S,B將m個地址位分為了三個字段:

    先通過s個組索引位找到這個字必須存儲在哪個組中
    然後t個標記位告訴我們這個組中的哪一行包含這個字(當且僅當設置了有效位並且該行的標記位與地址中的標記位相匹配時)
    b個塊偏移位給出來在B個字節的數據塊中的字偏移
  • 直接映射高速緩存
    根據E(每個組的高速緩存行數)劃分高速緩存為不同的類,E=1的稱為直接映射高速緩存。
    高速緩存確定一個請求是否命中,然後取出被請求的字的過程,分為三步:

    1.組選擇
    2.行匹配
    3.字抽取

    1)組選擇

    高速緩存從w的地址中間抽取出s個組索引位
    組索引位:一個對應於一個組號的無符號整數。
    類比:高速緩存-關於組的一位數組,組索引位就是到這個數組的索引。

    2)行匹配

    判斷緩存命中的兩個充分必要條件:
    該行設置了有效位
    高速緩存行中的標記和w的地址中的標記相匹配

    3)字選擇

    塊-關於字節的數組,字節偏移是到這個數組的一個索引。

    4)緩存不命中時的行替換
    5)後運行中的直接映射高速緩存

    標記位和索引位連起來唯一的標識了存儲器中的每個塊
    映射到同一個高速緩存組的塊由標記位唯一地標識

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

  • 問題1:

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

  • 問題1:

代碼托管

上周考試錯題總結

結對及互評

點評模板:

  • 博客中值得學習的或問題:
    • 學習態度認真
  • 代碼中值得學習的或問題:
    • 編寫代碼嚴謹
  • 其他

本周結對學習情況

- [20155311](博客鏈接)
- 結對照片
- 結對學習內容
    -存儲器技術,緩存,局部性
    
   

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一周 10/ 10 1/1 10/10
第三周 158/ 168 1/2 17/27
第五周 145/ 313 3/ 5 21/48
第六周 209/ 522 1/ 6 20/68
第七周 200/ 722 2/ 8 20/88
第九周 55/ 777 2/ 10 19/107

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

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

  • 計劃學習時間:20小時

  • 實際學習時間:19小時

  • 改進情況:開始進入學習狀態,但因為別的課程作業也很多,所以安排不夠好,可能學習不夠認真

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

參考資料

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