操作系统原理实验系统内存使用统计5.docx
《操作系统原理实验系统内存使用统计5.docx》由会员分享,可在线阅读,更多相关《操作系统原理实验系统内存使用统计5.docx(7页珍藏版)》请在冰豆网上搜索。
操作系统原理实验系统内存使用统计5
操作系统原理实验-系统内存使用统计5
上海电力学院
计算机操作系统原理
实验报告
题目:
动态链接库的建立与调用
院系:
计算机科学与技术学院
专业年级:
信息安全2010级
学生姓名:
李鑫 学号:
20103277
同组姓名:
无
2012年 11月 28日
上海电力学院
实验报告
课程名称计算机操作系统原理 实验项目线程的同步
姓名李鑫学号20103277班级2010251班专业信息安全
同组人姓名无指导教师姓名徐曼实验日期2012/11/28
实验目的和要求:
(l)了解Windows内存管理机制,理解页式存储管理技术。
(2)熟悉Windows内存管理基本数据结构。
(3)掌握Windows内存管理基本API的使用。
实验原理与内容
使用Windows系统提供的函数和数据结构显示系统存储空间的使用情况,当内存和虚拟存储空间变化时,观察系统显示变化情况。
实验平台与要求
能正确使用系统函数GlobalMemoryStatus()和数据结构MEMORYSTATUS了解系统内存和虚拟空间使用情况,会使用VirtualAlloc()函数和VirtualFree()函数分配和释放虚拟存储空间。
操作系统:
Windows2000或WindowsXP
实验平台:
VisualStudioC++6.0
实验步骤与记录
1、启动安装好的VisualC++6.0。
2、选择File->New,新建Win32ConsoleApplication程序,由于内存分配、释放及系统存储空间使用情况均是MicrosoftWindows操作系统的系统调用,因此选择AnapplicationthatsupportMFC。
单击确定按钮,完成本次创建。
3、创建一个支持MFC的工程,单击完成。
4、打开编辑环境后,编辑程序,并且编译、链接并运行该程序。
5、
实验分析与结论
该程序完成了内存空间的显示、申请及释放。
开始时,可用物理内存为747M,可用页文件大小为2524M,可用虚拟内存为2021M。
使用函数VirtualAlloca()和malloc()分配了32M虚拟内存和2M物理内存后,系统显示可用物理内存为745M,少了2M,可用页文件大小为2490M,少了34M,可用虚拟内存为1987M,少了32M,当使用了VirtualAlloc()和free()函数后,只有可用物理内存没有达到预定的747M,只为746M,少了1M,其他恢复申请前状况。
当多次运行程序后发现,可用物理内存有时候有可以恢复,所以得出与系统有关系,不是程序的关系。
主要源代码:
//GetMemoryStatus.cpp:
Definestheentrypointfortheconsoleapplication.
//
#include"stdafx.h"
#include"GetMemoryStatus.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//Theoneandonlyapplicationobject
CWinApptheApp;
usingnamespacestd;
voidGetMemSta(void);
int_tmain(intargc,TCHAR*argv[],TCHAR*envp[])
{
intnRetCode=0;
LPVOIDBaseAddr;
char*str;
GetMemSta();
printf("NowAllocate32MVirtualMemoryand2MPhysicalMemory\n\n");
BaseAddr=VirtualAlloc(NULL,
1024*1024*32,
MEM_RESERVE|MEM_COMMIT,
PAGE_READWRITE);
if(BaseAddr==NULL)
{
printf("VirtualAllocateFail\n");
}
str=(char*)malloc(1024*1024*2);
GetMemSta();
printf("NowRelease32MVirtualMemoryand2MPhysicalMemory\n\n");
if(VirtualFree(BaseAddr,0,MEM_RELEASE)==0)
{
printf("ReleaseAllocateFail\n");
}
free(str);
GetMemSta();
returnnRetCode;
}
voidGetMemSta()
{
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("\tAvailableVirtualmemoryis%dMB\n",MemInfo.dwAvailVirtual/(1024*1024));
printf("\tMemoryLoadis%d%%\n\n",MemInfo.dwMemoryLoad);
}
注:
实验报告内容原则上包括:
实验目的与要求、实验原理与内容、实验步骤与记录、实验分析与结论等。