实验九存储管理报告(2)

2019-06-11 21:56

&mbi, // 缓冲区 sizeof(mbi))==sizeof(mbi) ) // 大小的确认 {

// 计算块的结尾及其大小

LPCVOID pEnd = (PBYTE) pBlock + mbi.RegionSize; TCHAR szSize[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? \ << \

// 显示块的状态 switch(mbi.State) {

case MEM_COMMIT : std :: cout << \ break;

case MEM_FREE : std :: cout << \ break;

case MEM_RESERVE : std :: cout << \ break; }

// 显示保护 if(mbi.Protect==0 && mbi.State!=MEM_FREE) {

mbi.Protect=PAGE_READONLY; } ShowProtection(mbi.Protect);

// 显示类型

switch(mbi.Type){

case MEM_IMAGE : std :: cout << \ break; case MEM_MAPPED: std :: cout << \ break;

case MEM_PRIVATE : std :: cout << \ break; }

// 检验可执行的影像

TCHAR szFilename [MAX_PATH] ; if (:: GetModuleFileName ( (HMODULE) pBlock, // 实际虚拟内存的模块句柄 szFilename, //完全指定的文件名称

MAX_PATH)>0) //实际使用的缓冲区大小 {

// 除去路径并显示

:: PathStripPath(szFilename) ;

std :: cout << \ }

std :: cout << std :: endl; // 移动块指针以获得下一下个块 pBlock = pEnd; } } }

void main() {

// 遍历当前进程的虚拟内存 ::WalkVM(::GetCurrentProcess()); }

清单5-2中显示一个walkVM()函数开始于某个进程可访问的最低端虚拟地址处,并在其中显示各块虚拟内存的特性。虚拟内存中的块由VirsualQueryEX()API定义成连续快或具有相同状态(自由区,已调配区等)的内存,并分配以一组统一的保护标志(只读、可执行等)。 步骤4:单击“Build”菜单中的“Compile 5-2.cpp”命令,并单击“是”按钮确认。系统对5-2.cpp进行编译。

步骤5:编译完成后,单击“Build”菜单中的“Build 5-2.exe”命令,建立5-2.exe可执行文件。

操作能否正常进行?如果不行,则可能的原因是什么?

___能运行_________________________________________________________________ ________________________________________________________________________ 步骤6:在工具栏单击“Execute Program” (执行程序) 按钮,执行5-2.exe程序。 1)分析运行结果(如果运行不成功,则可能的原因是什么)

按committed,reserved,free等三种虚拟地址空间分别记录实验数据,其中“描述”是对该组数据的简单描述,例如,对下列一组数据:

00010000-0001Xp<8.00KB>Committed,READWRITE,Private可描述为:具有READWRITE权限的已调配私有内存区。

将系统当前的自由区(Free)虚拟地址空间填入表3-3中。 地址 大小 虚拟地址 空间类型 free free free free free 访问权限 READWRITE NOACCESS READWRITE NOACCESS READONLY 描述 具有READWRITE权限的已调配私有内存区 没有任何权限的已调配的共有内存区 具有READWRITE权限的已调配私有内存区 没有任何权限的已调配的共有内存区 只具有READ权限的已调配私有内存区 00010000-00012000 00012000-00020000 00020000-00021000 00021000-00030000 00030000-0012c000 8.00KB 56.0KB 4.00KB 60.0KB 0.98MB 0012c000-0012d000 4.00KB free READWRITE READWRITE READONLY 具有READWRITE权限的已调配私有内存区 具有READWRITE权限的已调配私有内存区 只具有READ权限的已调配内存区 0012d000-00130000 12.0KB free 00130000-00133000 12.0KB free

表3-3 实验记录 地址 大小 虚拟空间类型 free free free free free free free 表3-4 实验记录

访问权限 描述 将系统当前的已调配区(Committed)虚拟地址空间填入表3-4中。 00010000-00020000 (64.0 KB) Committed, READWRITE, Mapped 00020000-00030000 (64.0 KB) Committed, READWRITE, Mapped 0012d000-0012e000 (4.00 KB) Committed, GUARD, READWRITE, Private 0012e000-00130000 (8.00 KB) Committed, READWRITE, Private 00130000-00134000 (16.0 KB) Committed, READONLY, Mapped

00140000-001a7000 (412 KB) Committed, READONLY, Mapped 001b0000-001b1000 (4.00 KB) Committed, READWRITE, Private

001c0000-001c1000 (4.00 KB) Committed, READWRITE, Private 001d0000-001d7000 (28.0 KB) Committed, READONLY, Mapped 001e0000-001e2000 (8.00 KB) Committed, READWRITE, Mapped

地址 大小 虚拟空间类型 Committed Committed Committed Committed Committed Committed Committed 访问权限 描述 将系统当前的保留区(Reserved)虚拟地址空间填入表3-5中。 0022d000-00300000 (844 KB) Reserved, READONLY, Private

00306000-003c0000 (744 KB) Reserved, READONLY, Mapped

003c3000-003c8000 (20.0 KB) Reserved, READONLY, Mapped 00673000-00680000 (52.0 KB) Reserved, READONLY, Private

006f4000-01280000 (11.5 MB) Reserved, READONLY, Mapped

01288000-01380000 (992 KB) Reserved, READONLY, Private 01406000-01410000 (40.0 KB) Reserved, READONLY, Private

表3-5 实验记录 地址 大小 虚拟空间类型 Reserved Reserved Reserved Reserved Reserved Reserved Reserved 访问权限 描述 3) 从上述输出结果,对照分析清单5-2的程序,请简单描述程序运行的流程:

____________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________

2. 虚拟内存的分配与释放

能正确使用系统函数GetMeoryStatus()和数据结构MEMORY_STATUS了解系统内存和虚拟存储空间使用情况,会使用VirsualAlloc()函数和VirsualFree()函数分配和释放虚拟内存空间。

// GetMemoryStatus.cpp : Defines the entry point for the console application.

//

#include \

#include \

#ifdef _DEBUG

#define new DEBUG_NEW #undef THIS_FILE

static char THIS_FILE[] = __FILE__; #endif


实验九存储管理报告(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:乳酸菌资源库建设及益生菌发酵剂和制剂产业化示范

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: