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

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

會有 ble 腳本 行數 操作系統 耗時 虛擬地址 磁盤文件 map

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

教材學習內容總結

學習目標

  1. 理解虛擬存儲器的概念和作用
  2. 理解地址翻譯的概念
  3. 理解存儲器映射
  4. 掌握動態存儲器分配的方法
  5. 理解垃圾收集的概念
  6. 了解C語言中與存儲器有關的錯誤

教材學習

  • 物理和虛擬地址
  • 虛擬尋址:使用虛擬地址時,CPU通過生成一個虛擬地址來訪問主存,這個虛擬地址在被送到存儲器之前先轉換成適當的物理地址。將一個虛擬地址轉換為物理地址的任務叫做地址翻譯。就像異常處理一樣,地址翻譯需要CPU硬件和操作系統之間的緊密合作。CPU芯片上叫做存儲器管理單元的專用硬件,利用存放在主存中的查詢表來動態翻譯虛擬地址,該表的內容是由操作系統管理的。
    技術分享圖片

  • 在任意時刻,虛擬頁面的集合都分為三個不相交的子集:
  • 未分配的:VM系統還未分配(或者創建)的頁。未分配的塊沒有任何數據和它們相關聯,因此也就不占用任何磁盤空間。(沒有調用malloc或者mmap的)
  • 緩存的:當前緩存在物理存儲中的已分配頁。(已經調用malloc和mmap的,在程序中正在引用的)
  • 未緩存的:沒有緩存在物理存儲器中的已分配頁。(已經調用malloc和mmap的,在程序中還沒有被引用的)
  • 地址空間是一個非負數地址的有序集合:如果地址空間的整數是連續的,那麽我們說它是一個線性地址空間。那麽一個擁有虛擬尋址的CPU,也就會有一個虛擬地址空間。內存中的一個字節,就會有一個物理地址和一個虛擬地址
    。如果CPU有N個虛擬地址空間,那麽該字節就有N個虛擬地址
  • 虛擬存儲器作為緩存的工具
  • 虛擬存儲器被組織為一個由存放在磁盤上的N個連續的字節大小的單元組成的數組。每個字節都有一個唯一的虛擬地址,這個唯一的虛擬地址是作為到數組的索引的。磁盤上數據的內容被緩存在主存中。和存儲器層次結構中其他緩存一樣,磁盤上的數據被分割成塊,這些塊作為磁盤和主存之間的傳輸單元。
  • 將一組連續的虛擬頁映射到任意一個文件中的任意位置的表示法稱作存儲器映射
  • 使用頁表進行地址翻譯
  • CPU中的一個控制寄存器,頁表基址寄存器(PTBR)指向當前頁表。n位的虛擬地址包含兩個部分:一個p位的虛擬頁面偏移和一個(n-p)位的虛擬頁號。MMU利用VPN來選擇適當的PTE(頁表條目,一個頁表其實就是多個頁表條目的數組)。
  • 虛擬存儲器作為存儲器保護的工具
  • 現代操作系統都嚴格限制普通應用程序訪問自己的只讀數據和別進程的數據,還有操作系統的內核部分。所以虛擬存儲器可以在頁的開始部分設置幾個標誌位,用於標明這個進程是系統進程還是用戶進程。如果某一天指令違反了這個條件,那麽CPU就觸發一個異常。Unix外殼一般將這種異常報告為“段錯誤segmentation fault”
  • 動態存儲器分配malloc:分配在虛擬存儲器中的區域,這個區域可能已經在內存中了,也可能在磁盤上

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

  • 問題1:虛擬存儲器的作用是什麽?
  • 問題1解決方案:
  1. 虛擬存儲器是中心的:它是硬件異常、硬件地址翻譯、主存、磁盤文件和內核軟件的交互中心
  2. 虛擬存儲器是強大的:它可以創建和銷毀存儲器片、可以映射存儲器片映射到磁盤某個部分等
  3. 虛擬存儲器若操作不當則十分危險

代碼托管

技術分享圖片

上周考試錯題總結

1. ( 多選題 | 1 分)
Unix/Linux中,對於代碼fd=open("foo",O_WRONLY,0766),umask=022,下面說法正確的是()
A.進程對foo是只寫的
B.同組成員能寫foo
C.使用者可以執行foo
D.任何人都可以寫foo
正確答案: A C  你的答案: A B C D
解析:九個權限可以用0777表示,07(使用者)7(同組成員)7(其他人)
7(111)(讀:寫:執行),文件實際權限是mode&~mask

2. ( 多選題 | 1 分)
關於open(2),下面說法正確的是( )
A.flag 參數中O_RDONLY,O_WRONLY,O_RDWR至少要有一個
B.O_RDONLY|O_WRONLY == O_RDWR
C.fd=open("foo.txt",O_WRONLY|O_APPEND,0),調用write(fd,buff,n)寫入foo.txt的數據不會破壞已有數據。
D.fd=open("foo.txt",O_WRONLY|O_APPEND,0644),必將導致其他人不能寫foo.txt
正確答案: A C  你的答案: A C D
解析:熟悉umask命令, open第三個參數實際是mode & ~umask

3. ( 多選題 | 1 分)
Linux中下列概念中可以用Unix I/O處理的是()
A.普通文件
B.設備文件
C.目錄
D.套接字
正確答案: A B C D  你的答案: A C D

4. 輸入輸出是針對()來講的?
A.CPU
B.主存
C.I/O設備
D.計算機

結對及互評

點評模板:

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

本周結對學習情況

  • 20155227

其他(感悟、思考等)

本周通過學習虛擬存儲器的相關知識,對於計算機系統中存儲器部分又有了更深一步的了解。虛擬存儲器在現代操作系統中作用很重要

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一周 0/0 1/1 3/3
第二周 100/100 1/2 3/6
第三周 300/400 1/3 4/10
第四周 0/400 2/5 2/12
第五周 25/425 1/6 4/16
第六周 181/606 3/9 10/26
第七周 201/807 2/11 7/33
第八周 -(包括腳本無意義)/6719 2/13 7/40
第九周 396/7115 3/16 4/44
第十周 1160/8275 2/18 4/49
第十一周 135/8410 3/21 5/54

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

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

  • 計劃學習時間:5小時

  • 實際學習時間:5小時

  • 改進情況:

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

參考資料

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

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