实验三存储管理.docx

上传人:b****6 文档编号:6322716 上传时间:2023-01-05 格式:DOCX 页数:13 大小:37.83KB
下载 相关 举报
实验三存储管理.docx_第1页
第1页 / 共13页
实验三存储管理.docx_第2页
第2页 / 共13页
实验三存储管理.docx_第3页
第3页 / 共13页
实验三存储管理.docx_第4页
第4页 / 共13页
实验三存储管理.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

实验三存储管理.docx

《实验三存储管理.docx》由会员分享,可在线阅读,更多相关《实验三存储管理.docx(13页珍藏版)》请在冰豆网上搜索。

实验三存储管理.docx

实验三存储管理

实验名称

实验三:

存储管理[1]WindowsServer2003内存结构[2]WindowsServer2003虚拟内存

二、[1]实验目的

1)通过实验了解windowsServer2003内存的使用,学习如何在应用程序中管理内存、体会Windows应用程序内存的简单性和自我防护能力。

2)了解windowsServer2003的内存结构和虚拟内存的管理,进而了解进程堆和windows为使用内存而提供的一些扩展功能。

三、[1]实验内容

1.使用任务管理器终止进程

2.显示其他进程计数器

3.更改正在运行的程序的优先级

四、[1]实验步骤

Windows提供了一个API即GetSystemInfo(),以便用户能检查系统中虚拟内存的一些特性。

程序5-1显示了如何调用该函数以及显示系统中当前内存的参数。

步骤1:

登录进入WindowsServer2003。

步骤2:

在“开始”菜单中单击“程序”-“MicrosoftVisualStudio6.0”–“MicrosoftVisualC++6.0”命令,进入VisualC++窗口。

步骤3:

在工具栏单击“打开”按钮,在“打开”对话框中找到并打开实验源程序5-1.cpp。

程序5-1:

获取有关系统的内存设置的信息

步骤4:

单击“Build”菜单中的“Compile5-1.cpp”命令,并单击“是”按钮确认。

系统对4-1.cpp进行编译。

步骤5:

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

操作能否正常进行?

如果不行,则可能的原因是什么?

答:

操作能正常进行。

步骤6:

在工具栏单击“ExecuteProgram”(执行程序)按钮,执行5-1.exe程序。

运行结果(分行书写。

如果运行不成功,则可能的原因是什么?

):

1)虚拟内存每页容量为:

4.00KB

2)最小应用地址:

0x00010000

3)最大应用地址为:

0x7ffeffff

4)当前可供应用程序使用的内存空间为:

3.92GB

5)当前计算机的实际内存大小为:

1.99GB

阅读和分析程序5-1,请回答问题:

1)理论上每个windows应用程序可以独占的最大存储空间是:

4GB

2)在程序5-1中,用于检索系统中虚拟内存特性的API函数是:

DWORD提示:

可供应用程序使用的内存空间实际上已经减去了开头与结尾两个64KB的保护区。

拟内存空间中的64KB保护区是防止编程错误的一种Windows方式。

任何对内存中这一区域的访问(读、写、执行)都将引发一个错误陷井,从而导致错误并终止程序的执行。

也就是说,假如用户有一个NULL指针(地址为0),但仍试图在此之前很近的地址处使用另一个指针,这将因为试图从更低的保留区域读写数据,从而产生意外错误并终止程序的执行。

五、[1]实验结论

通过本次实验我了解windowsServer2003内存的使用,同时学习了如何在应用程序中管理内存。

在实验的过程中,体会到了Windows应用程序内存的简单性和自我防护能力。

对于Windowssever2003的内存结构有了一定的了解。

二、[2]实验目的

1)通过实验了解WindowsServer2003内存的使用,学习如何在应用程序中管理内存,体会Windows应用程序内存的简单性和自我防护能力。

2)学习检查虚拟内存空间或对其进行操作。

3)了解WindowsServer2003的内存结构和虚拟内存的管理,进而了解进程堆和Windows为使用内存而提供的一些扩展功能。

三、[2]实验内容与实验步骤

1.虚拟内存的检测

清单5-2所示的程序使用VirtualQueryEX()函数来检查虚拟内存空间。

步骤1:

登录进入WindowsServer2003。

步骤2:

在“开始”菜单中单击“程序”-“MicrosoftVisualStudio6.0”–“MicrosoftVisualC++6.0”命令,进入VisualC++窗口。

步骤3:

在工具栏单击“打开”按钮,在“打开”对话框中找到并打开实验源程序5-2.cpp。

清单5-2检测进程的虚拟地址空间

清单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-00012000<8.00KB>Committed,READWRITE,Private可描述为:

具有READWRITE权限的已调配私有内存区。

将系统当前的自由区(Free)虚拟地址空间填入表3-3中。

表3-3实验记录

地址

大小

虚拟空间类型

访问权限

描述

00012000

