第11講windows內(nèi)存管理基礎(chǔ)_第1頁
第11講windows內(nèi)存管理基礎(chǔ)_第2頁
第11講windows內(nèi)存管理基礎(chǔ)_第3頁
第11講windows內(nèi)存管理基礎(chǔ)_第4頁
第11講windows內(nèi)存管理基礎(chǔ)_第5頁
已閱讀5頁,還剩39頁未讀 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡介

中科研CASoft軟件工程師培訓(xùn)講義Game

Master游戲修改工具第11講Windows內(nèi)存管理基礎(chǔ)(1)中科天地軟件人才培訓(xùn)中心Created

by本講重點(diǎn)提要¤

本講和下一講“Windows內(nèi)存管理基礎(chǔ)

(2)”將對Windows內(nèi)存管理的基本原理做簡單的介紹,此外,本講還對Windows操作系統(tǒng)的基礎(chǔ)組成做了簡單說明。本

講中沒有對相關(guān)的具體編程技術(shù)做講解,但本講的內(nèi)容對于今后編程中(包括內(nèi)

核編程)可能遇到的問題會有很大的幫

助。目錄¤

操作系統(tǒng)的基礎(chǔ)組成¤

Windows內(nèi)存管理概述¤

Win32進(jìn)程空間劃分¤

保留和提交虛擬內(nèi)存¤

共享內(nèi)存和映射文件¤

保護(hù)內(nèi)存¤

寫時復(fù)制操作系統(tǒng)的基礎(chǔ)組成¤

操作系統(tǒng)的基礎(chǔ)組成下圖顯示了WindowsNT操作系統(tǒng)的基礎(chǔ)組成。從圖中可以看到,Window的基礎(chǔ)組成為3個主要的內(nèi)核模式模塊:硬件抽象層、內(nèi)核、和NT

Executive。內(nèi)核內(nèi)核硬件抽象層(HAL)硬件抽象層(HAL)硬件平臺硬件平臺NTExecutiveNTExecutive操作系統(tǒng)的基礎(chǔ)組成1.

硬件抽象層(HAL,Hardware

AbstractLayer)HAL是一薄層軟件,用不是CPU自身部分的任何硬件的抽象模型代表系統(tǒng)的其余部分。HAL顯露一組很好定義的HalXxx函數(shù),用來管理I/O總線、設(shè)備寄存器、中斷控制器、DMA控制器等,各種系統(tǒng)組件使用HAL函數(shù)與CPU外的硬件打交道,這樣就把平臺特定的細(xì)節(jié)對系統(tǒng)的其余部分隱藏起來,消除了對不同系統(tǒng)廠商有不同版本操作系統(tǒng)的要求,特別是使用HAL例程,使內(nèi)核和設(shè)備驅(qū)動程序在有相同

CPU體系結(jié)構(gòu)的平臺上二進(jìn)制代碼兼容。操作系統(tǒng)的基礎(chǔ)組成內(nèi)核HAL是硬件平臺的抽象化,而內(nèi)核則代表

CPU自身的理想化視圖,內(nèi)核提供管理以下功能的機(jī)制:中斷和異常處理線程調(diào)度和同步多處理器同步定時控制通過使用這些內(nèi)核服務(wù),操作系統(tǒng)的高層可以忽略底層CPU的體系結(jié)構(gòu),這就使得驅(qū)動程序和高層操作系統(tǒng)組件有可能在不同的

CPU體系結(jié)構(gòu)間進(jìn)行代碼移植。操作系統(tǒng)的基礎(chǔ)組成這就意味著把Windows移植到新的CPU的大部分工作是重新寫內(nèi)核程序,為了使這個過程更容易些,Microsoft采用了微內(nèi)核方法,試圖使內(nèi)核盡可能的小。內(nèi)核代表對其客戶的一個基于對象的界面,當(dāng)操作系統(tǒng)的其它部分需要內(nèi)核幫助的時候,它們通過創(chuàng)建和操作各種對象的函數(shù)來請求它的服務(wù),內(nèi)核對象分成調(diào)度者對象和控制對象兩大類。3.

ExecutiveExecutive是Windows中最大和最復(fù)雜的內(nèi)核

