1. 程式人生 > ># 2018-2019-1 20165316 《資訊安全系統設計基礎》第九周學習總結

# 2018-2019-1 20165316 《資訊安全系統設計基礎》第九周學習總結

2018-2019-1 20165316 《資訊安全系統設計基礎》第九周學習總結

教材學習內容總結

理解虛擬儲存器的概念和作用

  • 虛擬記憶體提供了三個重要的能力:
    • 它將主存看成是一個儲存在磁碟上的地址空間的快取記憶體,在主存中只儲存活動區域,並根據需要在磁碟和主存之間來回傳送資料,通過這種方式,高效的使用了主存。
    • 它為每個程序提供了一致的地址空間,從而簡化了儲存器管理。
    • 它保護了每個程序的地址空間不被其他程序破壞。
  • 程式設計師需要理解虛擬記憶體
    • 虛擬記憶體是核心的:有助於理解計算機系統的工作方式
    • 虛擬記憶體是強大的:給與應用程式強大的能力
    • 虛擬記憶體是危險的:合理地管理分配記憶體可以減少出錯風險。

理解地址翻譯的概念

  • 地址翻譯:一個N元素的虛擬地址空間(VAS)中的元素和一個M元素的實體地址空間(PAS)之間的對映:MAP: VAS → PAS ∪ ∅
    • MAP = A' ,如果虛擬地址A處的資料在PAS的實體地址A'處
    • MAP = ∅ ,如果虛擬地址A處的資料不在物理儲存器中
  • CPU中的一個控制暫存器,頁表基址暫存器指向當前頁表,n 位的虛擬地址包含兩個部分:一個 p 位的虛擬頁面偏移(VPO) 和一個(n-p)位的虛擬頁號,頁表條目中的物理頁頁號和虛擬地址中的VPO串聯起來,就得到了相應的實體地址。

理解儲存器對映

  • 儲存器對映:Linux通過將一個虛擬儲存器區域與一個磁碟上的物件(object)關聯起來,以初始化這個虛擬記憶體區域的內容的過程。
  • 虛擬記憶體區域可以對映到兩種物件中的一種:
    • Linux 檔案系統中的普通檔案
    • 匿名檔案
  • 一旦一個虛擬頁面被初始化了,它就在一個由核心維護的專門的交換檔案(swap file)之間換來換去。交換檔案也叫交換空間,或交換區域。交換空間限制能夠分配的虛擬頁面總數。

掌握動態儲存器分配的方法

  • 當執行時需要額外虛擬儲存器時,使用動態記憶體分配器維護一個程序的虛擬儲存器區域。
  • 分配器有兩種基本風格。兩種風格都要求應用顯式地分配塊。不同在於由哪個實體來負責釋放已分配地塊:
    • 顯示分配器:要求應用顯式地釋放任何已經分配的塊。
    • 隱式分配器:要求分配器檢測一個已分配塊何時不再被程式所使用,就釋放這個塊。也叫做垃圾收集器。

理解垃圾收集的概念

  • 動態記憶體分配器,自動釋放程式不再需要的已分配塊。
  • 垃圾收集器將記憶體視為一張有向可達圖,從根節點出發,不可達的堆節點視為垃圾。兩個節點的指向關係是其中一個節點包含另一個的位置資訊。

瞭解C語言中與儲存器有關的錯誤

  • 間接引用壞指標
    • 在程序的虛擬地址空間中有較大的洞,沒有對映到任何有意義的資料,如果試圖引用一個指向這些洞的指標,作業系統就會以段異常來終止程式。
    • 典型的錯誤是:scanf("%d",val);,沒有加&符號
  • 讀未初始化的記憶體
    • 雖然bass儲存器位置總是被載入器初始化為0,但對於堆儲存器卻並不是這樣的。
    • 常見的錯誤就是假設堆儲存器被初始化為0.
  • 允許棧緩衝區溢位
    • 如果一個程式不檢查輸入串的大小就寫入棧中的目標緩衝區,程式就會出現緩衝區溢位錯誤。
  • 假設指標和指向他們的物件大小是相同的。
  • 造成錯位錯誤。
  • 引用指標,而不是他所指向的物件。
  • 誤解指標運算
    • 忘記了指標的算術操作是以它們指向的物件的大小為單位來進行,而這種大小單位不一定是位元組。
  • 引用不存在的變數
  • 引用空閒堆塊中的資料
  • 引起儲存器洩露
    • 當不小心忘記釋放已分配塊,而在堆裡建立了垃圾時,就會引起儲存器洩露。

程式碼託管

學習進度條

程式碼行數(新增/累積) 部落格量(新增/累積) 學習時間(新增/累積)
目標 1000行 30篇 400小時
第一週 156/200 2/2 20/20
第二週 121/200 2/2 18/30
第三週 107/200 2/2 15/30
第四周 111/200 2/2 16/30
第五週 101/200 1/1 18/30
第六週 110/200 2/2 19/30
第七週 90/200 1/1 18/30
第八週 93/200 1/1 15/30
第九周 265/200 1/1 25/30