00020000

56.0KB

free

NOACCESS

没有任何权限的已

调配的共有内存区

00021000

00030000

60.0KB

free

NOACCESS

没有任何权限的已

调配的共有内存区

00135000

00140000

44.0KB

free

NOACCESS

没有任何权限的已

调配的共有内存区

00266000

00270000

40.0KB

free

NOACCESS

没有任何权限的已

调配的共有内存区

002b1000-

002c0000

60.0KB

free

NOACCESS

没有任何权限的已

调配的共有内存区

00301000-

60.0KB

free

NOACCESS

没有任何权限的已

00310000

调配的共有内存区

00316000

00320000

40.0KB

free

NOACCESS

没有任何权限的已

调配的共有内存区

将系统当前的已调配区(Committed)虚拟地址空间填入表3-4中。

表3-4实验记录

地址

大小

虚拟空间类型

访问权限

描述

00010000

00012000

8.00KB

Committed

Private

只有具有

READWRITE权限的已调配私有内存区

00020000

00021000

4.00KB

Committed

Private

只有具有

READWRITE权限的已调配私有内存区

0012c000-

0012d000

4.00KB

Committed

Private

具有GUARD,READEWRITE权限的已调配私有内存区

0012d000-

00130000

12.0KB

Committed

Private

只有具有

READWRITE权限的已调配私有内存区

00130000

00135000

20.0KB

Committed

Mapped

只有具有

READONLY权限的已调配映射内存区

00140000

00147000

28.0KB

Committed

Private

只有具有

READWRITE权限的已调配私有内存区

00240000

00243000

12.0KB

Committed

Mapped

只有具有

READWRITE权限的已调配映射内存区

将系统当前的保留区(Reserved)虚拟地址空间填入表3-5中。

表3-5实验记录

地址

大小

虚拟空间类型

访问权限

描述

00030000-

0012c000

0.98MB

Reserved

Private

只有具有

READONLY权限的已调配私有内存区

00147000

00240000

996KB

Reserved

Private

只有具有

READONLY权限的已调配私有内存区

00243000

00250000

52.0KB

Reserved

Mapped

只有具有

READONLY权限的已调配映射内存区

00373000

00380000

52.0KB

Reserved

Private

只有具有

READONLY权限的已调配私有内存区

00398000-

32.0KB

Reserved

Private

只有具有

003a0000

READONLY权限的已调配私有内存区

003c5000-

003d0000

44.0KB

Reserved

Private

只有具有

READONLY权限的已调配私有内存区

003d6000-

003e0000

40.0KB

Reserved

Private

只有具有

READONLY权限的已调配私有内存区

2)从上述输出结果,对照分析清单5-2的程序,请简单描述程序运行的流程:

答:

该程序从主函数Main()出发,调用voidWalkVM(HANDLEhProcess)函数,voidWalkVM(HANDLEhProcess)函数获得系统信息,分配应用程序内存地址空间。

然后开始做循环,从函数运行开始每次获得下一个虚拟程序内存块的信息,之后计算块的结尾及大小,然后再显示块的大小与位置,状态,显示保护方式(voidShowProtection(DWORDdwTarget)),将文件名显示出来,移动块指针获得下一块,依次这样循环下去,直至结束。

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

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

步骤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

AvailableVirsualmemoryis2031MB

MemoryLoadis22%

NowAllocate32MVirsualMemoryand2MPhysicalMemory

CurrentMemoryStatusis:

TotalPhysicalMemoryis2047MB

AvailablePhysicalMemoryis2047MB

TotalPageFileis4095MB

AvailablePageFileis4095MB

TotalVirtualMemoryis2047MB

AvailableVirsualmemoryis1997MB

MemoryLoadis22%

NowRelease32MVirsualMemoryand2MPhysicalMemory

CurrentMemoryStatusis:

TotalPhysicalMemoryis2047MB

AvailablePhysicalMemoryis2047MB

TotalPageFileis4095MB

AvailablePageFileis4095MB

TotalVirtualMemoryis2047MB

AvailableVirsualmemoryis2031MB

MemoryLoadis22%

Pressanykeytocontinue

2)根据运行输出结果,若要改变分配和回收的虚拟内存和物理内存的大小,要改变程序代码的语句,分别为:

答:

要改变的分配虚拟内存的程序代码语句为:

if(BaseAddr==NULL)printf("VirsualAllocateFail.\n");

str=(char*)malloc(1024*1024*2);

GetMemSta();要改变的回收虚拟内存的程序代码语句为:

if(:

:

VirtualFree(BaseAddr,0,MEM_RELEASE)==0)printf("ReleaseAllocateFail.\n");

free(str);

3)根据运行输出结果,对照分析5-2程序,可以看出程序运行的流程吗?

请简单描述:

答:

程序开始运行,分配虚拟内存为32M,物理内存为2M,后进行虚拟内存释放,

