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

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

12個 不執行 賦值 2個 地址空間 兩種 操作符 log 訓練

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

教材學習內容總結

1. 虛擬存儲器的概念和作用:

為解決內存小而作業大、作業多的矛盾, 以及執行過程中只是把當前運行需要的那部分程序和數據裝入內存。 所以,操作系統把各級存儲器統一管理起來。就是說, 應該把一個程序當前正在使用的部分放在內存, 而其余部分放在磁盤上,就啟動執行它。操作系統根據程序執行時的要求和內存的實際使用情況, 隨機地對每個程序進行換入/換出。
這樣, 就給用戶提供一個比正式的內存空間大的多的地址空間, 這就是虛擬存儲器。所謂虛擬存儲器是用戶能作為可編址內存對待的存儲空間, 在這種計算機系統中虛地址被映射成實地址。簡單地說,虛擬存儲器:是由操作系統提供的一個假想的特大存儲器。就是說, 虛擬存儲器並不是實際的內存,它的大小比內存空間大的多; 用戶感覺所能使用的“內存”非常大, 但這是操作系統對物理內存的擴充。

2. 地址翻譯的概念

在既使用虛擬存儲器有使用SRAM高速緩存的系統中,都存在應該使用虛擬地址還是物理地址來訪問高速緩存的問題。在此,我們假設使用物理地址來模擬cpu發出讀指令到取到數據的過程:

