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

2018-2019-1 20165226 《信息安全系統設計基礎》第9周學習總結

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周學習總結