2017-2018-1 20155324 《信息安全系统设计基础》第十四周学习总结
2017-2018-1 20155324 《信息安全系統設計基礎》第十四周學習總結
找出全書你認為學得最差的一章,深入重新學習一下,要求(期末占5分): ?總結新的收獲 ?給你的結對學習搭檔講解或請教,并獲取反饋 ?參考上面的學習總結模板,把學習過程通過博客(隨筆)發表,博客標題“學號 《信息安全系統設計基礎》第十四周學習總結”,博客(隨筆)要通過作業提交,截至時間本周日 23:59。教材學習內容總結
第九章 虛擬存儲器
虛擬存儲器
虛擬內存是計算機系統內存管理的一種技術。它使得應用程序認為它擁有連續的可用的內存(一個連續完整的地址空間),而實際上,它通常是被分隔成多個物理內存碎片,還有部分暫時存儲在外部磁盤存儲器上,在需要時進行數據交換。目前,大多數操作系統都使用了虛擬內存,如Windows家族的“虛擬內存”;Linux的“交換空間”等。
虛擬內存別稱虛擬存儲器(Virtual Memory)。電腦中所運行的
程序均需經由內存執行,若執行的程序占用內存很大或很多,則會導致內存消耗殆盡。為解決該問題,Windows中運用了虛擬內存[2] 技術,即勻出一部分硬盤空間來充當內存使用。當內存耗盡時,電腦就會自動調用硬盤來充當內存,以緩解內存的緊張。若計算機運行程序或操作所需的隨機存儲器(RAM)不足時,則 Windows 會用虛擬存儲器進行補償。它將計算機的RAM和硬盤上的臨時空間組合。當RAM運行速率緩慢時,它便將數據從RAM移動到稱為“分頁文件”的空間中。將數據移入分頁文件可釋放RAM,以便完成工作。 一般而言,計算機的RAM容量越大,程序運行得越快。若計算機的速率由于RAM可用空間匱乏而減緩,則可嘗試通過增加虛擬內存來進行補償。但是,計算機從RAM讀取數據的速率要比從硬盤讀取數據的速率快,因而擴增RAM容量(可加內存條)是最佳選擇。
虛擬內存是Windows 為作為內存使用的一部分硬盤空間。虛擬內存在硬盤上其實就是為一個碩大無比的文件,文件名是PageFile.Sys,通常狀態下是看不到的。必須關閉資源管理器對系統文件的保護功能才能看到這個文件。虛擬內存有時候也被稱為是“頁面文件”就是從這個文件的文件名中來的。
內存在計算機中的作用很大,電腦中所有運行的程序都需要經過內存來執行,如果執行的程序很大或很多,就會導致內存消耗殆盡。為了解決這個問題,WINDOWS運用了虛擬內存技術,即拿出一部分硬盤空間來充當內存使用,這部分空間即稱為虛擬內存,虛擬內存在硬盤上的存在形式就是 PAGEFILE.SYS這個頁面文件。
虛擬存儲器是由硬件和操作系統自動實現存儲信息調度和管理的。它的工作過程包括6個步驟:
虛存的訪問過程
虛存空間的用戶程序按照虛地址編程并存放在輔存中。程序運行時,由地址變換機構依據當時分配給該程序的實地址空間把程序的一部分調入實存。每次訪存時,首先判斷該虛地址所對應的部分是否在實存中:如果是,則進行地址轉換并用實地址訪問主存;否則,按照某種算法將輔存中的部分程序調度進內存,再按同樣的方法訪問主存。由此可見,每個程序的虛地址空間可以遠大于實地址空間,也可以遠小于實地址空間。前一種情況以提高存儲容量為目的,后一種情況則以地址變換為目的。后者通常出現在多用戶或多任務系統中:實存空間較大,而單個任務并不需要很大的地址空間,較小的虛存空間則可以縮短指令中地址字段的長度。
9.1 物理與虛擬尋址
物理地址(Physical Address,PA):計算機系統的主存被組織為M個連續的字節大小的單元組成的數組。每個字節的地址叫物理地址.
物理地址(Physical Address,PA):計算機系統的主存被組織為M個連續的字節大小的單元組成的數組。每個字節的地址叫物理地址.
早期的PC,數字信號處理器,嵌入式微控制器以及Cray超級計算機使用物理尋址。
現代處理器使用的是虛擬尋址(virtual addressing)的尋址形式。
CPU通過生成一個虛擬地址(Virtual address,VA)來訪問主存。
地址翻譯也需要CPU硬件和操作系統之間的緊密結合。
CPU芯片上有叫做存儲器管理單元(Memory Management Unit,MMU)的專用硬件。
9.2 地址空間
一個包含N=2^n個地址的虛擬地址空間就叫做一個n位地址空間
主存中的每個字節都有一個選自虛擬地址空間的虛擬地址和一個選自物理地址空間的物理地址
9.3 虛擬存儲器作為緩存的工具
虛擬存儲器被組織為一個由存放在磁盤上的N個連續的字節大小的單元組成的數組。每個字節都有一個唯一的虛擬地址,這個唯一的虛擬地址是作為到數組的索引的
磁盤上數據的內容被緩存在主存中
和存儲器層次結構中其他緩存一樣,磁盤上的數據被分割成塊,這些塊作為磁盤和主存之間的傳輸單元
DRAM緩存的組織結構處理過程如下:
讀取虛擬地址所指向的PT。
讀取PTE有效位,發現未被緩存,觸發缺頁異常。
調用缺頁異常處理程序
選擇犧牲頁。
如果犧牲頁發生了改變,將其拷貝回磁盤(因為是寫回)
需要讀取的頁代替了犧牲頁的位置。
結果:犧牲也不被緩存,需要讀取的頁被緩存。
中斷結束,重新執行最開始的指令。
在DRAM中讀取成功。
9.4 虛擬存儲器作為存儲器管理的工具
操作系統為每個進程提供了一個單獨的頁表,也就是一個獨立的虛擬地址空間
多個虛擬頁面可以映射到同一個共享物理頁面上
將一組連續的虛擬頁映射到任意一個文件中的任意位置的表示法稱作存儲器映射
簡化鏈接
獨立的空間地址意味著每個進程的存儲器映像使用相同的格式。
文本節總是從0x08048000(32位)處或0x400000(64位)處開始。
然后是數據,bss節,棧。
一致性極大簡化了鏈接器的設計和實現。
簡化加載
加載器可以從不實際拷貝任何數據從磁盤到存儲器。
基本都是虛擬存儲系統完成。
簡化共享
- 獨立地址空間為操作系統提供了一個管理用戶進程和操作系統自身之間的一致共享機制
操作相同的操作系統內核代碼
C標準庫的printf.
- 因此操作系統需要將不同進程的適當的虛擬頁映射到相同的物理頁面。
多個進程共享這部分代碼的一個拷貝。
而不是每個進程都要加載單獨的內核和C標準庫的拷貝。
簡化存儲器分配
即虛擬頁連續(虛擬頁還是單獨的),物理頁可以不連續。使得分配更加容易。
9.5 虛擬存儲器作為存儲器保護的工具
任何現代操作系統必須為操作系統提供手段來控制對存儲器系統的訪問。
- 不應該允許用戶進程修改它的只讀文本段。
- 不允許它讀或修改任何內核的代碼和數據結構
- 不允許讀寫其他進程的私有存儲器。
- 不允許修改共享的虛擬頁,除非所有共享者顯示允許這么做(通過調用明確的進程間通信)
link
- SUP: 是否只有在內核模式下才能訪問?
- READ: 讀權限。
- WRITE: 寫權限。
9.6 地址翻譯
- 形式上來說,地址翻譯是一個N元素的虛擬地址空間(VAS)中的元素和一個M元素的物理地址空間(PAS)元素之間的映射
圖(a)展示頁面命中,CPU硬件執行過程:
- 第一步:處理器生成虛擬地址,把它傳送給MMU。
- 第二步: MMU生成PTE地址(PTEA),并從高速緩存/主存請求中得到它。
- 第三步: 高速緩存/主存向MMU返回PTE。
- 第四步: MMU構造物理地址(PA),并把它傳送給高速緩存/主存。
- 第五步: 高速緩存/主存返回所請求的數據字給處理器。
頁面命中完全由硬件處理,與之不同的是,處理缺頁需要 硬件和操作系統內核協作完成。
第一到三步: 與命中時的一樣
第四步:PTE有效位是零,所以MMU觸發異常,傳遞CPU中的控制到操作系統內核中的 缺頁異常處理程序。
第五步:缺頁異常處理程序確定出物理存儲頁中的犧牲頁,如果這個頁面已經被修改,則把它換出到磁盤。
第六步:缺頁異常處理程序調入新的頁面,并更新存儲器中的PTE。
第七部:缺頁異常處理程序返回到原來的進程,再次執行導致缺頁的指令,之后就是頁面命中一樣的步驟。
9.7 案例研究: Intel Core i7/Linux 存儲器系統
處理器包(processor package)
四個核
層次結構的TLB
- 虛擬尋址
- 四路組相連
- Linux 一頁4kb
層次結構的數據和指令高速緩存。
- 物理尋址
- L1,L2 八路組相連
- L3 十六路組相連
- 塊大小64字節
快速的點到點鏈接。
- 基于Intel QuickPath技術
- 為了讓核與其他核和外部I/O橋直接通信
L3高速緩存
DDR3存儲器控制器
9.7.2 Linux 虛擬存儲系統
內核虛擬存儲器
- 內核虛擬存儲器包含內核中的代碼和數據。
- 內核虛擬存儲器的某些區域被映射到所有進程共享的物理頁面
- 如:內核代碼,全局數據結構。
- Linux也將一組連續的虛擬頁面(大小等同于系統DRAM總量)映射到相應的一組物理頁面。
- 內核虛擬存儲器包含每個進程不相同的數據。
- 頁表,內核在進程上下文中時使用的棧,等等。
Linux 虛擬存儲器區域
Linux將虛擬存儲器組織成一些區域(也叫做段)的集合。
- 一個區域就是已經存在著的(已分配的) 虛擬存儲器的連續片,這些片/頁已某種形式相關聯。
- 代碼段,數據段,堆,共享庫段,用戶棧。
- 所有存在的虛擬頁都保存在某個區域。
- 區域的概念很重要
- 允許虛擬地址空間有間隙。
- 一個進程中虛擬存儲器的內核數據結構。
mmap
9.8 存儲器映射
存儲器映射: Linux通過將一個虛擬存儲器區域與一個磁盤上的對象關聯起來,以初始化這個虛擬存儲器區域的內容,這個過程叫做存儲器映射。
虛擬存儲器區域可以映射到以下兩種類型文件。
- 一旦一個虛擬頁面被初始化了,它就在一個由內核維護的專門的交換文件(swap file)之間換來換去。交換文件也叫交換空間或者交換區域。
- 需要意識到,在任何時刻,交換空間都限制著當前運行著的進程分配的虛擬頁面總數。
9.9 動態存儲器分配
雖然可以使用更低級的mmap和munmap函數來創建和刪除虛擬存儲器的區域。
但是C程序員還是覺得用動態存儲器分配器(dynamic memory allocator)更方便。
解:
解:
解:
代碼實現:
#include"csapp.h" void mmapcopy(int fd,int fd1,int size){ char *bufp; bufp =(char *)mmap(NULL,size,PROT_READ,MAP_PRIVATE,fd,0); write(1,bufp,size);munmap(bufp,size);return; } int main(int argc,char **argv){ struct stat _stat; int fd,fd1; if(argc != 2){ printf("usage :%s <filename>",argv[0]); exit(0); } fd = open(argv[1],O_RDONLY,0); fstat(fd,&_stat);mmapcopy(fd,fd1,_stat.st_size); return 0; }其他(感悟、思考等,可選)
本學期的課程雖然已經接近尾聲了,但是我們學習的道路才剛剛開始。不能因為最后一段路就要放松警惕,更要提高自我意識,通過自己的努力來走好每一段路。
代碼托管
學習進度條
| 目標 | 5000行 | 30篇 | 400小時 | |
| 第一周 | 85/85 | 1/1 | 5/5 | |
| 第二周 | 150/230 | 1/2 | 10/15 | |
| 第三周 | 50/280 | 1/3 | 7/22 | |
| 第四周 | 70/350 | 1/4 | 5/27 | |
| 第五周 | 100/450 | 2/6 | 5/32 | |
| 第六周 | 50/500 | 1/7 | 10/42 | |
| 第七周 | 70/570 | 2/9 | 10/55 | |
| 第八周 | 80/650 | 1/10 | 8/63 | |
| 第九周 | 100/750 | 3/13 | 8/71 | |
| 第十周 | 80/830 | 1/14 | 8/79 | |
| 第十一周 | 50/880 | 2/16 | 10/89 | |
| 第十二周 | 40/920 | 1/17 | 10/89 | |
| 第十三周 | 60/980 | 2/19 | 10/89 | |
| 第十四周 | 80/1070 | 1/20 | 10/99 |
嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進自己的計劃能力。這個工作學習中很重要,也很有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。
參考:軟件工程軟件的估計為什么這么難,軟件工程 估計方法
計劃學習時間:XX小時
實際學習時間:XX小時
改進情況:
(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表)
參考資料
- 《深入理解計算機系統V3》學習指導
- ...
轉載于:https://www.cnblogs.com/wang5324/p/8099761.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的2017-2018-1 20155324 《信息安全系统设计基础》第十四周学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2. PHP赋值运算符
- 下一篇: 钢材销售系统