释放了32M虚拟内存,2M物理内存。

四、[2]实验结论

通过本次实验了解windowsServer2003的内存结构和虚拟内存的管理,较为清楚的理解了在windowssever2003中虚拟内存的检测以及其内存分配和内存释放的运行过程。

进而了解进程堆和windows为使用内存而提供的一些扩展功能。

在程序运行的过程中,首先会检测到需要使用的虚拟内存,其次通过调用函数去分配当前部分所需要的虚拟内存大小,之后进行虚拟内存的分配,最后,运行结束,释放虚拟内存。

在这整个过程中,能够节约内存的使用,增加了处理事务的效率。

附录:

5-2.cpp运行结果

00010000-00012000(8.00KB)Committed,READWRITE,Private

00012000-00020000(56.0KB)Free,NOACCESS

00020000-00021000(4.00KB)Committed,READWRITE,Private

00021000-00030000(60.0KB)Free,NOACCESS

00030000-0012c000(0.98MB)Reserved,READONLY,Private0012c000-0012d000(4.00KB)Committed,GUARD,READWRITE,Private0012d000-00130000(12.0KB)Committed,READWRITE,Private00130000-00135000(20.0KB)Committed,READONLY,Mapped00135000-00140000(44.0KB)Free,NOACCESS

00140000-00147000(28.0KB)Committed,READWRITE,Private

00147000-00240000(996KB)Reserved,READONLY,Private

00240000-00243000(12.0KB)Committed,READWRITE,Mapped

00243000-00250000(52.0KB)Reserved,READONLY,Mapped

00250000-00266000(88.0KB)Committed,READONLY,Mapped

00266000-00270000(40.0KB)Free,NOACCESS

00270000-002b1000(260KB)Committed,READONLY,Mapped

002b1000-002c0000(60.0KB)Free,NOACCESS

002c0000-00301000(260KB)Committed,READONLY,Mapped

00301000-00310000(60.0KB)Free,NOACCESS

00310000-00316000(24.0KB)Committed,READONLY,Mapped

00316000-00320000(40.0KB)Free,NOACCESS

00320000-00361000(260KB)Committed,READONLY,Mapped

00361000-00370000(60.0KB)Free,NOACCESS

00370000-00373000(12.0KB)Committed,READWRITE,Private

00373000-00380000(52.0KB)Reserved,READONLY,Private

00380000-00383000(12.0KB)Committed,READONLY,Mapped

00383000-00390000(52.0KB)Free,NOACCESS

00390000-00398000(32.0KB)Committed,READWRITE,Private

00398000-003a0000(32.0KB)Reserved,READONLY,Private

003a0000-003a1000(4.00KB)Committed,READWRITE,Private

003a1000-003b0000(60.0KB)Free,NOACCESS

003b0000-003b1000(4.00KB)Committed,READWRITE,Private003b1000-003c0000(60.0KB)Free,NOACCESS

003c0000-003c5000(20.0KB)Committed,READWRITE,Private003c5000-003d0000(44.0KB)Reserved,READONLY,Private003d0000-003d6000(24.0KB)Committed,READWRITE,Private003d6000-003e0000(40.0KB)Reserved,READONLY,Private003e0000-00400000(128KB)Free,NOACCESS

00400000-00401000(4.00KB)Committed,READONLY,Image,Module:

5-2.exe

00401000-0046d000(432KB)Committed,EXECUTE_READ,Image

0046d000-00475000(32.0KB)Committed,READONLY,Image

00475000-0047c000(28.0KB)Committed,READWRITE,Image

0047c000-00480000(16.0KB)Committed,READONLY,Image00480000-00487000(28.0KB)Committed,EXECUTE_READ,Mapped00487000-00540000(740KB)Reserved,READONLY,Mapped00540000-00542000(8.00KB)Committed,EXECUTE_READ,Mapped00542000-00548000(24.0KB)Reserved,READONLY,Mapped00548000-00550000(32.0KB)Free,NOACCESS

00550000-00653000(1.01MB)Committed,READONLY,Mapped

00653000-00660000(52.0KB)Free,NOACCESS

00660000-006e1000(516KB)Committed,EXECUTE_READ,Mapped

006e1000-00960000(2.49MB)Reserved,READONLY,Mapped

00960000-00968000(32.0KB)Committed,READWRITE,Private

00968000-00a60000(992KB)Reserved,READONLY,Private

00a60000-74ae0000(1.81GB)Free,NOACCESS

74ae0000-74ae1000(4.00KB)Committed,READONLY,Image,Module:

USP10.dll

74ae1000-74b25000(272KB)Committed,EXECUTE_READ,Image

74b25000-74b28000(12.0KB)Committed,WRITECOPY,Image

74b28000-74b2a000(8.00KB)Committed,READWRITE,Image

74b2a000-74b2e000(16.0KB)Committe

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 商业计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1