模式部分。Executive由幾個不同的軟件組成,為用戶模式進(jìn)程及它們之間提供服務(wù)。操作系統(tǒng)的基礎(chǔ)組成如下圖所示,這些組件是完全獨(dú)立的,只通過很好定義的接口進(jìn)行通信。下面我們對各個模塊做簡單的介紹。系統(tǒng)服務(wù)接口系統(tǒng)服務(wù)接口對象管理器對象管理器配置管理器配置管理器進(jìn)程管理器進(jìn)程管理器安全監(jiān)視器安全監(jiān)視器虛擬空間管理器虛擬空間

管理器局部過程調(diào)用局部

過程調(diào)用I/O管理器I/O管理器操作系統(tǒng)的基礎(chǔ)組成對象管理器:Executive通過一個基于對象的接口給用戶模式進(jìn)程提供服務(wù),對象管理器執(zhí)行管理

Executive對象的所有工作,包括創(chuàng)建和刪除對象、維護(hù)全局對象名字空間等。配置管理器:配置管理器利用注冊表來管理在機(jī)器上安裝的所有硬件和軟件的模型。進(jìn)程管理器:進(jìn)程管理器處理進(jìn)程和線程的創(chuàng)建、管理和刪除,它還為同步線程的活動提供一組標(biāo)準(zhǔn)的服務(wù)。安全性引用監(jiān)視器:內(nèi)核模式和用戶模式組件使用它來驗(yàn)證對對象的訪問,檢查用戶特權(quán)和生成審查消息。操作系統(tǒng)的基礎(chǔ)組成虛擬內(nèi)存管理器:每個Win32進(jìn)程都擁有4GB的虛地址空間,虛擬內(nèi)存管理器使用按需求分頁的虛擬內(nèi)存管理技術(shù)來維護(hù)這個巨大的地址空間。局部過程調(diào)用:局部過程調(diào)用(LPC)機(jī)制是一個

消息傳遞機(jī)制用于在同一臺機(jī)器上的進(jìn)程之間通信。

LPC和RPC是一個復(fù)雜的主題,這里不作進(jìn)一步的介紹,更詳細(xì)的內(nèi)容請參閱MSDN文檔“WindowsClustering”一節(jié)。I/O管理器:I/O管理器將用戶模式線程轉(zhuǎn)換成對各種設(shè)備驅(qū)動程序的合理順序的調(diào)用。我們在這里多次提到了“用戶模式”和“內(nèi)核模式”,理解這兩個概念,有必要了解一下Windows中的硬件特權(quán)級。操作系統(tǒng)的基礎(chǔ)組成¤

Windows中的硬件特權(quán)級在多任務(wù)環(huán)境中,欺騙內(nèi)存管理硬件或停止處理器就是引起嚴(yán)重問題的動作的兩個例子。

Windows不依賴于應(yīng)用程序自己的行為,而是利用硬件強(qiáng)制的特權(quán)檢查機(jī)制來保證系統(tǒng)的完整性。為了避免硬件的依賴性,Windows用一個簡化的模型描述硬件特權(quán)級,然后這個模型映射到指定CPU上可用的特權(quán)檢查機(jī)制。如果

CPU要支持Windows特權(quán)模型,它必須能夠以兩種模式運(yùn)行,即內(nèi)核模式和用戶模式。操作系統(tǒng)的基礎(chǔ)組成¤內(nèi)核模式(KernelMode),當(dāng)CPU運(yùn)行于內(nèi)核模式時,一切都可以運(yùn)行。任務(wù)可以執(zhí)行特權(quán)級指令,對任何

I/O設(shè)備有全部的訪問權(quán),還能夠訪問任何需地址和控

制虛擬內(nèi)存硬件,這種模式對應(yīng)于Intel

80x86的0級環(huán)

(ring

0)。¤

用戶模式(User

Mode),在用戶模式中,硬件防止特權(quán)指令的執(zhí)行,并進(jìn)行內(nèi)存和I/O空間的引用的檢查。這就允許操作系統(tǒng)限制任務(wù)對各種I/O操作的訪問,并

捕捉違反系統(tǒng)完整性的任何行為。在用戶模式中,運(yùn)

行的代碼的如果不通過操作系統(tǒng)中的某種門機(jī)制(Call

Gate),就不能進(jìn)入內(nèi)核模式。在Intel

80x86處理器上,這個模式對應(yīng)于3級環(huán)(ring

3)。操作系統(tǒng)的基礎(chǔ)組成¤

