2017-2018-1 20155213 《信息安全系统设计基础》第十一周学习总结
2017-2018-1 20155213 《信息安全系統設計基礎》第十一周學習總結
【學習內容:第九章——虛擬存儲器】
一、課本內容梳理
1.虛擬存儲器
-
作用:
- 將主存看作是一個存儲在磁盤上的地址空間的高速緩存,在主存中只保護活動的區域,并根據需要在磁盤和主存之間來回傳送數據;
- 為每個進程提供了一致的地址空間,從而簡化了存儲器管理;
- 保護了每個進程的地址空間不被其它進程破壞
-
地位:
- 虛擬存儲器是中心的:它是硬件異常、硬件地址翻譯、主存、磁盤文件和內核軟件的交互中心;
- 虛擬存儲器是強大的:它可以創建和銷毀存儲器片、可以映射存儲器片映射到磁盤某個部分等等;
- 虛擬存儲器若操作不當則十分危險
2.虛擬存儲器的基本思想
允許每個數據對象有多個獨立的地址,其中每個地址都選自不同的地址空間(比如,虛擬地址空間或者是物理地址空間)。
3.虛存如何作為緩存工具?
-
理念:
- 首先,VM上被組織為一個由存放在磁盤上的N個連續的字節大小的單元組成的數組。每個字節都有一個唯一的虛擬地址,這個虛擬地址是作為到數組的索引的。
- 其次,VM系統將虛擬存儲器分割為大小固定的虛擬頁,每個虛擬頁的大小為P=2^p字節;類似地,物理存儲器被分割為物理頁(也叫做頁幀),大小也為P字節
-
虛存頁面集合
- 未分配的:VM系統沒有將它們與任何數據關聯起來,也不占用任何磁盤空間;
- 緩存的:當前緩存在物理存儲器中的已分配的頁;
- 未緩存的:沒有還存在物理存儲器中的已分配頁
4.頁表
- 作用:將虛擬頁映射到物理頁。每次地址翻譯硬件將一個虛擬地址轉換為物理地址時都會讀取頁表。操作系統負責維護頁表中的內容。
- 結構:頁表就是一個頁表條目(PTE)數組;虛擬地址空間中的每個頁在頁表中一個固定偏移量處都有一個PTE。為了我們的目的,我們假設每個PTE是由一個有效位和一個n位的地址字段組成的。有效位表明了該物理頁的起始位置,這個物理頁中緩存了該虛擬頁。
5.缺頁
- DRAM緩存不命中稱為缺頁。
- 概念:
- 在存儲器的習慣說法中,塊被稱為頁;
- 在磁盤和存儲器之間傳送頁的活動叫做交換或者頁面調度;
- 頁從磁盤換入DRAM和從DRAM換出磁盤;一直等待到不命中發生的時候才換入頁面;這種策略被稱為按需頁面調度
- 處理過程:
- 缺頁異常調用內核中的缺頁異常處理程序,該程序會選擇一個犧牲頁,將其換出內存;
- 內核從磁盤中拷貝需要的條目到犧牲頁之前所在的位置,隨后返回;
- 當異常處理程序返回之后,它會再次啟動導致缺頁的指令,該指令會把導致缺頁的虛擬地址重發送到地址翻譯硬件;
- 此時,頁面命中
6.地址翻譯
- 形式上說,地址翻譯是一個N元素的虛擬地址空間(VAS)中的一個元素和一個M元素的物理地址空間(PAS)之間的映射;
- 過程:
- CPU中的一個控制寄存器,頁表基址寄存器指向當前頁表;
- n位的虛擬地址包括以下兩個部分:一個p位的虛擬頁面偏移和一個(n-p)位的虛擬頁號;
- MMU用后者選擇適當的PTE,再將物理頁號和虛擬地址中的VPO串聯起來得到物理地址;
- 因為物理和虛擬頁面都是P字節的,所以物理頁面偏移和VPO是相同的
7.linux虛擬存儲器系統
- linux為每個進程維持了一個單獨的虛擬地址空間,其中,內核虛擬存儲器位于用戶棧之上;
- 內核虛擬存儲器包含內核中的代碼和數據結構,還有一些被映射到一組連續的物理頁面(主要是便捷地訪問特定位置,比如執行I/O操作的時候需要的位置)
- linux將虛擬存儲器組織成一些區域(也叫做段)的集合。一個區域就是已經存在的(已分配的)虛擬存儲器的連續片;
- 意義:允許虛擬地址空間有間隙;內核不用記錄那些不存在的頁,這樣的頁也不用占用存儲器;
- 區域結構
- vm_start:指向這個區域的起始處;
- vm_end:指向這個區域的結束處;
- vm_prot:描述這個區域內所包含的所有頁的讀寫許可權限;
- vm_fags:描述這個區域內的頁面是與其他進程共享的,還是這個進程私有的,等等;
- vm_next:指向鏈表的下一個結構
8.共享對象&私有對象比較研究
-
引入:一個對象可以被映射到虛擬存儲器的一個區域,要么作為共享對象,要么作為私有對象。
- 如果一個進程將一個共享對象映射到它的虛擬地址空間的一個區域內,那么進程對這個區域的任何寫操作,對其他也把這個共享對象映射到自己的虛擬地址空間的進程來說也是可見的【無論對象被映射到多少個共享區域中,在物理存儲器中也只需要該對象的一個拷貝】;
- 對于一個映射到私有對象的區域所做的改變,對于其他進程來說是不可見的,并且進程對這個區域所做的任何寫操作都不會反映在磁盤上的對象中
-
深入:
- 私有對象通過寫時拷貝的巧妙技術被映射到虛擬存儲器中,對于每個映射私有對象的進程,相應私有區域的頁表條目都被標記為只讀,并且區域結構被標記為私有對象的寫時拷貝;
- 只要沒有進程試圖寫它自己的私有區域,它們就可以繼續共享;
- 只要有一個進程試圖去寫私有區域內的某個頁面,那么這個寫操作就會觸發一個保護故障,當故障處理程序注意到保護異常是由于進程試圖寫私有的寫時拷貝區域中的一個頁面而引起的時候,它就會在物理存儲區域中創建這個頁面的一個新的拷貝,更新頁表條目指向這個新的拷貝,然后恢復其可寫權限
9.垃圾收集
- 概念:垃圾收集器是一種動態存儲分配器,它自動釋放程序不再需要的已分配塊。這些塊稱為垃圾。自動回收的過程就叫做垃圾收集。垃圾收集器定期地識別垃圾塊,并相應地調用free,將這些塊放回到空閑鏈表中
- 過程:
- 垃圾收集器將整個存儲器視為一張有向可達的圖,圖的節點被分為一組根節點和一組堆節點;每個節點對應于堆中的一個已分配的塊。
- 當存在任意一條從根節點除法并到達p的有向路徑的時候,我們說p是可達的;在任何時刻,不可達節點對應于垃圾,是不可再被回收利用的。
- 垃圾回收器的角色是維護可達圖的某種表示,并通過釋放不可達節點將它們返回給空閑鏈表,來定期回收它們。
- 無論何時需喲堆空間,應用會用通常的方式調用malloc函數;如果malloc找不到一個合適的空閑塊,那么就會調用垃圾收集器,希望能夠回收一些垃圾到空閑鏈表
二、課后練習題
1.練習題9.3
給定一個32位的虛擬地址空間和一個24位的物理地址,對于下面的頁面大小P,確定VPN,VPO,PPN,PPO的位數
【補充:VPN——虛擬頁號;VPO——虛擬頁面偏移量;PPN——物理頁號;PPO——物理頁面偏移量】
【理解:我們有32個虛擬地址位和24個物理地址位;頁面大小是1KB,這意味著對于VPO和PPO,都需要10位(去區分每個頁面內這2^10個具體的單位);那么剩下的位分別是VPN,PPN】
P = 1KB——>VPN = 22,VPO = 10,PPN = 14,PPO = 10
P = 4KB——>VPN = 20,VPO = 12,PPN = 12,PPO = 12
2.練習題9.5
編寫一個C語言程序mmapcopy.c,使用mmap將任意一個大小的磁盤文件拷貝到stdout,輸入文件的名字必需作為一個命令行參數來傳遞
【答案:】
#include "csapp.h" void mmapcopy(int fd,int size) {char *bufp;bufp = Mmap(NULL,size,PROT_READ,MAP_PRIVATE,fd,0);Write(1,bufp,size);return; } int main(int argc,char **argv) {struct stat stat;int fd;if(argc !=2)//因為傳進來的參數應該有兩個,一個是文件名(題目要求用命令行傳遞);第二個是{printf("usage:%s ,<filename>\n",argv[0]);exit(0);}fd = Open(argv[0],O_RDONLY,0);fstat(fd,&stat);mmapcopy(fd,stat.st_size);exit(0); }代碼托管
結對及互評
結對隊友20155303
其他(感悟、思考等,可選)
這周學習了新的處理器環境,挺受用的,也理解了ISA是處理器設計者和編譯器編寫者的抽象層。
學習進度條
| 目標 | 5000行 | 15篇 | 400小時 | |
| 第一周 | 177/177 | 1/1 | 10/10 | |
| 第三周 | 308/485 | 2/2 | 12/22 | |
| 第五周 | 277/762 | 2/4 | 10/32 | |
| 第六周 | 567/1329 | 1/5 | 15/47 | |
| 第七周 | 22/1351 | 1/6 | 10/57 | |
| 第九周 | 1645/2996 | 3/9 | 20/77 | |
| 第十一周 | 689/3685 | 2/11 | 20/97 |
嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進自己的計劃能力。這個工作學習中很重要,也很有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。
參考:軟件工程軟件的估計為什么這么難,軟件工程 估計方法
計劃學習時間:XX小時
實際學習時間:XX小時
改進情況:
(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表)
參考資料
- 《深入理解計算機系統V3》學習指導
- ...
轉載于:https://www.cnblogs.com/elevator/p/7966761.html
總結
以上是生活随笔為你收集整理的2017-2018-1 20155213 《信息安全系统设计基础》第十一周学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 日记 day4。
- 下一篇: 四.Windows I/O模型之重叠IO