2018-2019-1 20165226 《信息安全系統設計基礎》第9周學習總結
阿新 • • 發佈:2018-12-02
body thead 元素 深入理解計算機系統 根據 black 占用 信息安全系統 進度
****
代碼托管
2018-2019-1 20165226 《信息安全系統設計基礎》第9周學習總結
目錄
- 一、教材學習內容總結
- 二、練習
- 三、代碼托管與統計
- 四、學習進度條
- 五、參考資料
一、教材學習內容總結
虛擬內存
- 虛擬內存重要性(為什麽需要程序員理解它?):
- 虛擬存儲器是核心的
- 虛擬存儲器是強大的
- 虛擬存儲器是危險的。
- 虛擬存儲器提供的的三個重要能力:
- 它的主存看成是一個存儲在磁盤上的地址空間的高速緩存,在主存中只保存活動區域,並根據需要在磁盤和主存之間來回傳送數據,通過這種方式,高效的使用了主存。
- 它為每個進程提供了一致的地址空間,從而簡化了存儲器管理。
- 它保護了每個進程的地址空間不被其他進程破壞。
物理和虛擬尋址
物理尋址(PA):主存中每個字節都有唯一的物理地址;依靠此來尋址,就叫做物理尋址
虛擬尋址(VA):CPU生成一個虛擬地址然後用這個地址訪問主存,這個虛擬地址在送到存儲器之前先被轉換成適當的物理地址(這個過程叫做地址翻譯)
地址空間
- 是一個非負整數地址的有序集合
虛擬內存作為緩存的工具
- VM系統將虛擬內存分割為虛擬頁,每個虛擬頁大小為P=2^p字節。
- 物理存儲被分割為物理頁,大小也為P字節。
- 任意時刻,虛擬頁面的集合都被分為三個不相交的子集:
- 未分配的:VM系統還沒分配(創建)的頁,不占用任何磁盤空間。
- 緩存的:當前緩存在物理存儲器中的已分配頁。
- 未緩存的:沒有緩存在物理存儲器中的已分配頁。
頁表
- 將虛擬頁映射到物理頁。每次地址翻譯硬件將一個虛擬地址轉換為物理地址時都會讀取頁表
- 頁表是一個頁表條目
缺頁
- DRAM緩存不命中稱為缺頁
- 在磁盤和內存之間傳送頁的活動叫做交換或者頁面調度
- 頁從磁盤換入DRAM和從DRAM換出磁盤;一直等待到不命中發生的時候才換入頁面;這種策略被稱為按需頁面調度
地址翻譯
- 地址翻譯是一個N元素的虛擬地址空間(VAS)中的一個元素和一個M元素的物理地址空間(PAS)之間的映射
- 所需符號
利用TLB加速地址翻譯
- CPU產生一個虛擬地址
- MMU從TLB中取出相應的PTE
- MMU將這個虛擬地址翻譯成一個物理地址,並且將它發送到高速緩存/主存
- 高速緩存/主存將所請求的數據字返回給CPU
研究:Intel Core i7/Linux存儲器系統
linux將虛擬存儲器組織成一些區域(也叫做段)的集合。一個區域就是已經存在的(已分配的)虛擬存儲器的連續片
- 一個具體區域的區域結構:
- vm _start:指向這個區域的起始處;
- vm _end:指向這個區域的結束處;
- vm _prot:描述這個區域內所包含的所有頁的讀寫許可權限;
- vm _fags:描述這個區域內的頁面是與其他進程共享的,還是這個進程私有的,等等;
- vm _next:指向鏈表的下一個結構。
- Linux缺頁異常處理:
- 看虛擬地址A是否合法?
- 看試圖進行的內存訪問是否合法?
- 處理缺頁
內存映射
Linux通過將一個虛擬存儲器區域與一個磁盤上的對象關聯起來,以初始化這個虛擬存儲器區域的內容的過程,這個過程稱為內存映射。
對象
- Unix文件系統中的普通文件
- 匿名文件(全都是二進制0)
再看fork函數
fork函數被當前進程調用時,它創建了當前進程的mm_struct、區域結構和頁表的原樣拷貝。它將兩個進程中的每個頁面都為標記只讀,並將兩個進程中的每個區域結構都標記為私有的寫時拷貝。
再看execve函數
使用execve函數將a.out程序加載到內存
- 動態存儲器分配
當運行時需要額外虛擬存儲器時,使用動態存儲器分配器維護一個進程的虛擬存儲器區域。
- 系統調用malloc函數,從堆中分配塊
- 系統調用free函數來釋放已分配的堆塊
- 實現一個簡單的分配器
- 通用分配器設計
- 操作空閑鏈表的基本常數和宏
- 創建初始空閑鏈表
- 釋放和合並塊
- 分配塊
返回目錄
二、練習
- 實現mypwd
返回目錄
三、代碼托管與統計
****
代碼托管
返回目錄
四、學習進度條
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一周 | 87/87 | 2/2 | 20/20 | |
第二周 | 71/158 | 1/3 | 12/32 | |
第三周 | 100/258 | 2/5 | 13/45 | |
第四周 | 3265/9750 | 2/7 | 15/60 | |
第五周 | 282/9786 | 1/8 | 8/68 | |
第六周 | 1980/13996 | 2/10 | 8/76 | |
第七周 | 488/14484 | 1/11 | 8/84 | |
第八周 | 175/15044 | 3/14 | 8/92 | |
第九周 | 6400/278403 | 2/16 | 10/102 |
嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進自己的計劃能力。這個工作學習中很重要,也很有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。
參考:軟件工程軟件的估計為什麽這麽難,軟件工程 估計方法
計劃學習時間:8小時
實際學習時間:10小時
改進情況:
(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表)
返回目錄
五、參考資料
- 《深入理解計算機系統V3》學習指導
- Linux 基礎入門(新版)_Linux_實驗樓 - 實驗樓
- Linux驅動Invalid module format錯誤解決 - 阿裏雲
返回目錄
2018-2019-1 20165226 《信息安全系統設計基礎》第9周學習總結