用戶模式和內(nèi)核模式程序的區(qū)別:使用的函數(shù)庫不同,編譯環(huán)境不同。地址空間不同。Win32進(jìn)程有屬于自己的進(jìn)程空間,內(nèi)核模式驅(qū)動屬于同一個地址空間,由此也帶來驅(qū)動間通信的不同機(jī)制。線程的執(zhí)行上下文環(huán)境不同,Win32線程屬于某一個特定進(jìn)程空間,內(nèi)核線程可以屬于任意的當(dāng)前執(zhí)行進(jìn)程空間(這里的進(jìn)程指User

Mode進(jìn)程)。特殊的系統(tǒng)線程,系統(tǒng)線程不屬于任何一個UserMode進(jìn)程。它只能在內(nèi)核模式中運(yùn)行,沒有用戶模式的上下文環(huán)境,也不能訪問用戶地址空間。Windows內(nèi)存管理概述¤

內(nèi)存管理器提供的服務(wù)內(nèi)存管理器為環(huán)境子系統(tǒng)提供了一組系統(tǒng)服務(wù)來執(zhí)行以下任務(wù):分配和釋放虛擬內(nèi)存在進(jìn)程間共享內(nèi)存映射文件到內(nèi)存刷新虛擬頁面到內(nèi)存恢復(fù)關(guān)于虛擬頁面范圍的信息更改頁面的保護(hù)屬性和把它們鎖入內(nèi)存Windows內(nèi)存管理概述¤

像其它的Windows

NT執(zhí)行體服務(wù)一樣,內(nèi)存管理器允許它們的調(diào)用程序提供進(jìn)程句柄,以指示其虛擬內(nèi)存將被操作的特殊進(jìn)程。¤

這樣,調(diào)用程序就可以操作它自己的內(nèi)存,或憑借適當(dāng)?shù)臋?quán)限操作另一個進(jìn)程的內(nèi)存。例如:一個進(jìn)程可以創(chuàng)建另一個進(jìn)程,并給自己操作子進(jìn)程的虛擬內(nèi)存的權(quán)力。Windows內(nèi)存管理概述¤

Win32

API有三組函數(shù)用于管理應(yīng)用程序的內(nèi)存:以頁為單位的虛擬內(nèi)存函數(shù):VirtualXxx內(nèi)存映射文件函數(shù):CreateFileMapping、MapViewOfFile。堆棧函數(shù):HeapXxx以及早期的LocalXxx和GlobalXxx。Windows內(nèi)存管理概述¤

內(nèi)存管理器也為設(shè)備驅(qū)動程序提供了許多服務(wù),例如分配和釋放物理內(nèi)存以及為了直接存儲器存?。―MA)傳送而鎖定物理內(nèi)存頁面。這些函數(shù)以前綴Mm開頭?!?/p>

另外,盡管不是嚴(yán)格的內(nèi)存管理器的一

部分,但以Ex開頭的執(zhí)行體支持例程被用于從系統(tǒng)堆(頁交換區(qū)和非頁交換區(qū))分配和釋放內(nèi)存。Win32進(jìn)程空間劃分¤

Windows

9x和Windows

NT/2k/xp平臺,

Win32進(jìn)程空間劃分情況不同,以下兩圖分別顯示了Windows

95和WindowsNT的進(jìn)程空間情況。Windows

95的進(jìn)程空間劃分0x00000fff↑0x000000000x7fffffff↑0x004000000xbfffffff↑0x800000000xffffffff↑0xc00000004096字節(jié),ms-dos和16位windows用于NULL指針分配(不可訪問)2,143,289,344字節(jié),屬于Win32進(jìn)程私有(非保留,可使用)1GB空間,用于內(nèi)存映射文件,共享Win32DLL,16位應(yīng)用和內(nèi)存分配,所有Win32進(jìn)程共享(可以使用,可讀寫)1GB空間,用于VxD,內(nèi)存管理器和文件系統(tǒng)碼,所有Win32進(jìn)程共享(可讀寫,但不要動)0x003fffff↑0x000010004190208字節(jié),ms-dos和16位windows(可讀寫,但不要動)Windows

NT的進(jìn)程空間劃分0x0000ffff↑0x000000000x7ffeffff↑0x000100000x7fffffff↑0x7fff00000xffffffff↑0x8000000064KB區(qū)域,用于NULL指針分配(不可訪問)2,147,352,576字節(jié),屬于Win32進(jìn)程私有(非保留,可使用)64KB區(qū)域,用于環(huán)指針分配(不可訪問)2GB區(qū)域,用于操作系統(tǒng)(不可訪問)進(jìn)程空間劃分的比較¤

