实验三存储管理.docx

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

实验三存储管理.docx

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

实验三存储管理.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-00310000

60.0KB

free

NOACCESS

没有任何权限的已调配的共有内存区

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-003a0000

32.0KB

Reserved

Private

只有具有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,Private

0012c000-0012d000(4.00KB)Committed,GUARD,READWRITE,Private

0012d000-00130000(12.0KB)Committed,READWRITE,Private

00130000-00135000(20.0KB)Committed,READONLY,Mapped

00135000-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,Private

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

003c0000-003c5000(20.0KB)Committed,READWRITE,Private

003c5000-003d0000(44.0KB)Reserved,READONLY,Private

003d0000-003d6000(24.0KB)Committed,READWRITE,Private

003d6000-003e0000(40.0KB)Reserved,READONLY,Private

003e0000-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,Image

00480000-00487000(28.0KB)Committed,EXECUTE_READ,Mapped

00487000-00540000(740KB)Reserved,READONLY,Mapped

00540000-00542000(8.00KB)Committed,EXECUTE_READ,Mapped

00542000-00548000(24.0KB)Reserved,READONLY,Mapped

00548000-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)Committed,WRITECOPY,Image

74b2e000-74b2f000(4.00KB)Committed,READWRITE,Image

74b2f000-74b45000(88.0KB)Committ

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

当前位置:首页 > 小学教育 > 语文

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

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