版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、.:.;實驗9、Windows虛擬內(nèi)存1 背景知識在Windows環(huán)境下,4GB的虛擬地址空間被劃分成兩個部分:低端2GB提供應進程運用,高端2GB提供應系統(tǒng)運用。這意味著用戶的運用程序代碼,包括DLL以及進程運用的各種數(shù)據(jù)等,都裝在用戶進程地址空間內(nèi)(低端2GB)。用戶過程的虛擬地址空間也被分成三部分:1)虛擬內(nèi)存的已調配區(qū)(committed):具有備用的物理內(nèi)存,根據(jù)該區(qū)域設定的訪問權限,用戶可以進展寫、讀或在其中執(zhí)行程序等操作。2)虛擬內(nèi)存的保管區(qū)(reserved):沒有備用的物理內(nèi)存,但有一定的訪問權限o 3)虛擬內(nèi)存的自在區(qū)(free):不限定其用途,有相應的PAGE_NOACC
2、ESS權限。與虛擬內(nèi)存區(qū)相關的訪問權限告知系統(tǒng)進程可在內(nèi)存中進展何種類型的操作。例如,用戶不能在只需PAGE_READONLY權限的區(qū)域上進展寫操作或執(zhí)行程序;也不能在只需PAGE_EXECUTE權限的區(qū)域里進展讀、寫操作。而具有PAGE_NOACCESS權限的特殊區(qū)域,那么意味著不允許進程對其地址進展任何操作。在進程裝入之前,整個虛擬內(nèi)存的地址空間都被設置為只需PAGE_NOACCESS權限的自在區(qū)域。當系統(tǒng)裝入進程代碼和數(shù)據(jù)后,才將內(nèi)存地址的空間標志為已調配區(qū)或保管區(qū),并將諸如EXECUTE、READWRITE和READONLY的權限與這些區(qū)域相關聯(lián)。如表1所示,給出了MEMORY_BAS
3、IC_INFORMATION的構造,此數(shù)據(jù)描畫了進程虛擬內(nèi)存空間中一組虛擬內(nèi)存頁面的當前形狀,其中State項闡明這些區(qū)域能否為自在區(qū)、已調配區(qū)或保管區(qū);Protect項那么包含了Windows系統(tǒng)為這些區(qū)域添加了何種訪問維護;Type項那么闡明這些區(qū)域是可執(zhí)行圖像、內(nèi)存映射文件還是簡單的私有內(nèi)存。VirtualQueryEX()API能讓用戶在指定的進程中,對虛擬內(nèi)存地址的大小和屬性進展檢測。Windows還提供了一整套能運用戶準確控制運用程序的虛擬地址空間的虛擬內(nèi)存API。一些用于虛擬內(nèi)存操作及檢測的API如表2所示。表1 MEMORY_BASIC_INFORMATION構造的成員成員稱號
4、目 的PVOID BaseAddress虛擬內(nèi)存區(qū)域開場處的指針PVOID AllocationBase假設這個特定的區(qū)域為子分配區(qū)的話,那么為虛擬內(nèi)存外面區(qū)域的指針;否那么,此值與BaseAddress一樣DWORD AllocationProtect虛擬內(nèi)存最初分配區(qū)域的維護屬性。其能夠值包括:PAGE_NOACCESS,PAGE_READONLY,PAGE_READWRITE和PAGE_EXECUTE_READDWORD RegionSize 虛擬內(nèi)存區(qū)域的字節(jié)數(shù)DWORD State 區(qū)域的當前分配形狀。其能夠值為MEM_COMMIT,MEM_FREE和MEM_RESERVEDW()R
5、D Protect虛擬內(nèi)存當前區(qū)域的維護屬性。能夠值與AllocationProtect成員的一樣DWORD Type虛擬內(nèi)存區(qū)域中出現(xiàn)的頁面類型。能夠值為MEM_IMAGE,MEM_ MAPPED和MEM_PRIVATE表2 虛擬內(nèi)存的APIAPl稱號描 述VirtualQueryEx()經(jīng)過填充MEMORY_BASIC_INFORMATION構造檢測進程內(nèi)虛擬內(nèi)存的區(qū)域VirtuaAlloc()保管或調配進程的部分虛擬內(nèi)存,設置分配和維護標志VirtualFree()釋放或收回運用程序運用的部分虛擬地址VirtualProtect()改動虛擬內(nèi)存區(qū)域維護規(guī)范VirtualLock() 防止
6、系統(tǒng)將虛擬內(nèi)存區(qū)域經(jīng)過系統(tǒng)交換到頁面文件中VirtualUnlock()釋放虛擬內(nèi)存的鎖定區(qū)域,必要時,允許系統(tǒng)將其交換到頁面文件中 提供虛擬內(nèi)存分配功能的是VinualAlloc()API。該API支持用戶向系統(tǒng)要求新的虛擬內(nèi)存或改動已分配內(nèi)存的當前形狀。用戶假想象經(jīng)過VirtualAlloc()函數(shù)運用虛擬內(nèi)存,可以采用兩種方式通知系統(tǒng):1)簡單地將內(nèi)存內(nèi)容保管在地址空間內(nèi)。2)懇求系統(tǒng)前往帶有物理存儲區(qū)(RAM的空間或換頁文件)的部分地址空間。用戶可以用flAllocation Type參數(shù)(commit和reserve)來定義這些方式,用戶可以通知Windows按只讀、讀寫、不可讀寫、
7、執(zhí)行或特殊方式來處置新的虛擬內(nèi)存。與VirtualAlloc()函數(shù)對應的是VirtualFree()函數(shù),其作用是釋放虛擬內(nèi)存中的已調配頁或保管頁。用戶可利用dwFreeType參數(shù)將已調配頁修正成保管頁屬性。VirtualProtect()是VirtualAlloc()的一個輔助函數(shù),利用它可以改動虛擬內(nèi)存區(qū)的維護規(guī)范。2 實驗目的1)經(jīng)過實驗了解Windows內(nèi)存的運用,學習如何在運用程序中管理內(nèi)存,領會Windows運用程序內(nèi)存的簡單性和自我防護才干。2)學習檢查虛擬內(nèi)存空間或對其進展操作。3)了解Windows的內(nèi)存構造和虛擬內(nèi)存的管理,進而了解進程堆和Windows為運用內(nèi)存而提供
8、的一些擴展功能。3 實驗內(nèi)容與步驟虛擬內(nèi)存的檢測清單2所示的程序運用VirtualQueryEX()函數(shù)來檢查虛擬內(nèi)存空間。步驟1:在“開場菜單中單擊“程序、 “Microsoft Visual Studio 60、“MicrosoftVisualC+60,進入VisualC+窗口。步驟2:運轉以下程序清單清單2 檢測進程的虛擬地址空間#include#include#include#include#pragma comment(lib,shlwapi.lib)/以可讀方式對用戶顯示維護的輔助方法。/維護標志表示允許運用程序對內(nèi)存進展訪問的類型以及操作系統(tǒng)強迫訪問的類型inline bool
9、TestSet(DWORD dwTarget, DWORD dwMask)return(dwTarget & dwMask)=dwMask);#define SHOWMASK(dwTarget,type)if(TestSet(dwTarget,PAGE_#type)std:cout,#type;void ShowProtection(DWORD dwTarget)SHOWMASK(dwTarget,READONLY);SHOWMASK(dwTarget,GUARD);SHOWMASK(dwTarget,NOCACHE);SHOWMASK(dwTarget,READWRITE);SHOWMASK
10、(dwTarget,WRITECOPY);SHOWMASK(dwTarget,EXECUTE);SHOWMASK(dwTarget,EXECUTE_READ);SHOWMASK(dwTarget,EXECUTE_READWRITE);SHOWMASK(dwTarget,EXECUTE_WRITECOPY);SHOWMASK(dwTarget,NOACCESS);/遍歷整個虛擬內(nèi)存并對用戶顯示其屬性的任務程序的方法void WalkVM(HANDLE hProcess)/首先,獲得系統(tǒng)信息SYSTEM_INFO si;:ZeroMemory(&si,sizeof(si);:GetSystemIn
11、fo(&si);/分配要存放信息的緩沖區(qū)MEMORY_BASIC_INFORMATION mbi;:ZeroMemory(&mbi,sizeof(mbi);/循環(huán)整個運用程序地址空間LPCVOID pBlock=(LPVOID)si.lpMinimumApplicationAddress;while(pBlocksi.lpMaximumApplicationAddress)/獲得下一個虛擬內(nèi)存塊的信息if(:VirtualQueryEx(hProcess,/相關的進程pBlock,/開場位置&mbi,/緩沖區(qū)sizeof(mbi)=sizeof(mbi)/大小確實認/計算塊的結尾及其大小LPC
12、VOID pEnd=(PBYTE)pBlock+mbi.RegionSize;TCHAR szSizeMAX_PATH;:StrFormatByteSize(mbi.RegionSize,szSize,MAX_PATH);/顯示塊地址和大小std:cout.fill(0);std:coutstd:hexstd:setw(8)(DWORD)pBlock-std:hexstd:setw(8)(DWORD)pEnd(strlen(szSize)=7?(:()szSize);/顯示塊的形狀switch(mbi.State)case MEM_COMMIT:std:cout,Committed;break
13、;case MEM_FREE:std:cout,Free;break;case MEM_RESERVE:std:cout,Reserved;break;/顯示維護if(mbi.Protect=0&mbi.State!=MEM_FREE)mbi.Protect=PAGE_READONLY;ShowProtection(mbi.Protect);/顯示類型switch(mbi.Type)case MEM_IMAGE:std:cout,Image;break;case MEM_MAPPED:std:cout,Mapped;break;case MEM_PRIVATE:std:cout0)/除去途徑并
14、顯示:PathStripPath(szFilename);std:cout,Module:szFilename;std:coutstd:endl;/挪動塊指針以獲得下一個塊pBlock=pEnd;void main()/遍歷當前進程的虛擬內(nèi)存:WalkVM(:GetCurrentProcess();清單2中顯示一個WalkVM()函數(shù)開場于某個進程可訪問的最低端虛擬地址處,并在其中顯示各塊虛擬內(nèi)存的特性。虛擬內(nèi)存中的塊由VirtualQueryEx()APl定義成延續(xù)塊或具有一樣形狀(自在區(qū)、已調配區(qū)等)的內(nèi)存,并分配以一組一致的維護標志(只讀、可執(zhí)行等)?;卮鹨韵聠栴}:1)分析運轉結果按co
15、mmitted、reserved、free等三種虛擬地址空間分別記錄實驗數(shù)據(jù),其中“描畫是指對該組數(shù)據(jù)的簡單描畫,例如,對以下一組數(shù)據(jù):0001000000012000Committed,READWRITE,Private可描畫為:具有READWRITE權限的已調配私有內(nèi)存區(qū)。將系統(tǒng)當前的自在區(qū)(free)虛擬地址空間填入表1中。(表課可以本人畫)表1 實驗記錄地址大小虛擬地址空間類型訪問權限描畫typefreefreefreefreefreefreefreefreefreefreefreefreefreefreefreefreefreefreefreefreefreefreefreefree
16、free將系統(tǒng)當前的已調配區(qū) (committed) 虛擬地址空間填入表2中。表2 實驗記錄地址大小虛擬地址空間類型訪問權限描畫(type)committedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommittedcommitted將系統(tǒng)當前
17、的保管區(qū) (reserved) 虛擬地址空間填入表3中。表3 實驗記錄地址大小虛擬地址空間類型訪問權限描畫(type)reservedreservedreservedreservedreservedreservedreservedreservedreservedreserved2) 從上述輸出結果,對照分析程序,請簡單描畫程序運轉的流程:_3 實驗總結根據(jù)實驗結果及本人查閱相關資料寫出VirtualAlloc()函數(shù)的作用,各個參數(shù)的能夠值及含義。寫出對虛擬內(nèi)存的認識補充知識:出現(xiàn)“虛擬內(nèi)存不夠的幾個能夠1、感染病毒有些病毒發(fā)作時會占用大量內(nèi)存空間,導致系統(tǒng)出現(xiàn)內(nèi)存缺乏的問題。趕快去殺毒,晉級
18、病毒庫,然后把防毒措施做好!2、 HYPERLINK qqread/tag/2160/index.html t _blank 虛擬內(nèi)存設置不當虛擬內(nèi)存設置不當也能夠導致出現(xiàn)內(nèi)存缺乏問題,普通情況下,虛擬內(nèi)存大小為物理內(nèi)存大小的2倍即可,假設設置得過小,就會影響系統(tǒng)程序的正常運轉。重新調整虛擬內(nèi)存大小以WinXP為例,右鍵點擊“我的電腦,選擇“屬性,然后在“高級標簽頁,點擊“性能框中的“設置按鈕,切換到“高級標簽頁,然后在“虛擬內(nèi)存框中點擊“更改按鈕,接著重新設置虛擬內(nèi)存大小,完成后重新啟動系統(tǒng)就好了。3、系統(tǒng)空間缺乏虛擬內(nèi)存文件默許是在系統(tǒng)盤中,如WinXP的虛擬內(nèi)存文件名為“pagefile
19、.sys,假設系統(tǒng)盤剩余空間過小,導致虛擬內(nèi)存缺乏,也會出現(xiàn)內(nèi)存缺乏的問題。系統(tǒng)盤至少要保管300MB剩余空間,當然這個數(shù)值要根據(jù)用戶的實踐需求而定。用戶盡量不要把各種 HYPERLINK qqread/sys-soft/index.html t _blank 運用軟件安裝在系統(tǒng)盤中,保證有足夠的空間供虛擬內(nèi)存文件運用,而且最好把虛擬內(nèi)存文件安放到非系統(tǒng)盤中。4、由于SYSTEM用戶 HYPERLINK qqread/z/windows/123/index.html t _blank 權限設置不當基于NT內(nèi)核的 HYPERLINK qqread/keys/windows/index.html t _blank Windows系統(tǒng)啟動時,SYSTEM用戶會為系統(tǒng)創(chuàng)建虛擬內(nèi)存文件。有些用戶為了系統(tǒng)的平安,采用NTFS文件系統(tǒng),但卻取消了SYSTEM用戶在系統(tǒng)盤“寫入和“修正的權限,這樣就無法為系統(tǒng)創(chuàng)建虛擬內(nèi)存文件,運轉大型程序時,也會出現(xiàn)內(nèi)存缺乏的問題。問題很益處理,只需重新賦予SYSTEM用戶“寫入和“修正的權限即可,不過這個僅限于運用NTFS文件系統(tǒng)的用戶。虛擬內(nèi)存的優(yōu)化1.啟用磁盤寫入緩存在“我的電腦上單擊鼠標右鍵選擇“屬性-硬件,翻開設備管理器找到當前正在運用的硬盤,單擊鼠標右鍵選擇屬性。在硬盤屬性的的“戰(zhàn)略頁中,翻開“啟用磁盤上的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子產(chǎn)品購銷合同
- 旅游合作開發(fā)合同格式參考
- 延期支付合同樣本范本
- 無錫市家庭居室裝修施工合同樣本
- 二手衣柜轉讓合同
- 信息網(wǎng)會員使用協(xié)議
- 2024年酒廠買賣合同
- 小區(qū)公共停車位租賃合同
- 農(nóng)村土地承包權轉讓合同
- 高校實習生就業(yè)協(xié)議書
- 吉林省松原市長嶺縣長嶺鎮(zhèn)2023-2024學年四年級上學期期中道德與法治試卷
- 2023年四川農(nóng)信(農(nóng)商行)招聘筆試真題
- 《紀念白求恩》說課課件 2024-2025學年統(tǒng)編版語文七年級上冊
- 汽車機械基礎-說課課件
- 2024年認證行業(yè)法律法規(guī)及認證基礎知識 CCAA年度確認 試題與答案
- 中國建設銀行招聘(全國)筆試真題2023
- 健康管理專業(yè)職業(yè)生涯規(guī)劃書
- 上期開特下期必開特規(guī)律
- 腸內(nèi)營養(yǎng)支持健康教育
- 村級財務清理報告
- 石油加工基礎知識
評論
0/150
提交評論