計(jì)算機(jī)系統(tǒng)-從應(yīng)用程序到底層實(shí)現(xiàn) 課件 第25講- VM1基本概念_第1頁
計(jì)算機(jī)系統(tǒng)-從應(yīng)用程序到底層實(shí)現(xiàn) 課件 第25講- VM1基本概念_第2頁
計(jì)算機(jī)系統(tǒng)-從應(yīng)用程序到底層實(shí)現(xiàn) 課件 第25講- VM1基本概念_第3頁
計(jì)算機(jī)系統(tǒng)-從應(yīng)用程序到底層實(shí)現(xiàn) 課件 第25講- VM1基本概念_第4頁
計(jì)算機(jī)系統(tǒng)-從應(yīng)用程序到底層實(shí)現(xiàn) 課件 第25講- VM1基本概念_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

信號(hào)處理程序示例voidint_handler(intsig){

safe_printf("Process%dreceivedsignal%d\n",getpid(),sig);exit(0);}voidfork13(){

pid_t

pid[N];

int

i,child_status;

signal(SIGINT,int_handler);for(i=0;i<N;i++)if((pid[i]=fork())==0){while(1);/*childinfiniteloop}for(i=0;i<N;i++){

printf("Killingprocess%d\n",pid[i]);kill(pid[i],SIGINT);}for(i=0;i<N;i++){

pid_t

wpid=wait(&child_status);if(WIFEXITED(child_status))

printf("Child%dterminatedwithexitstatus%d\n",

wpid,WEXITSTATUS(child_status));else

printf("Child%dterminatedabnormally\n",wpid);}}N=5信號(hào)處理程序示例voidint_handler(intsig){

safe_printf("Process%dreceivedsignal%d\n",getpid(),sig);exit(0);}voidfork13(){

pid_t

pid[N];

int

i,child_status;

signal(SIGINT,int_handler);for(i=0;i<N;i++)if((pid[i]=fork())==0){while(1);/*childinfiniteloop}for(i=0;i<N;i++){

printf("Killingprocess%d\n",pid[i]);kill(pid[i],SIGINT);}for(i=0;i<N;i++){

pid_t

wpid=wait(&child_status);if(WIFEXITED(child_status))

printf("Child%dterminatedwithexitstatus%d\n",

wpid,WEXITSTATUS(child_status));else

printf("Child%dterminatedabnormally\n",wpid);}}N=5信號(hào)處理程序示例voidint_handler(intsig){

safe_printf("Process%dreceivedsignal%d\n",getpid(),sig);exit(0);}voidfork13(){

pid_t

pid[N];

int

i,child_status;

signal(SIGINT,int_handler);for(i=0;i<N;i++)if((pid[i]=fork())==0){while(1);/*childinfiniteloop}for(i=0;i<N;i++){

printf("Killingprocess%d\n",pid[i]);kill(pid[i],SIGINT);}for(i=0;i<N;i++){

pid_t

wpid=wait(&child_status);if(WIFEXITED(child_status))

printf("Child%dterminatedwithexitstatus%d\n",

wpid,WEXITSTATUS(child_status));else

printf("Child%dterminatedabnormally\n",wpid);}}N=5《計(jì)算機(jī)系統(tǒng)》虛擬存儲(chǔ)器概念

篇《計(jì)算機(jī)系統(tǒng)》課程教學(xué)組2025年春季學(xué)期43512簡單內(nèi)存系統(tǒng)示例地址翻譯目標(biāo)問題地址空間存儲(chǔ)映射地址空間緩存內(nèi)存管理內(nèi)存保護(hù)虛存解決了什么問題地址翻譯簡單內(nèi)存系統(tǒng)示例存儲(chǔ)映射學(xué)習(xí)內(nèi)容43512簡單內(nèi)存系統(tǒng)示例地址翻譯目標(biāo)問題地址空間存儲(chǔ)映射地址空間本講學(xué)習(xí)內(nèi)容Q1:滿足所有進(jìn)程需要?Q2:內(nèi)存如何管理?Q3:如何保護(hù)與共享?解決方案:增加一個(gè)層次……每個(gè)進(jìn)程有其自己的私有存儲(chǔ)空間

之前提及的問題均得以解決……

解決方案每一個(gè)進(jìn)程有其自己的內(nèi)存私有映像

“如何選擇存儲(chǔ)位置”“其他進(jìn)程之間的存儲(chǔ)空間不互相影響”使得每個(gè)進(jìn)程都按需獲得所需存儲(chǔ)資源地址翻譯

地址映射函數(shù)將私有地址映射到物理地址每一次加載或存儲(chǔ)都會(huì)進(jìn)行上述映射

上述映射即為虛擬存儲(chǔ)器的核心,程序?qū)嶋H引用的是虛存地址虛存抽象程序?qū)嶋H引用的是虛存地址movl(%ecx),%eax概念上是很大的字節(jié)數(shù)組每個(gè)字節(jié)有自己的地址以多種類型的存儲(chǔ)層次共同實(shí)現(xiàn)系統(tǒng)為“進(jìn)程”提供私有的地址空間虛存抽象分配:編譯器和運(yùn)行時(shí)系統(tǒng)不同的程序保存在何處?在單一虛擬地址空間如何進(jìn)行分配?為什么要使用虛存?為什么不直接使用物理內(nèi)存?使用物理地址例如電梯、現(xiàn)代家電、顯示屏等“簡單”系統(tǒng)中的嵌入式微控制器0:1:M-1:MainmemoryCPU2:3:4:5:6:7:Physicaladdress(PA)Dataword8:...4使用虛擬地址例如:現(xiàn)代服務(wù)器、桌上電腦、筆記本電腦……

0:1:M-1:MainmemoryMMU2:3:4:5:6:7:Physicaladdress(PA)Dataword8:...CPUVirtualaddress(VA)CPUChip44100地址空間線性地址空間:連續(xù)的非負(fù)整數(shù)地址空間

{0,1,2,3…}虛擬地址空間:N=2n

虛擬地址

{0,1,2,3,…,N-1}物理地址空間:M=2m

物理地址

{0,1,2,3,…,M-1}明確區(qū)分?jǐn)?shù)據(jù)data(字節(jié))及其屬性(地址)每個(gè)對(duì)象有多重地址內(nèi)存的每個(gè)字節(jié)具有:

一個(gè)物理地址,一個(gè)或多個(gè)虛擬地址虛存功能

高效使用主存簡化內(nèi)存管理隔離地址空間43512簡單內(nèi)存系統(tǒng)示例地址翻譯目標(biāo)問題地址空間存儲(chǔ)映射緩存內(nèi)存管理內(nèi)存保護(hù)虛存解決了什么問題本講學(xué)習(xí)內(nèi)容虛存作為緩存工具虛擬內(nèi)存是存儲(chǔ)在硬盤上的N個(gè)連續(xù)字節(jié)的數(shù)組硬盤上的內(nèi)容緩存在物理內(nèi)存(DRAM緩存)中這些緩存塊稱為頁面(大小為P=2p字節(jié))PP2m-p-1PhysicalmemoryEmptyEmptyUncachedVP0VP1VP2n-p-1VirtualmemoryUnallocatedCachedUncachedUnallocatedCachedUncachedPP0PP1EmptyCached0N-1M-10Virtualpages(VPs)storedondiskPhysicalpages(PPs)cachedinDRAMDRAM緩存組織結(jié)構(gòu)DRAM緩存的組織結(jié)構(gòu)源于未命中引起的巨大代價(jià)DRAM比SRAM慢大約10倍DRAM比硬盤(NAND為例)快大約1,000倍結(jié)論大頁面:通常為4-8KB,甚至達(dá)4MB全相聯(lián)任何虛存頁VP都可以放在任何物理頁P(yáng)P中需要“大”映射功能-與CPU緩存不同高度復(fù)雜,昂貴的替換算法更為復(fù)雜精密,超出本課程的討論范疇回寫而非直寫頁表將虛擬頁面映射到物理頁面的頁表?xiàng)l目(PTE)的數(shù)組保存于DRAM中的是每一個(gè)進(jìn)程的核心數(shù)據(jù)結(jié)構(gòu)nullnullMemoryresidentpagetable(DRAM)Physicalmemory(DRAM)VP7VP4Virtualmemory(disk)Valid01010101PhysicalpagenumberordiskaddressPTE0PTE7PP0VP2VP1PP3VP1VP2VP4VP6VP7VP3頁命中Pagehit:引用的VM字就在物理主存中(DRAM緩存命中)nullnullMemoryresidentpagetable(DRAM)Physicalmemory(DRAM)VP7VP4Virtualmemory(disk)Valid01010101PhysicalpagenumberordiskaddressPTE0PTE7PP0VP2VP1PP3VP1VP2VP4VP6VP7VP3Virtualaddress頁不命中Pagefault:引用的VM字不在物理存儲(chǔ)器中(DRAM緩存不命中)nullnullMemoryresidentpagetable(DRAM)Physicalmemory(DRAM)VP7VP4Virtualmemory(disk)Valid01010101PhysicalpagenumberordiskaddressPTE0PTE7PP0VP2VP1PP3VP1VP2VP4VP6VP7VP3Virtualaddress頁故障的處理頁不命中引發(fā)頁故障(一種異常)nullnullMemoryresidentpagetable(DRAM)Physicalmemory(DRAM)VP7VP4Virtualmemory(disk)Valid01010101PhysicalpagenumberordiskaddressPTE0PTE7PP0VP2VP1PP3VP1VP2VP4VP6VP7VP3Virtualaddress頁故障的處理頁不命中導(dǎo)致頁故障頁故障處理程序選擇一個(gè)victim頁被換出(如下圖中的VP4)nullnullMemoryresidentpagetable(DRAM)Physicalmemory(DRAM)VP7VP3Virtualmemory(disk)Valid01100101PhysicalpagenumberordiskaddressPTE0PTE7PP0VP2VP1PP3VP1VP2VP4VP6VP7VP3Virtualaddress頁故障的處理頁不命中導(dǎo)致頁故障頁故障處理程序選擇一個(gè)victim頁被換出(如下圖中的VP4)被中斷的指令重新執(zhí)行:頁命中nullnullMemoryresidentpagetable(DRAM)Physicalmemory(DRAM)VP7VP3Virtualmemory(disk)Valid01100101PhysicalpagenumberordiskaddressPTE0PTE7PP0VP2VP1PP3VP1VP2VP4VP6VP7VP3Virtualaddress局部性,虛存才能工作具有良好時(shí)間局部性的程序有較小的工作集程序傾向于訪問稱之為工作集的一組活躍虛頁在強(qiáng)制不命中后,展示良好性能If(工作集size<主存空間size)抖動(dòng):頁被不斷換進(jìn)換出,性能極差

If(SUM(工作集sizes)>主存空間size)01020304局部性頁故障“頁故障”何時(shí)發(fā)現(xiàn)?如何發(fā)現(xiàn)?執(zhí)行每條指令都要訪存(取指令、取操作數(shù)、存結(jié)果)(在保護(hù)模式下)每次訪存都要進(jìn)行邏輯地址向物理地址轉(zhuǎn)換在地址轉(zhuǎn)換過程中會(huì)發(fā)現(xiàn)是否發(fā)生了“頁故障”?邏輯地址向物理地址的轉(zhuǎn)換由硬件(MMU)實(shí)現(xiàn),故“頁故障”事件由硬件發(fā)現(xiàn)所有異常和中斷事件都由硬件檢測發(fā)現(xiàn)!異常中的“頁故障”以下幾種情況都會(huì)發(fā)生“頁故障”缺頁:頁表項(xiàng)有效位為0地址越界:地址大于最大界限訪問越級(jí)或越權(quán)(保護(hù)違例):越級(jí):用戶進(jìn)程訪問內(nèi)核數(shù)據(jù)(CPL=3/DPL=0)越權(quán):讀寫權(quán)限不相符(如對(duì)只讀段進(jìn)行了寫操作)可通過讀硬盤恢復(fù)故障不可恢復(fù),稱為“段故障(segmentationfault)”

假設(shè)在IA-32/linux系統(tǒng)中一個(gè)C語言源程序P如下所示:1 inta[1000];2 intx;3 intmain(void){4 a[10]=1;5 a[1000]=3;6 a[10000]=4;}已知頁大小為4KB,若在運(yùn)行P對(duì)應(yīng)的進(jìn)程時(shí),系統(tǒng)中無其他進(jìn)程在運(yùn)行,則:(1)對(duì)于上述三條指令的執(zhí)行,在取指令時(shí)是否可能發(fā)生頁故障?(2)在數(shù)據(jù)訪問時(shí)分別會(huì)發(fā)生什么問題?(3)哪些問題是可恢復(fù)的?哪些問題是不可恢復(fù)的?看一個(gè)例子假設(shè)編譯、匯編和鏈接后,第4、5和6行源代碼對(duì)應(yīng)的指令序列如下:48048300:c7052890040801000000movl$0x1,0x804902858048309:c705a09f040803000000movl$0x3,0x8049fa068048313:c705402c050804000000movl$0x4,0x8052c40假設(shè)在IA-32/linux系統(tǒng)中一個(gè)C語言源程序P如下所示:1 inta[1000];2 intx;3 intmain(void){4 a[10]=1;5 a[1000]=3;6 a[10000]=4;}已知頁大小為4KB,若在運(yùn)行P對(duì)應(yīng)的進(jìn)程時(shí),系統(tǒng)中無其他進(jìn)程在運(yùn)行,則:(1)對(duì)于上述三條指令的執(zhí)行,在取指令時(shí)是否可能發(fā)生頁故障?(2)在數(shù)據(jù)訪問時(shí)分別會(huì)發(fā)生什么問題?(3)哪些問題是可恢復(fù)的?哪些問題是不可恢復(fù)的?看一個(gè)例子假設(shè)編譯、匯編和鏈接后,第4、5和6行源代碼對(duì)應(yīng)的指令序列如下:48048300:c7052890040801000000movl$0x1,0x804902858048309:c705a09f040803000000movl$0x3,0x8049fa068048313:c705402c050804000000movl$0x4,0x8052c40正常的控制流為…、0x8048300、0x8048309、0x8048313、…可能的異??刂屏魇鞘裁??假設(shè)在IA-32/linux系統(tǒng)中一個(gè)C語言源程序P如下:1 inta[1000];2 intx;3 intmain(void){4 a[10]=1;5 a[1000]=3;6 a[10000]=4;}已知頁大小為4KB,若在運(yùn)行程序P

對(duì)應(yīng)的進(jìn)程時(shí),系統(tǒng)中無其他進(jìn)程在運(yùn)行,則:(1)對(duì)于上述三條指令的執(zhí)行,在取指令時(shí)是否可能發(fā)生頁故障?(2)在數(shù)據(jù)訪問時(shí)分別會(huì)發(fā)生什么問題?(3)哪些問題是可恢復(fù)的?哪些問題是不可恢復(fù)的?一個(gè)例子假設(shè)編譯、匯編和鏈接后,第4、5和6行源代碼對(duì)應(yīng)的指令序列如下:8048300:c7052890040801000000movl$0x1,0x80490288048309:c705a09f040803000000movl$0x3,0x8049fa08048313:c705402c050804000000movl$0x4,0x8052c40假設(shè)在IA-32/linux系統(tǒng)中一個(gè)C語言源程序P如下:1 inta[1000];2 intx;3 intmain(void){4 a[10]=1;5 a[1000]=3;6 a[10000]=4;}已知頁大小為4KB,若在運(yùn)行P對(duì)應(yīng)的進(jìn)程時(shí),系統(tǒng)中無其他進(jìn)程在運(yùn)行,則:(1)對(duì)于上述三條指令的執(zhí)行,在取指令時(shí)是否可能發(fā)生頁故障?(2)在數(shù)據(jù)訪問時(shí)分別會(huì)發(fā)生什么問題?(3)哪些問題是可恢復(fù)的?哪些問題是不可恢復(fù)的?一個(gè)例子假設(shè)編譯、匯編和鏈接后,第4、5和6行源代碼對(duì)應(yīng)的指令序列如下:8048300:c7052890040801000000movl$0x1,0x80490288048309:c705a09f040803000000movl$0x3,0x8049fa08048313:c705402c050804000000movl$0x4,0x8052c40三條指令在讀指令時(shí)都不會(huì)發(fā)生缺頁,Why?它們都位于起始地址為0x8048000(即一個(gè)4KB頁面的起始位置)的同一個(gè)頁面,執(zhí)行這三條指令之前,該頁已經(jīng)調(diào)入內(nèi)存。因?yàn)闆]有其他進(jìn)程在系統(tǒng)中運(yùn)行,所以不會(huì)因?yàn)閳?zhí)行其他進(jìn)程而使得調(diào)入主存的頁面被調(diào)出到磁盤。因而都不會(huì)在取指令時(shí)發(fā)生頁故障。

假設(shè)在IA-32/linux系統(tǒng)中一個(gè)C語言源程序P如下:1 inta[1000];2 intx;3 intmain(void){4 a[10]=1;5 a[1000]=3;6 a[10000]=4;}已知頁大小為4KB,若在運(yùn)行P對(duì)應(yīng)的進(jìn)程時(shí),系統(tǒng)中無其他進(jìn)程在運(yùn)行,則:(1)對(duì)于上述三條指令的執(zhí)行,在取指令時(shí)是否可能發(fā)生頁故障?(2)在數(shù)據(jù)訪問時(shí)分別會(huì)發(fā)生什么問題?(3)哪些問題是可恢復(fù)的?哪些問題是不可恢復(fù)的?一個(gè)例子假設(shè)編譯、匯編和鏈接后,第4、5和6行源代碼對(duì)應(yīng)的指令序列如下:8048300:c7052890040801000000movl$0x1,0x80490288048309:c705a09f040803000000movl$0x3,0x8049fa068048313:c705402c050804000000movl$0x4,0x8052c40假設(shè)在IA-32/linux系統(tǒng)中一個(gè)C語言源程序P如下:1 inta[1000];2 intx;3 intmain(void){4 a[10]=1;5 a[1000]=3;6 a[10000]=4;}已知頁大小為4KB,若在運(yùn)行P對(duì)應(yīng)的進(jìn)程時(shí),系統(tǒng)中無其他進(jìn)程在運(yùn)行,則:(1)對(duì)于上述三條指令的執(zhí)行,在取指令時(shí)是否可能發(fā)生頁故障?(2)在數(shù)據(jù)訪問時(shí)分別會(huì)發(fā)生什么問題?(3)哪些問題是可恢復(fù)的?哪些問題是不可恢復(fù)的?一個(gè)例子假設(shè)編譯、匯編和鏈接后,第4、5和6行源代碼對(duì)應(yīng)的指令序列如下:8048300:c7052890040801000000movl$0x1,0x80490288048309:c705a09f040803000000movl$0x3,0x8049fa068048313:c705402c050804000000movl$0x4,0x8052c40第4行指令取數(shù)據(jù)時(shí)是否發(fā)生頁故障,Why?對(duì)a[10](地址0x8049028)的訪問是對(duì)所在頁面(首址為0x08049000)的第一次訪問,故不在主存,缺頁處理結(jié)束后,再回到這條movl指令重新執(zhí)行,再訪問數(shù)據(jù)就沒有問題了。假設(shè)在IA-32/linux系統(tǒng)中一個(gè)C語言源程序P如下:1 inta[1000];2 intx;3 intmain(void){4 a[10]=1;5 a[1000]=3;6 a[10000]=4;}已知頁大小為4KB,若在運(yùn)行P對(duì)應(yīng)的進(jìn)程時(shí),系統(tǒng)中無其他進(jìn)程在運(yùn)行,則:(1)對(duì)于上述三條指令的執(zhí)行,在取指令時(shí)是否可能發(fā)生頁故障?(2)在數(shù)據(jù)訪問時(shí)分別會(huì)發(fā)生什么問題?(3)哪些問題是可恢復(fù)的?哪些問題是不可恢復(fù)的?一個(gè)例子假設(shè)編譯、匯編和鏈接后,第4、5和6行源代碼對(duì)應(yīng)的指令序列如下:48048300:c7052890040801000000movl$0x1,0x804902858048309:c705a09f040803000000movl$0x3,0x8049fa068048313:c705402c050804000000movl$0x4,0x8052c40第5行指令取數(shù)據(jù)時(shí)是否發(fā)生頁故障,Why?對(duì)a[1000](地址0x8049fa0)的訪問是對(duì)所在頁面(首址為0x08049000)的第2次訪問,故在主存,不會(huì)發(fā)生缺頁。但a[1000]實(shí)際不存在,只不過編譯器未檢查數(shù)組邊界,0x8049fa0處可能是x的地址,故該指令執(zhí)行結(jié)果是x被賦值為3假設(shè)在IA-32/linux系統(tǒng)中一個(gè)C語言源程序P如下:1 inta[1000];2 intx;3 intmain(void){4 a[10]=1;5 a[1000]=3;6 a[10000]=4;}已知頁大小為4KB,若在運(yùn)行P對(duì)應(yīng)的進(jìn)程時(shí),系統(tǒng)中無其他進(jìn)程在運(yùn)行,則:(1)對(duì)于上述三條指令的執(zhí)行,在取指令時(shí)是否可能發(fā)生頁故障?(2)在數(shù)據(jù)訪問時(shí)分別會(huì)發(fā)生什么問題?(3)哪些問題是可恢復(fù)的?哪些問題是不可恢復(fù)的?一個(gè)例子假設(shè)編譯、匯編和鏈接后,第4、5和6行源代碼對(duì)應(yīng)的指令序列如下:48048300:c7052890040801000000movl$0x1,0x804902858048309:c705a09f040803000000movl$0x3,0x8049fa068048313:c705402c050804000000movl$0x4,0x8052c40第6行指令取數(shù)據(jù)時(shí)是否發(fā)生頁故障,Why?地址0x8052c40偏離數(shù)組首址0x8049000

(0x9C40即40,000)已達(dá)4×10000

+4=40004個(gè)單元,即偏離了9個(gè)頁面,很可能超出“讀/寫段“范圍,故執(zhí)行該指令時(shí)可能會(huì)發(fā)生保護(hù)違例。頁故障處理程序發(fā)送一個(gè)“段錯(cuò)誤”信號(hào)(SIGSEGV)給用戶進(jìn)程,用戶進(jìn)程接受到該信號(hào)后就調(diào)出一個(gè)信號(hào)處理程序執(zhí)行,該信號(hào)處理程序根據(jù)信號(hào)類型,在屏幕上顯示“段故障(segmentationfault)”信息,并終止用戶進(jìn)程。43512簡單內(nèi)存系統(tǒng)示例地址翻譯目標(biāo)問題地址空間存儲(chǔ)映射緩存內(nèi)存管理內(nèi)存保護(hù)虛存解決了什么問題本講學(xué)習(xí)內(nèi)容虛存作為內(nèi)存管理工具Keyidea

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論