cpu產生讀指令的虛擬地址—->MMU進行地址分析( 1 區分vpn(虛擬頁號)、vpo(虛擬頁內偏移);2 從vpn中找出TLBI、TLBT;3 在TLB存儲器中找出這條記錄,

命中:
取出PPN(物理頁號);
PPN+VPO =PA;
得到PA,去高速緩存中找數據
找到:將數據傳給cpu
未找到:去主存或磁盤中找;

未命中:
去DRAM中找;
找到同命中之後;
若未找到:觸發缺頁異常,程序選擇一個犧牲頁,將該頁寫回磁盤,從磁盤中拷貝所需頁,之後同命中之後。

3. 存儲器映射

存儲器是一系列存儲單元的集合,一般情況下存儲器主要有隨機存取存儲器RAM(Random Access Memory)和只讀存儲器ROM(Read Only Memory)兩種,隨機存取存儲器RAM就像黑板一樣,可以在裏面寫上東西, 也可以擦掉後再寫上新的內容,即既可以讀數據也可以寫數據。只讀存儲器ROM事先把規定好的內容存入存儲器,只能將規定內容讀出,不能改寫。無論是RAM還是ROM,為使CPU能準確找到存儲有某個信息的存儲單元,就必須為這些存儲單元分配一個能相互區別的標識,這些標識就是我們通常所說的地址編碼。實際情況下,計算機或其他處理器(如ARM,在ARM中內核采用馮。諾依曼結構,即數據和指令共用一個存儲器混合編址)在上電或復位之前,存儲器只是一些沒有地址編碼的物理存儲器,計算機或嵌入式系統在上電後要想很好的工作,就要求存儲器與計算機或處理器所擁有的地址編碼資源建立一一映射的關系。一般情況下,處理器設計者會為每一個存儲器分配一個數值連續,數目與其存儲單元數相等,以16進制表示的自然數的集合作為該存儲器的地址編碼,這種自然數集合與存儲器的對應關系就是存儲器映射,可以把存儲器映射理解為嵌入式系統上電(復位)時的預備動作。

4.動態存儲分配

動態存儲分配方式是不一次性將整個程序裝入到主存中。可根據執行的需要,部分地動態裝入。同時,在裝入主存的程序不執行時,系統可以收回該程序所占據的主存空間。再者,用戶程序裝入主存後的位置,在運行期間可根據系統需要而發生改變。此外,用戶程序在運行期間也可動態地申請存儲空間以滿足程序需求。由此可見,動態存儲分配方式在存儲空間的分配和釋放上,表現得十分靈活,現代的操作系統常采用這種存儲方式。

5. C語言中與存儲器有關的錯誤
  1. 間接引用壞指針
  2. 讀未初始化的存儲器
  3. 允許棧緩沖區溢出
  4. 假設指針和它們指向的對象是相同大小的
  5. 錯位(Off-by-one)錯誤
  6. 錯誤理解操作符的優先級和結合性
  7. 錯誤理解指針運算
  8. 引用不存在的變量
  9. 引用空閑堆裏的數據
  10. 引起存儲器泄露

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

  • 問題1:除了動態分配還有哪些分配方式:
  • 問題1解決方案:解決存儲分配問題有三種方式:直接存儲分配方式、靜態存儲分配方式、動態存儲分配方式。

直接存儲分配方式:
直接存儲分配方式要求存儲器的可用空間已經確定,且確保各程序所用的地址之間互不重疊。缺點是用戶感到不方便,存儲器的利用率也不高。

靜態存儲分配方式:
靜態存儲分配方式中。在程序被裝入、連接時,才確定它們在主存中的相應位置(物理地址)。系統必須分配其要求的全部存儲空間.否則不能裝入該用戶程序。程序將占據著分配給它的存儲空間直到程序結束。該存儲空間的位置固定不變,也不能動態地申請存儲空間。這種方式無法實現用戶對存儲空間的動態擴展,而且也不能有效地實現存儲器資源的共享。

  • 問題2:如何盡量避免內存相關的問題:
  • 問題2解決方案:
  1. 始終結合使用 memset 和 malloc,或始終使用 calloc。
  2. 每當向指針寫入值時,都要確保對可用字節數和所寫入的字節數進行交叉核對。
  3. 在對指針賦值前,要確保沒有內存位置會變為孤立的。
  4. 每當釋放結構化的元素(而該元素又包含指向動態分配的內存位置的指針)時,都應首先遍歷子內存位置並從那裏開始釋放,然後再遍歷回父節點。
  5. 始終正確處理返回動態分配的內存引用的函數返回值。
  6. 每個 malloc 都要有一個對應的 free。
    確保您不是在訪問空指針。
  • ...

代碼托管

技術分享圖片
(statistics.sh腳本的運行結果截圖)

上周考試錯題總結

  • 下面代碼中,對數組x填充後,采用直接映射高速緩存,所有對x和y引用的命中率為(D)
    技術分享圖片

A .
1
B .
1/4
C .
1/2
D .
3/4

解析:在x[0],y[0]時發生強制不命中,在x[4],y[4]時發生沖突不命中。1-4/16=3/4
  • 下面說法正確的是(ABC)
    技術分享圖片

A .
存儲層次結構中最小的緩存是寄存器
B .
存儲層次結構的中心思想是每一層都緩存來自較低一層的數據對象
C .
L4主存可以看作是L5:本地磁盤的緩存
D .
L4主存可以看作是L6的緩存

解析:對於每個k,位於k層的更快更小的存儲設備作為位於k+1層的更大更慢的存儲設備的緩存,即層次結構中的每一層都緩存來自較低一層的數據結構。位於頂端的cpu寄存器組必然是最小的緩存,則L4主存為下一級L5的緩存。

-下面代碼的步長是(C)
技術分享圖片

A .
1
B .
N
C .
NN
D .
N
N*N

解析:假設N為2,則內容依次為000,001,010,011,100,101,110,111.

由此可見步長為4.

  • 下面(B)是I/O總線

A .
USB
B .
PCI
C .
網卡
D .
圖形卡

解析:輸入輸出設備都是通過I/O總線,例如intel的外圍設備互聯(Peripheral Component Interconnect,PCI)總線連接到CPU和主存的。
  • 計算下面磁盤的容量(C):4個盤片,100000個柱面,每條磁道400個扇區,每個扇區512個字節
    A .
    81.92GB
    B .
    40.96GB
    C .
    163.84
    D .
    327.68GB

    解析: n×t×s×b

其中n為保存數據的總盤面數;t為每面磁道數;s為每道的扇區數;b為每個扇區存儲的字節數。而題目中為4個盤片,所以應有8個盤面;容量=2x4x100000x400x512=16384000000字節=163.84G

結對及互評

點評模板:

  • 博客中值得學習的或問題:
    • xxx
    • xxx
    • ...
  • 代碼中值得學習的或問題:
    • xxx
    • xxx
    • ...
  • 其他

本周結對學習情況

- [20155218](博客鏈接)
- 結對照片
- 結對學習內容
    - XXXX
    - XXXX
    - ...

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

xxx
xxx

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第十一周 194/2494 2/10 10/56

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

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

  • 計劃學習時間:8小時

  • 實際學習時間:10小時

  • 改進情況:

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

參考資料

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

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