通過以上兩圖的比較,很容易看出,不同于

Windows95,在WindowsNT中,操作系統(tǒng)部件是完全受到保護(hù)的。因此WindowNT以及后續(xù)版本,相對于Window95,系統(tǒng)穩(wěn)定性有了更好的保障?!?/p>

每個Win32進(jìn)程都擁有以上兩圖所示的4GB的地址空間,但這僅僅是“虛地址空間”,并不是真正的物理存儲。要使用一塊地址空間,必須進(jìn)行“保留”和“提交物理存儲”。即分配物理存儲,并將其映射到進(jìn)程的地址空間中。保留和提交虛擬內(nèi)存¤

Windows提供了一個可選擇的兩階段方法來分配內(nèi)存:應(yīng)用程序可以首先保留(Reserve)地址空間,然后提交(Commit)在那個地址空間中的存儲器?;蛘咚鼈兛梢栽谕粋€函數(shù)調(diào)用中保留和提交物理存儲?!?/p>

這些服務(wù)通過Win32的VirtualAlloc和VirtualAllocEx函數(shù)提供。保留和提交虛擬內(nèi)存¤

保留內(nèi)存是一種簡單的方法,線程保留虛擬地址空間的一個范圍以供將來使用。¤

如果保留了地址空間,但沒有提交存儲的話,訪問該范圍內(nèi)的地址將導(dǎo)致一個訪問侵犯,因?yàn)樵谠搩?nèi)存之后沒有提交的存儲器來包含或存儲數(shù)據(jù)?!?/p>

相反,提交的內(nèi)存是內(nèi)存管理器使用的對應(yīng)于磁盤存儲器的內(nèi)存,叫做“后備存儲器(backing

store)”。訪問提交的內(nèi)存將導(dǎo)致頁面被帶入物理內(nèi)存(如果頁面此時不在內(nèi)存中的話)。保留和提交虛擬內(nèi)存¤

分兩步保留和提交內(nèi)存能夠通過在需要提交存儲器之前推遲提交來減少頁面文件的使用。保留內(nèi)存是一種既快又便宜的操作,因?yàn)樗幌娜魏雾撁嫖募臻g或進(jìn)程頁面文件配額。¤

保留,然后提交內(nèi)存,這對于需要潛在、大量和連續(xù)的內(nèi)存緩沖區(qū)的應(yīng)用程序非常有用。在操作系統(tǒng)中,這項(xiàng)技術(shù)被用于每個線程的用戶態(tài)堆棧。當(dāng)創(chuàng)建線程時,就保留一個堆棧(默認(rèn)為1M字節(jié))。并且只提交兩個頁面:一個用于初始頁面,另一個作為保護(hù)頁來捕獲對超過堆棧提交部分末端的引用并自動擴(kuò)展堆棧。保留和提交虛擬內(nèi)存¤

Windows以系統(tǒng)分配間隔尺寸值所定義的整數(shù)邊界為開始地址排列每個保留的進(jìn)程地址空間區(qū)域,系統(tǒng)分配間隔尺寸值可以由Win32函數(shù)

GetSystemInfo獲取。目前,這個值在所有系統(tǒng)中都是64KB?!?/p>

當(dāng)保留一個地址空間區(qū)域時,Windows會確保該區(qū)域的尺寸是系統(tǒng)頁面尺寸的倍數(shù),無論系統(tǒng)頁面尺寸有多大。¤

例如:由于x86系統(tǒng)使用4KB的頁面,如果試圖保留18KB大小的區(qū)域,在x86系統(tǒng)上實(shí)際保留的數(shù)量將是20KB。共享內(nèi)存和映射文件¤

Windows提供了在進(jìn)程和操作系統(tǒng)之間共享內(nèi)存的機(jī)制。共享內(nèi)存(sharedmemory)可以定義為對一個以上的進(jìn)程可見的內(nèi)存或者表示為多于一個的虛擬地址空間?!?/p>

比如,兩個進(jìn)程使用同一個DLL的情況下,DLL只需被裝入內(nèi)存一次,然后在所有使用到該DLL的進(jìn)程之間共享代碼頁就可以了,如下圖所示:共享內(nèi)存和映射文件共享內(nèi)存和映射文件¤

在內(nèi)存管理器中用于執(zhí)行共享內(nèi)存的基元叫作

