计算机操作系统实验报告实验三-存储管理_第1页
计算机操作系统实验报告实验三-存储管理_第2页
计算机操作系统实验报告实验三-存储管理_第3页
计算机操作系统实验报告实验三-存储管理_第4页
计算机操作系统实验报告实验三-存储管理_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机科学与技术系 实验报告专业名称计算机科学与技术专业课程名称计算机操作系统项目名称存储管理 实验三存储管理[1]WindowsXp内存结构背景知识WindowsXp是32位的操作系统,它使计算机CPU可以用32位地址对32位内存块进行操作。内存中的每一个字节都可以用一个32位的指针来寻址。这样,最大的存储空间就是232字节或4000兆字节(4GB)。这样,在Windows下运行的每一个应用程序都认为能独占可能的4GB大小的空间而另一方面,实际上没有几台机器的RAM能达到4GB,更不必说让每个进程都独享4GB内存了。Windows在幕后将虚拟内存(virtualmemory,VM)地址映射到了各进程的物理内存地址上。而所谓物理内存是指计算机的RAM和由Windows分配到用户驱动器根目录上的换页文件。物理内存完全由系统管理。一、实验目的通过实验了解windowsXp内存的使用,学习如何在应用程序中管理内存、体会Windows应用程序内存的简单性和自我防护能力。了解windowsXp的内存结构和虚拟内存的管理,进而了解进程堆和windows为使用内存而提供的一些扩展功能。二、工具/准备工作您需要做以下准备:一台运行WindowsXpProfessional操作系统的计算机计算机中需安装VisualC++6.0专业版或企业版三、实验内容与步骤Windows提供了一个API即GetSystemInfo(),以便用户能检查系统中虚拟内存的一些特性。程序5-1显示了如何调用该函数以及显示系统中当前内存的参数。步骤1:登录进入WindowsXpProfessional。步骤2:在“开始”菜单中单击“程序”-“MicrosoftVisualStudio6.0”–“MicrosoftVisualC++6.0”命令,进入VisualC++窗口。步骤3:在工具栏单击“打开”按钮,在“打开”对话框中找到并打开实验源程序5-1.cpp。程序5-1:获取有关系统的内存设置的信息//工程vmeminfo#include<windows.h>#include<iostream>#include<shlwapi.h>#include<iomanip>#pragmacomment(lib,"shlwapi.lib")voidmain(){//首先,让我们获得系统信息SYSTEM_INFOsi;::ZeroMemory(&si,sizeof(si));::GetSystemInfo(&si);//使用外壳辅助程序对一些尺寸进行格式化TCHARszPageSize[MAX_PATH];::StrFormatByteSize(si.dwPageSize,szPageSize,MAX_PATH);DWORDdwMemSize=(DWORD)si.lpMaximumApplicationAddress-(DWORD)si.lpMinimumApplicationAddress;TCHARszMemSize[MAX_PATH];::StrFormatByteSize(dwMemSize,szMemSize,MAX_PATH);//将内存信息显示出来std::cout<<"Virtualmemorypagesize:"<<szPageSize<<std::endl;std::cout.fill('0');std::cout<<"Minimumapplicationaddress:0x"<<std::hex<<std::setw(8)<<(DWORD)si.lpMinimumApplicationAddress<<std::endl;std::cout<<"Maximumapplicationaddress:0x"<<std::hex<<std::setw(8)<<(DWORD)si.lpMaximumApplicationAddress<<std::endl;std::cout<<"Totalavailablevirtualmemory:"<<szMemSize<<std::endl;}步骤4:单击“Build”菜单中的“Compile5-1.cpp”命令,并单击“是”按钮确认。系统对4-1.cpp进行编译。步骤5:编译完成后,单击“Build”菜单中的“Build5-1.exe”命令,建立5-1.exe可执行文件。操作能否正常进行?如果不行,则可能的原因是什么?可以正常运行步骤6:在工具栏单击“ExecuteProgram”(执行程序)按钮,执行5-1.exe程序。运行结果(分行书写。如果运行不成功,则可能的原因是什么?):1)虚拟内存每页容量为:4KB2)最小应用地址:0x00010000(64K)3)最大应用地址为:0x7ffeffff(2G-64K)4)当前可供应用程序使用的内存空间为:1.99GB5)当前计算机的实际内存大小为:2GB阅读和分析程序5-1,请回答问题:理论上每个windows应用程序可以独占的最大存储空间是:2GB在程序5-1中,用于检索系统中虚拟内存特性的API函数是:StrFormatByteSize(dwMemSize,szMemSize,MAX_PATH)提示:可供应用程序使用的内存空间实际上已经减去了开头与结尾两个64KB的保护区。虚拟内存空间中的64KB保护区是防止编程错误的一种Windows方式。任何对内存中这一区域的访问(读、写、执行)都将引发一个错误陷井,从而导致错误并终止程序的执行。也就是说,假如用户有一个NULL指针(地址为0),但仍试图在此之前很近的地址处使用另一个指针,这将因为试图从更低的保留区域读写数据,从而产生意外错误并终止程序的执行。[2]WindowsXp虚拟内存背景知识在WindowsXp环境下,4GB的虚拟地址空间被划分成两个部分:低端2GB提供给进程使用,高端2GB提供给系统使用。这意味着用户的应用程序代码,包括DLL以及进程使用的各种数据等,都装在用户进程地址空间内(低端2GB)。用户过程的虚拟地址空间也被分成三部分:1)虚拟内存的已调配区(committed):具有备用的物理内存,根据该区域设定的访问权限,用户可以进行写、读或在其中执行程序等操作。2)虚拟内存的保留区(reserved):没有备用的物理内存,但有一定的访问权限。3)虚拟内存的自由区(free):不限定其用途,有相应的PAGE_NOACCESS权限。与虚拟内存区相关的访问权限告知系统进程可在内存中进行何种类型的操作。例如,用户不能在只有PAGE_READONLY权限的区域上进行写操作或执行程序;也不能在只有PAGE_EXECUTE权限的区域里进行读、写操作。而具有PAGE_NOACCESS权限的特殊区域,则意味着不允许进程对其地址进行任何操作。在进程装入之前,整个虚拟内存的地址空间都被设置为只有PAGE_NOACCESS权限的自由区域。当系统装入进程代码和数据后,才将内存地址的空间标记为已调配区或保留区,并将诸如EXECUTE、READWRITE和READONLY的权限与这些区域相关联。如表3-2所示,给出了MEMORY_BASIC_INFORMAITON的结构,此数据描述了进程虚拟内存空间中的一组虚拟内存页面的当前状态,期中State项表明这些区域是否为自由区、已调配区或保留区;Protect项则包含了windows系统为这些区域添加了何种访问保护;type项则表明这些区域是课执行图像、内存映射文件还是简单的私有内存。VirsualQueryEX()API能让用户在指定的进程中,对虚拟内存地址的大小和属性进行检测。Windows还提供了一整套能使用户精确控制应用程序的虚拟地址空间的虚拟内存API。一些用于虚拟内存操作及检测的API如表3-2所示。表3-1MEMORY_BASIC_INFORMAITON结构的成员成员名称目的PVOIDBaseAddress虚拟内存区域开始处的指针PVOIDAllocationBase如果这个特定的区域为子分配区的话,则为虚拟内存外面区域的指针;否则此值与BaseAddress相同DWORDAllocationProtect虚拟内存最初分配区域的保护属性。其可能值包括:PAGE_NOACCESS,PAGE_READONLY,PAGE_READWRITE和PAGE_EXECUTE_READDWORDRegionSize虚拟内存区域的字节数DWORDState区域的当前分配状态。其可能值为MEM_COMMIT,MEM_PREE和MEM_RESERVEDWORDProtect虚拟内存当前的保护属性。可能值与AllocationProtect成员的相同DWORDType虚拟内存区域中出现的页面类型。可能值为MEM_IMAGE,MEM_MAPPED和MEM_PRIVATE表3-2虚拟内存的APIAPI名称描述VisualQueryEX()通过填充MEMORY_BASIC_INFORMATION结构检测进程内虚拟内存的区域VisualAlloc()保留或调配进程的部分虚拟内存,设置分配和保护标志VirsualFree()释放或收回应用程序使用的部分虚拟地址VirsualProtect()改变虚拟内存区域保护规范VirsualLock()防止系统将虚拟内存区域通过系统交换到页面文件中VirsualUnlock()释放虚拟内存的锁定区域,必要时,允许系统将其交换到页面文件中提供虚拟内存分配功能的是VirtualAlloc()API。该API支持用户向系统要求新的虚拟内存或改变已分配内存的当前状态。用户若想通过VirtualAlloc()函数使用虚拟内存,可以采用两种方式通知系统:1)简单地将内存内容保存在地址空间内2)请求系统返回带有物理存储区(RAM的空间或换页文件)的部分地址空间用户可以用flAllocationType参数(commit和reserve)来定义这些方式,用户可以通知Windows按只读、读写、不可读写、执行或特殊方式来处理新的虚拟内存。与VirtualAlloc()函数对应的是VirtualFree()函数,其作用是释放虚拟内存中的已调配页或保留页。用户可利用dwFreeType参数将已调配页修改成保留页属性。VirtualProtect()是VirtualAlloc()的一个辅助函数,利用它可以改变虚拟内存区的保护规范。一、实验目的1)通过实验了解WindowsXp内存的使用,学习如何在应用程序中管理内存,体会Windows应用程序内存的简单性和自我防护能力。2)学习检查虚拟内存空间或对其进行操作。3)了解WindowsXp的内存结构和虚拟内存的管理,进而了解进程堆和Windows为使用内存而提供的一些扩展功能。二、工具/准备工作在开始本实验之前,请回顾教科书的相关内容。您需要做以下准备:1)一台运行WindowsXpProfessional操作系统的计算机。2)计算机中需安装VisualC++6.0专业版或企业版。三、实验内容与步骤1.虚拟内存的检测清单5-2所示的程序使用VirtualQueryEX()函数来检查虚拟内存空间。步骤1:登录进入WindowsXpProfessional。步骤2:在“开始”菜单中单击“程序”-“MicrosoftVisualStudio6.0”–“MicrosoftVisualC++6.0”命令,进入VisualC++窗口。步骤3:在工具栏单击“打开”按钮,在“打开”对话框中找到并打开实验源程序5-2.cpp。清单5-2检测进程的虚拟地址空间//工程vmwalker#include<windows.h>#include<iostream>#include<shlwapi.h>#include<iomanip>#pragmacomment(lib,"Shlwapi.lib")//以可读方式对用户显示保护的辅助方法。//保护标记表示允许应用程序对内存进行访问的类型//以及操作系统强制访问的类型inlineboolTestSet(DWORDdwTarget,DWORDdwMask){return((dwTarget&dwMask)==dwMask);}#defineSHOWMASK(dwTarget,type)\if(TestSet(dwTarget,PAGE_##type))\{std::cout<<","<<#type;}voidShowProtection(DWORDdwTarget){SHOWMASK(dwTarget,READONLY);SHOWMASK(dwTarget,GUARD);SHOWMASK(dwTarget,NOCACHE);SHOWMASK(dwTarget,READWRITE);SHOWMASK(dwTarget,WRITECOPY);SHOWMASK(dwTarget,EXECUTE);SHOWMASK(dwTarget,EXECUTE_READ);SHOWMASK(dwTarget,EXECUTE_READWRITE);SHOWMASK(dwTarget,EXECUTE_WRITECOPY);SHOWMASK(dwTarget,NOACCESS);}//遍历整个虚拟内存并对用户显示其属性的工作程序的方法voidWalkVM(HANDLEhProcess){//首先,获得系统信息SYSTEM_INFOsi;::ZeroMemory(&si,sizeof(si));::GetSystemInfo(&si);//分配要存放信息的缓冲区MEMORY_BASIC_INFORMATIONmbi;::ZeroMemory(&mbi,sizeof(mbi));//循环整个应用程序地址空间LPCVOIDpBlock=(LPVOID)si.lpMinimumApplicationAddress;while(pBlock<si.lpMaximumApplicationAddress){//获得下一个虚拟内存块的信息if(::VirtualQueryEx(hProcess, //相关的进程pBlock,//开始位置 &mbi,//缓冲区sizeof(mbi))==sizeof(mbi)) //大小的确认{//计算块的结尾及其大小LPCVOIDpEnd=(PBYTE)pBlock+mbi.RegionSize; TCHARszSize[MAX_PATH];::StrFormatByteSize(mbi.RegionSize,szSize,MAX_PATH);//显示块地址和大小std::cout.fill('0');std::cout<<std::hex<<std::setw(8)<<(DWORD)pBlock<<"-"<<std::hex<<std::setw(8)<<(DWORD)pEnd<<(::strlen(szSize)==7?"(":"(")<<szSize<<")";//显示块的状态switch(mbi.State){caseMEM_COMMIT: std::cout<<"Committed"; break;caseMEM_FREE: std::cout<<"Free"; break;caseMEM_RESERVE: std::cout<<"Reserved"; break;}//显示保护 if(mbi.Protect==0&&mbi.State!=MEM_FREE){mbi.Protect=PAGE_READONLY;} ShowProtection(mbi.Protect);//显示类型switch(mbi.Type){caseMEM_IMAGE: std::cout<<",Image"; break; caseMEM_MAPPED: std::cout<<",Mapped"; break;caseMEM_PRIVATE: std::cout<<",Private"; break; }//检验可执行的影像TCHARszFilename[MAX_PATH];if(::GetModuleFileName((HMODULE)pBlock, //实际虚拟内存的模块句柄 szFilename,//完全指定的文件名称 MAX_PATH)>0)//实际使用的缓冲区大小{//除去路径并显示::PathStripPath(szFilename);std::cout<<",Module:"<<szFilename; }std::cout<<std::endl; //移动块指针以获得下一下个块pBlock=pEnd;}}}voidmain(){//遍历当前进程的虚拟内存 ::WalkVM(::GetCurrentProcess());}清单5-2中显示一个walkVM()函数开始于某个进程可访问的最低端虚拟地址处,并在其中显示各块虚拟内存的特性。虚拟内存中的块由VirsualQueryEX()API定义成连续快或具有相同状态(自由区,已调配区等)的内存,并分配以一组统一的保护标志(只读、可执行等)。步骤4:单击“Build”菜单中的“Compile5-2.cpp”命令,并单击“是”按钮确认。系统对5-2.cpp进行编译。步骤5:编译完成后,单击“Build”菜单中的“Build5-2.exe”命令,建立5-2.exe可执行文件。操作能否正常进行?如果不行,则可能的原因是什么?能正常运行步骤6:在工具栏单击“ExecuteProgram”(执行程序)按钮,执行5-2.exe程序。1)分析运行结果(如果运行不成功,则可能的原因是什么)按committed,reserved,free等三种虚拟地址空间分别记录实验数据,其中“描述”是对该组数据的简单描述,例如,对下列一组数据:00010000-0001Xp<8.00KB>Committed,READWRITE,Private可描述为:具有READWRITE权限的已调配私有内存区。将系统当前的自由区(Free)虚拟地址空间填入表3-3中。注:此处用截图!00010000-00020000(64.0KB)Committed,READWRITE,Mapped00020000-00021000(4.00KB)Committed,READWRITE,Private00021000-0002e000(52.0KB)Reserved,READONLY,Private00028.00KB)Free,NOACCESS00030000-00031000(4.00KB)Committed,READWRITE,Private00031000-00040000(60.0KB)Free,NOACCESS00040000-00054000(80.0KB)Committed,READONLY,Mapped00054000-00060000(48.0KB)Free,NOACCESS00060000-00095000(212KB)Reserved,READONLY,Private00095000-00098000(12.0KB)Committed,GUARD,READWRITE,Private00098000-000a0000(32.0KB)Committed,READWRITE,Private000a0000-0019b000(0.98MB)Reserved,READONLY,Private0019b000-0019d000(8.00KB)Committed,GUARD,READWRITE,Private0019d000-001a0000(12.0KB)Committed,READWRITE,Private001a0000-001a4000(16.0KB)Committed,READONLY,Mapped001a4000-001b0000(48.0KB)Free,NOACCESS001b0000-001b2000(8.00KB)Committed,READWRITE,Private001b2000-001c0000(56.0KB)Free,NOACCESS001c0000-001c1000(4.00KB)Committed,READWRITE,Private001c1000-001d0000(60.0KB)Free,NOACCESS001d0000-001d2000(8.00KB)Committed,READONLY,Mapped001d2000-001e0000(56.0KB)Free,NOACCESS001e0000-001e1000(4.00KB)Committed,READWRITE,Mapped001e1000-001f0000(60.0KB)Free,NOACCESS001f0000-001f5000(20.0KB)Committed,READWRITE,Private001f5000-00200000(44.0KB)Reserved,READONLY,Private00200000-002be000(760KB)Committed,READONLY,Mapped002be000-002c0000(8.00KB)Free,NOACCESS002c0000-002d0000(64.0KB)Committed,READWRITE,Private002d0000-003c0000(960KB)Reserved,READONLY,Private003c0000-003f5000(212KB)Reserved,READONLY,Private003f5000-003f8000(12.0KB)Committed,GUARD,READWRITE,Private003f8000-00400000(32.0KB)Committed,READWRITE,Private00400000-00401000(4.00KB)Committed,READONLY,Image,Module:5-2.exe00401000-00470000(444KB)Committed,EXECUTE_READ,Image00470000-00478000(32.0KB)Committed,READONLY,Image00478000-0047b000(12.0KB)Committed,READWRITE,Image0047b000-0047d000(8.00KB)Committed,WRITECOPY,Image004716.0KB)Committed,READWRITE,Image00481000-00485000(16.0KB)Committed,READONLY,Image00485000-00490000(44.0KB)Free,NOACCESS00490000-0058d000(0.98MB)Reserved,READONLY,Private0058d000-0058f000(8.00KB)Committed,GUARD,READWRITE,Private00584.00KB)Committed,READWRITE,Private00590000-005c5000(212KB)Reserved,READONLY,Private005c5000-005c8000(12.0KB)Committed,GUARD,READWRITE,Private005c8000-005d0000(32.0KB)Committed,READWRITE,Private005d0000-006cd000(0.98MB)Reserved,READONLY,Private006cd000-006cf000(8.00KB)Committed,GUARD,READWRITE,Private006cf000-006d0000(4.00KB)Committed,READWRITE,Private006d0000-006dc000(48.0KB)Committed,READONLY,Mapped006d1.45MB)Reserved,READONLY,Mapped00850000-00854000(16.0KB)Committed,READONLY,Mapped00854000-00858000(16.0KB)Reserved,READONLY,Mapped00858000-00860000(32.0KB)Free,NOACCESS00860000-0086a000(40.0KB)Committed,READONLY,Mapped008624.0KB)Free,NOACCESS00870000-00873000(12.0KB)Committed,READWRITE,Private00873000-00880000(52.0KB)Reserved,READONLY,Private00880000-00a01000(1.50MB)Committed,READONLY,Mapped00a01000-00a10000(60.0KB)Free,NOACCESS00a10000-00ad8000(800KB)Committed,READONLY,Mapped00ad8000-01e10000(19.2MB)Reserved,READONLY,Mapped01e10000-01f60000(1.31MB)Free,NOACCESS01f60000-01f63000(12.0KB)Committed,READWRITE,Private01f63000-01f70000(52.0KB)Reserved,READONLY,Private01f70000-63da0000(1.52GB)Free,NOACCESS63da0000-63da1000(4.00KB)Committed,READONLY,Image63da1000-63da3000(8.00KB)Committed,EXECUTE_READ,Image63da3000-63da4000(4.00KB)Committed,READONLY,Image63da4000-63da5000(4.00KB)Committed,READWRITE,Image63da5000-63da8000(12.0KB)Committed,READONLY,Image63da8000-63db0000(32.0KB)Free,NOACCESS63db0000-63db1000(4.00KB)Committed,READONLY,Image63db1000-63de2000(196KB)Committed,EXECUTE_READ,Image63de2000-63df5000(76.0KB)Committed,READONLY,Image63df5000-63df7000(8.00KB)Committed,READWRITE,Image63df7000-63dff000(32.0KB)Committed,READONLY,Image63dff000-63e00000(4.00KB)Free,NOACCESS63e00000-63e01000(4.00KB)Committed,READONLY,Image63e01000-63e3b000(232KB)Committed,EXECUTE_READ,Image63e3b000-63e62000(156KB)Committed,READONLY,Image63e62000-63e63000(4.00KB)Committed,READWRITE,Image63e63000-63e64000(4.00KB)Committed,WRITECOPY,Image63e64000-63e65000(4.00KB)Committed,READWRITE,Image63e65000-63e73000(56.0KB)Committed,READONLY,Image63e73000-74170000(258MB)Free,NOACCESS74170000-74171000(4.00KB)Committed,READONLY,Image,Module:PROPSYS.dll74171000-74207000(600KB)Committed,EXECUTE_READ,Image74207000-74208000(4.00KB)Committed,READWRITE,Image74208000-742b2000(680KB)Committed,READONLY,Image742b2000-74b40000(8.55MB)Free,NOACCESS74b40000-74b41000(4.00KB)Committed,READONLY,Image,Module:bcryptPrimitives.dll74b41000-74b94000(332KB)Committed,EXECUTE_READ,Image74b94000-74b95000(4.00KB)Committed,READWRITE,Image74b95000-74b99000(16.0KB)Committed,READONLY,Image74b99000-74ba0000(28.0KB)Free,NOACCESS74ba0000-74ba1000(4.00KB)Committed,READONLY,Image,Module:CRYPTBASE.dll74ba1000-74ba5000(16.0KB)Committed,EXECUTE_READ,Image74ba5000-74ba6000(4.00KB)Committed,READWRITE,Image74ba6000-74baa000(16.0KB)Committed,READONLY,Image74baa000-74bb0000(24.0KB)Free,NOACCESS74bb0000-74bb1000(4.00KB)Committed,READONLY,Image,Module:SspiCli.dll74bb1000-74bc8000(92.0KB)Committed,EXECUTE_READ,Image74bc8000-74bc9000(4.00KB)Committed,READWRITE,Image74bc9000-74bce000(20.0KB)Committed,READONLY,Image74bce000-74d10000(1.25MB)Free,NOACCESS74d10000-74d11000(4.00KB)Committed,READONLY,Image,Module:shcore.dll74d11000-74d8d000(496KB)Committed,EXECUTE_READ,Image74d8d000-74d8e000(4.00KB)Committed,READWRITE,Image74d8e000-74d92000(16.0KB)Committed,READONLY,Image74d92000-74d93000(4.00KB)Committed,WRITECOPY,Image74d93000-74d9d000(40.0KB)Committed,READONLY,Image74d9d000-74f10000(1.44MB)Free,NOACCESS74f10000-74f11000(4.00KB)Committed,READONLY,Image,Module:SHLWAPI.dll74f11000-74f4a000(228KB)Committed,EXECUTE_READ,Image74f4a000-74f4b000(4.00KB)Committed,READWRITE,Image74f4b000-74f54000(36.0KB)Committed,READONLY,Image74f54000-76370000(20.1MB)Free,NOACCESS76370000-76371000(4.00KB)Committed,READONLY,Image,Module:MSCTF.dll76371000-7643d000(816KB)Committed,EXECUTE_READ,Image7643d000-7643e000(4.00KB)Committed,READWRITE,Image7643e000-7643f000(4.00KB)Committed,WRITECOPY,Image76434.00KB)Committed,READWRITE,Image76440000-76442000(8.00KB)Committed,WRITECOPY,Image76442000-76490000(312KB)Committed,READONLY,Image76490000-76491000(4.00KB)Committed,READONLY,Image,Module:KERNEL32.DLL76491000-764a0000(60.0KB)Reserved,READONLY,Image764408KB)Committed,EXECUTE_READ,Image76506000-76510000(40.0KB)Reserved,READONLY,Image76510000-76536000(152KB)Committed,READONLY,Image76536000-76540000(40.0KB)Reserved,READONLY,Image76540000-76541000(4.00KB)Committed,READWRITE,Image76541000-76550000(60.0KB)Reserved,READONLY,Image76550000-76551000(4.00KB)Committed,READONLY,Image76551000-76560000(60.0KB)Reserved,READONLY,Image76560000-76561000(4.00KB)Committed,READONLY,Image76561000-76570000(60.0KB)Reserved,READONLY,Image76570000-76575000(20.0KB)Committed,READONLY,Image76575000-76580000(44.0KB)Reserved,READONLY,Image76580000-76581000(4.00KB)Committed,READONLY,Image,Module:IMM32.DLL76581000-765a0000(124KB)Committed,EXECUTE_READ,Image765a0000-765a1000(4.00KB)Committed,READWRITE,Image765a1000-765ab000(40.0KB)Committed,READONLY,Image765ab000-765c0000(84.0KB)Free,NOACCESS765c0000-765c1000(4.00KB)Committed,READONLY,Image,Module:sechost.dll765c1000-765f8000(220KB)Committed,EXECUTE_READ,Image765f8000-765fa000(8.00KB)Committed,READWRITE,Image765fa000-765fb000(4.00KB)Committed,WRITECOPY,Image765f32.0KB)Committed,READONLY,Image76603000-76610000(52.0KB)Free,NOACCESS76610000-76611000(4.00KB)Committed,READONLY,Image,Module:KERNELBASE.dll76611000-76760000(1.30MB)Committed,EXECUTE_READ,Image76760000-76763000(12.0KB)Committed,READWRITE,Image76763000-76764000(4.00KB)Committed,WRITECOPY,Image76764000-76786000(136KB)Committed,READONLY,Image76786000-76790000(40.0KB)Free,NOACCESS76790000-76791000(4.00KB)Committed,READONLY,Image,Module:USER32.dll76791000-76825000(592KB)Committed,EXECUTE_READ,Image76825000-76827000(8.00KB)Committed,READWRITE,Image76827000-768d0000(676KB)Committed,READONLY,Image768d0000-76c40000(3.43MB)Free,NOACCESS76c40000-76c41000(4.00KB)Committed,READONLY,Image,Module:RPCRT4.dll76c41000-76cdc000(620KB)Committed,EXECUTE_READ,Image76cdc000-76cdd000(4.00KB)Committed,READWRITE,Image76cdd000-76cec000(60.0KB)Committed,READONLY,Image76cec000-76db0000(784KB)Free,NOACCESS76db0000-76db1000(4.00KB)Committed,READONLY,Image,Module:msvcrt.dll76db1000-76e61000(704KB)Committed,EXECUTE_READ,Image76e61000-76e62000(4.00KB)Committed,READWRITE,Image76e62000-76e63000(4.00KB)Committed,WRITECOPY,Image76e63000-76e66000(12.0KB)Committed,READWRITE,Image76e66000-76e67000(4.00KB)Committed,WRITECOPY,Image76e67000-76e6e000(28.0KB)Committed,READONLY,Image76e6e000-76f60000(968KB)Free,NOACCESS76f60000-76f61000(4.00KB)Committed,READONLY,Image,Module:GDI32.dll76f61000-77090000(1.18MB)Committed,EXECUTE_READ,Image77090000-77093000(12.0KB)Committed,READWRITE,Image77093000-770ad000(104KB)Committed,READONLY,Image770ad000-770b0000(12.0KB)Free,NOACCESS770b0000-770b1000(4.00KB)Committed,READONLY,Image,Module:OLEAUT32.dll770b1000-77135000(528KB)Committed,EXECUTE_READ,Image77135000-77137000(8.00KB)Committed,READWRITE,Image77137000-77142000(44.0KB)Committed,READONLY,Image77142000-77370000(2.17MB)Free,NOACCESS77370000-77371000(4.00KB)Committed,READONLY,Image,Module:combase.dll77371000-774f3000(1.50MB)Committed,EXECUTE_READ,Image774f3000-774f4000(4.00KB)Committed,READWRITE,Image774f4000-774f5000(4.00KB)Committed,WRITECOPY,Image774f5000-774f8000(12.0KB)Committed,READWRITE,Image774f8000-7752a000(200KB)Committed,READONLY,Image7752a000-77aa0000(5.46MB)Free,NOACCESS77aa0000-77aa1000(4.00KB)Committed,READONLY,Image,Module:ntdll.dll77aa1000-77ba6000(1.01MB)Committed,EXECUTE_READ,Image77ba6000-77bab000(20.0KB)Committed,READWRITE,Image77bab000-77c19000(440KB)Committed,READONLY,Image77c19000-7fea0000(130MB)Free,NOACCESS7fea0000-7fea5000(20.0KB)Committed,READONLY,Mapped7fea5000-7ffa0000(0.98MB)Reserved,READONLY,Mapped7ffa0000-7ffd3000(204KB)Committed,READONLY,Mapped7ffd3000-7ffd5000(8.00KB)Free,NOACCESS7ffd5000-7ffd8000(12.0KB)Committed,READWRITE,Private7ffd8000-7ffdb000(12.0KB)Committed,READWRITE,Private7ffdb000-7ffde000(12.0KB)Committed,READWRITE,Private7ffde000-7ffdf000(4.00KB)Committed,READWRITE,Private7ffdf000-7ffe0000(4.00KB)Committed,READWRITE,Private7ffe0000-7ffe1000(4.00KB)Committed,READONLY,Private7ffe1000-7fff0000(60.0KB)Reserved,READONLY,Private表3-3实验记录2)从上述输出结果,对照分析清单5-2的程序,请简单描述程序运行的流程:1.首先获得系统信息 分配要存储信息的缓冲区 循环整个应用地址空间 获得下一个虚拟内存块信息 计算块的结尾及大小 显示块的大小及地址 显示块的状态 显示保护 显示类型 检验可执行的影像除去路径并显示 移动块指针至下一个块 2.虚拟内存的分配与释放能正确使用系统函数GetMeoryStatus()和数据结构MEMORY_STATUS了解系统内存和虚拟存储空间使用情况,会使用VirsualAlloc()函数和VirsualFree()函数分配和释放虚拟内存空间。//GetMemoryStatus.cpp:Definestheentrypointfortheconsoleapplication.//#include"stdafx.h"#include"GetMemoryStatus.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endifvoidGetMemSta(void);//TheoneandonlyapplicationobjectCWinApptheApp;usingnamespacestd;int_tmain(intargc,TCHAR*argv[],TCHAR*envp[]){intnRetCode=0;LPVOIDBaseAddr;char*str;GetMemSta();printf("NowAllocate32MVirsualMemoryand2MPhysicalMemory\n\n");BaseAddr=::VirtualAlloc(NULL,1024*1024*32,MEM_RESERVE|MEM_COMMIT,PAGE_READWRITE);//分配虚拟内存if(BaseAddr==NULL)printf("VirsualAllocateFail.\n");str=(char*)malloc(1024*1024*2);//分配内存GetMemSta(); printf("NowRelease32MVirsualMemoryand2MPhysicalMemory\n\n");if(::VirtualFree(BaseAddr,0,MEM_RELEASE)==0)//释放虚拟内存printf("ReleaseAllocateFail.\n");free(str);//释放内存GetMemSta();returnnRetCode;}voidGetMemSta(void){MEMORYSTATUSMemInfo;GlobalMemoryStatus(&MemInfo);printf("CurrentMemoryStatusis:\n");printf("\tTotalPhysicalMemoryis%dMB\n",MemInfo.dwTotalPhys/(1024*1024)); printf("\tAvailablePhysicalMemoryis%dMB\n",MemInfo.dwAvailPhys/(1024*1024));printf("\tTotalPageFileis%dMB\n",MemInfo.dwTotalPageFile/(1024*1024));printf("\tAvailablePageFileis%dMB\n",MemInfo.dwAvailPageFile/(1024*1024));printf("\tTotalVirtualMemoryis%dMB\n",MemInfo.dwTotalVirtual/(1024*1024)); printf("\tAvailableVirsualmemoryis%dMB\n",MemInfo.dwAvailVirtual/(1024*1024));printf("\tMemoryLoadis%d%%\n\n",MemInfo.dwMemoryLoad);}步骤1:在VC6.0环境下选择Win32ConsoleApplication建立一个控制台工程文件,选择AnapplicationthatSupportsMFC。步骤2:编辑并编译完成后,单击“Build”菜单中的“BuildGetMemoryStatus.exe”命令,建立GetMemoryStatus.exe可执行文件。操作能否正常进行?如果不行,则可能的原因是什么?能正常运行 步骤3:在工具栏单击“ExecuteProgram”按钮,执行GetMemoryStatus.cpp.exe程序。分析程序GetMemoryStatus.cpp的运行结果1)请描述运行结果(如果运行不成功,则可能的原因是什么?):CurrentMemoryStatusis: TotalPhysicalMemoryis2047MB AvailablePhysicalMemoryis2047MB TotalPageFileis4095MB AvailablePageFileis4095MB TotalVirtualMemoryis2047MB AvailableVirsualmemoryis2040MB MemoryLoadis15% NowAllocate32MVirsualMemoryand2MPhysicalMemory CurrentMemoryStatusis: TotalPhysicalMemoryis2047MB AvailablePhysicalMemoryis2047MB TotalPageFileis4095MB AvailablePageFileis4095MB TotalVirtualMemoryis2047MB AvailableVirsualmemoryis2006MB MemoryLoadis15%

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论