# 2018-2019-1 20165316 《資訊安全系統設計基礎》第九周學習總結
阿新 • • 發佈:2018-12-03
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 |