“區(qū)域?qū)ο螅╯ection

objects)”。在Win32API中,它們被稱作“文件映射對象”?!?/p>

區(qū)域?qū)ο笤趦?nèi)存管理器中被用來把虛擬地址映射到磁盤頁面上,不管它是在頁面文件中還是在應(yīng)用程序想要訪問的其它文件中,都好像是在內(nèi)存中一樣?!?/p>

區(qū)域?qū)ο罂梢员贿B接到在磁盤上已經(jīng)打開的文件(稱為映射文件)或一串頁面調(diào)度文件(以提供共享內(nèi)存)上。共享內(nèi)存和映射文件¤

創(chuàng)建區(qū)域?qū)ο?,使用Win32的CreateFileMapping函數(shù)。設(shè)備驅(qū)動程序可以使用ZwOpenSection、ZwMapViewOfSection和ZwUnmapViewOfSection函數(shù)操作區(qū)域?qū)ο??!?/p>

Windows區(qū)域?qū)ο罂梢砸帽冗M(jìn)程地址空間能夠容納的文件大得多的文件。這樣,要訪問區(qū)域?qū)ο?,進(jìn)程就可以通過調(diào)用MapViewOfFile函數(shù)只映射它所需要的區(qū)域?qū)ο蟮囊徊糠郑ǚQ為區(qū)域的一個視口(View)),然后指定映射的范圍。映射視口允許進(jìn)程保留地址空間,因?yàn)樵谶@個時候只有區(qū)域?qū)ο笮枰囊暱诒仨毐挥成涞絻?nèi)存。共享內(nèi)存和映射文件¤

Win32應(yīng)用程序可以通過簡單地使映射文件出現(xiàn)在它們的地址空間來使用映射文件方便地執(zhí)行文件I/O。¤

但用戶態(tài)的應(yīng)用程序冰不是區(qū)域?qū)ο蟮?/p>

唯一用戶:映像加載程序使用區(qū)域?qū)ο?/p>

映射可執(zhí)行的映像、動態(tài)鏈接庫和設(shè)備

驅(qū)動程序到內(nèi)存中;高速緩存管理器使

用區(qū)域?qū)ο笤L問高速緩存文件中的數(shù)據(jù)。保護(hù)內(nèi)存¤

Windows為進(jìn)程和操作系統(tǒng)本身提供內(nèi)存保護(hù),這樣就沒有用戶進(jìn)程能夠在無意中損壞其它進(jìn)程或操作系統(tǒng)本身的地址空間?!?/p>

WindowsNT通過四種主要的方法提供這種保護(hù)。核心態(tài)和用戶態(tài)的區(qū)分進(jìn)程的獨(dú)立地址空間硬件控制形式的內(nèi)存保護(hù)訪問控制列表(ACL)保護(hù)內(nèi)存¤

首先,所有系統(tǒng)范圍內(nèi)的被系統(tǒng)核心態(tài)組件使用的數(shù)據(jù)結(jié)構(gòu)和內(nèi)存交換區(qū)只能在核心態(tài)下被訪問--用戶態(tài)線程不能夠訪問這些頁面。如果它們試圖這樣做,硬件將產(chǎn)生錯誤,內(nèi)存管理器會報告線程的訪問侵犯。說明:這種特性是Windows

NT區(qū)別于Windows

9x的一個方面,我們這里提到的Windows如非特指,

都是指Windows

NT或基于NT的Windows

2000系統(tǒng)。Windows9x在系統(tǒng)地址空間中有一些在用戶態(tài)下可寫的頁面,這樣就使錯誤的應(yīng)用程序能夠損壞關(guān)鍵的系統(tǒng)數(shù)據(jù)結(jié)構(gòu)并使系統(tǒng)崩潰。保護(hù)內(nèi)存¤

其次,每一個進(jìn)程擁有一個獨(dú)立的、專用的地址空間,禁止其它進(jìn)程的任何線程訪問(除非使用共享內(nèi)存)?!?/p>

每次線程引用一個地址,虛擬內(nèi)存硬件和Windows內(nèi)存管理器共同工作,干預(yù)并轉(zhuǎn)換虛擬地址到物理地址?!?/p>

通過控制虛擬地址如何轉(zhuǎn)換,Windows能夠確保在一個進(jìn)程內(nèi)運(yùn)行的線程不會錯誤地訪問屬于其它進(jìn)程的頁面。保護(hù)內(nèi)存¤

第三,除了提供虛擬內(nèi)存到物理地址轉(zhuǎn)換的隱含保護(hù),

WindowsNT支持的所有處理器都提供了某些形式的硬件控制的內(nèi)存保護(hù),如讀/寫、只讀等等,例如,在進(jìn)程地址空間內(nèi)的代碼頁面被標(biāo)記為只讀,這樣就禁止

了用戶線程對它們的修改。下圖列出了Win32

API定

義的內(nèi)存保護(hù)選項(xiàng)。保護(hù)內(nèi)存¤

最后,共享內(nèi)存區(qū)域?qū)ο缶哂袠?biāo)準(zhǔn)的WindowsNT訪問控制列表(ACL,Access

ControlList),當(dāng)進(jìn)程試圖打開共享內(nèi)存區(qū)域?qū)ο髸r會檢查ACL,這樣就把對共享內(nèi)存的訪問限制在那些有適當(dāng)權(quán)限的進(jìn)程之內(nèi)?!?/p>

當(dāng)線程創(chuàng)建一個區(qū)域來包含一個映射文件時,安全性就會起作用。要創(chuàng)建該區(qū)域,線程必須至少對此文件對象具有讀的訪問權(quán)限,否則該操作將失敗。保護(hù)內(nèi)存¤

一旦線程成功地為區(qū)域打開了句柄,它的行為仍將服從前面所講的內(nèi)存管理器和基于硬件的頁面保護(hù)。如果對頁面級保護(hù)的更改不違反區(qū)域?qū)ο笤贏CL中的權(quán)限,線程就可以在區(qū)域內(nèi)更改對虛擬頁面的頁面級保護(hù)?!?/p>

例如:內(nèi)存管理器允許線程把只讀區(qū)域的頁面改變?yōu)榫哂袑憰r復(fù)制訪問權(quán)限,但不能具有讀/寫訪問權(quán)限。允許寫時復(fù)制權(quán)限是因?yàn)樗挥绊懫渌M(jìn)程共享數(shù)據(jù)。范例:保護(hù)內(nèi)存¤

比如一個Windows的服務(wù)程序(Service)想通過創(chuàng)建一個Event對象和一個應(yīng)用程序通信,這時創(chuàng)建該對象時如果使用缺省的安全描述,應(yīng)用程序是無法訪問該對象的,比如應(yīng)用程序中調(diào)用SetEvent將無法成功。為了實(shí)現(xiàn)該目的,創(chuàng)建該對象時,就必須使用相關(guān)API函數(shù)修改安全描述?!?/p>

范例:Service與用戶態(tài)應(yīng)用程序通訊,通過內(nèi)存映射文件交換數(shù)據(jù)。寫時復(fù)制¤

寫時復(fù)制頁面保護(hù)是內(nèi)存管理器用來節(jié)約物理內(nèi)存的優(yōu)化技術(shù)。有時也稱作寫拷貝?!?/p>

寫時復(fù)制指的是,當(dāng)進(jìn)程映射包含讀/寫頁面的區(qū)域?qū)ο蟮膶憰r復(fù)制視口,而不是在映射視口的同時制作進(jìn)程專用副本時,內(nèi)存管理器延遲到頁面被修改之后才制作頁面的副本。寫時復(fù)制¤

當(dāng)進(jìn)程中的線程試圖寫具有寫時復(fù)制保護(hù)屬性的共享數(shù)據(jù)時,系統(tǒng)會介入進(jìn)行下列操作:系統(tǒng)從頁面文件中分配一頁物理存儲。系統(tǒng)從RAM中找到一頁空閑內(nèi)存。系統(tǒng)把共享數(shù)據(jù)塊中含有線程試圖寫的數(shù)據(jù)的那一頁拷貝到第2步中得到的內(nèi)存空閑頁中。系統(tǒng)把該頁的進(jìn)程虛擬內(nèi)存地址映射到RAM中的新頁。這幾步完成之后,進(jìn)程就能訪問它自己的私有數(shù)據(jù)了。注意:寫時復(fù)制屬性PAGE_WRITECOPY和PAGE_EXECUTE_WRITECOPY屬性是操作系統(tǒng)在映射EXE或DLL文件時使用的,因此,在使用VritualAlloc函數(shù)來保留地址空間或提交物

溫馨提示

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

評論

0/150

提交評論