《操作系统实验报告11-系统内存使用统计.doc》由会员分享,可在线阅读,更多相关《操作系统实验报告11-系统内存使用统计.doc(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、操作系统 实验报告实验序号:11实验项目名称:系统内存使用统计学号姓名专业、班12软金2班实验地点实1#418指导教师李远敏实验时间2014-12-30一、实验目的及要求(1)了解Windows内存管理机制,理解页式存储管理技术。(2)熟悉Windows内存管理基本数据结构。(3)掌握Windows内存管理基本API的使用。二、实验设备(环境)及要求(1) 一台WindowsXP操作系统的计算机。(2) 计算机装有Microsoft Visual Studio C+6.0专业版或企业版。三、实验内容与步骤1、相关系统数据结构说明系统结构MEMORYSTATUS中包含当前物理内存和虚拟内存信息,
2、使用函数GlobalMemoryStatus()可以将这些信息存储在结构MEMORYSTATUS中。结构原型: Typedef struct MEMORYSTATUSDWORD dwLength; /MEMORYSTATUSDWORD dwMemoryLoad; /内存利用率DWORD dwTotalPhys; /物理内存大小DWORD dwAvailPhys; /空闲物理内存大小DWORD dwTotalPageFile; /页文件大小DWORD dwAvailPageFile; /空闲页文件大小DWORD dwTotalVirtual; /虚拟地址空间大小DWORD dwAvailVirt
3、ual; /空闲虚拟地址空间大小 MEMORYSTATUS, *LPMEMORYSTATUS; 成员说明:(1) dwLength:MEMORYSTATUS数据结构的大小,单位为字节。(2) dwMemoryLoad:当前内存利用率,取值范围为0100%,0表示内存没有被使用,100%表示内存全部被使用。(3) dwTotalPhys:物理内存的总字节数。(4) dwAvailPhys:可用物理内存的字节数。(5) dwToatlPageFile:页文件的总字节数。页文件是虚拟内在系统占用的磁盘空间。(6) dwAvailPageFile:页文件中可用字节数。(7) dwTotalVirtua
4、l:用户模式下调用进程可以访问的虚拟地址空间总字节数。(8) dwAvailVirtual:用户模式下调用进程虚拟地址空间中未提交和未保留的内存总字节数,即可用虚拟地址空间大小。2、相关API函数介绍(1) 获取系统物理内存和虚拟内存使用信息。 原型: VOID GlobalMemoryStatus(LPMEMORYSTATUS lpBuffer /指向MEMORYSTATUS数据结构);参数说明: LpBuffer:指向MEMORYSTATUS数据结构的指针,函数GlobalMemoryStatus()将内存的当前信息存储在该结构中。返回值: 该参数没有返回值一。(2) 保留或提交某一段虚拟
5、地址空间函数VirtualAlloc()可以在调用进程的虚拟地址空间中保留或提交若干页面。保留意味着这段虚拟地址不能被使用,当提交时,这段虚拟地址才真正被分配给该进程。原型:LPVOID VirtualAlloc( LPVOID lpAddress, /待分配空间的起始位置 DWORD dwSize, /待分配空间的大小 DWORD flAllocationType, /分配类型 DWORD flProtect /存取保护的类型参数说明: lpAddress:待分配空间的起始位置。若该值为NULL,系统将为其分配一合适的起始地址,否则用户要指定一个准确的起始地址。 dwSize:待分配空间的大
6、小。如果参数lpAddress不为NULL,则待分配空间在lpAddresslpAddress+dwSize范围内。 flAllocationType:分配类型,可以为表11-1所列标志的任意组合。表11-1 标志描述标志描述MEM COMMIT提交,即在内存或磁盘页文件中分配物理内存MEM RESERVE保留进程的虚拟地址空间,而不分配物理内存。保留的空间在没有被释放之前,不能被其他分配操作如Malloc()和LocalAlloc()使用。被保留的地址空间可随后使用VirtualAlloc()函数提交 flProtect:指定存取保护的类型。若虚拟地址空间已经被提交,则在指定下面任何一个属性
7、时要随同PAGE GUARD(页保护)和PAGE NOCACHE(页无缓存)这两个属性。存取保护的类型如表11-2所示。表11-2 存取保护位的类型标志描述PAGE READONLY被提交的虚拟地址空间只读PAGE READWRITE被提交的虚拟地址空间可读/写PAGE EXECUTE被提交的虚拟地址空间可执行PAGE EXECUTE READ被提交的虚拟空间可执行、可读PAGE EXECUTE READWRITE被提交的虚拟空间可执行、可读/写PAGE GUARD保护PAGE NOACCESS不允许访问PAGE NOCACHE无缓存 返回值: 如果函数调用成功,则返回值为已分配虚拟地址空间的
8、起始地址。如果函数调用失败,则返回值为NULL。若要得到更多的错误信息,可调用GetLastError()函数。(3) 释放或注销某一段虚拟地址空间 函数VirtualFree()用于释放或注销某一段虚拟地址空间。 原型: BOOL VirtualFree(LPVOID lpAddress, /待分配空间的起始位置DWORD dwSize, /待分配空间的大小DWORD dwFreeType /释放操作类型);参数说明: lpAddress:待释放空间的起始位置。如果dwFreeType值为MEM RELEASE,该参数必须使用VirtualAlloc()函数返回的地址。 dwSize:待释放
9、空间的大小。如果dwFree值为MEM RELEASE,该参数必须为0,否则待释放空间在lpAddresslpAddress+dwSize范围内。 dwFreeType:释放类型。可以为表11-3所示标志的任意组合。 表11-3 释放类型标志描述MEM DECOMMIT注销提交,如果注销一个没有提交的虚拟地址空间,也不会导致失败,即提交或没有提交的虚拟地址空间都可以注销MEM RELEASE释放保留的虚拟地址空间,如果使用该标志,dwSize参数必须为0,否则函数失败返回值:如果函数调用成功,则返回值为非零。如果函数调用失败,则返回值为零。若要得到更多的错误信息,可调用GetLastError
10、()函数。(4) 分配内存空间 原型:Void * malloc(size t size);参数说明: Size:要分配内存大小,单位为B(字节)。返回值: 该函数返回分配内存空间void类型的指针。如果返回NULL,说明没有有效的内存空间可供分配。(5) 释放内存空间 原型: Void free(void * memblock); 参数说明:* memblock:要释放的内存地址。 返回值: 无。 用法举例: / * MALLOC. C:This program allocates memorywith * malloc,then frees the memory with free. *
11、/ # include / * For MAX PATH definition * / # include # include Void main(void)Char * string; / * Allocate space for a pat name * / string=malloc( MAX PATH); /分配内存空间 if(string=NULL) prinf(“Insufficient memoryavailablen”); else printf(“Memory space allocated for path namen”):free(string);printf(“Memo
12、ry free n”);3、实验要求能正确使用系统函数GlobalMemoryStatus()和数据结构MEMORYSTATUS 了解系统内存和虚拟存储空间使用情况,会使用VirtualAlloc()函数VirtualFree()函数分配和释放虚拟存储空间。4、实验指导在Microsoft Visual C+6.0环境下选择Win32 Console Application 建立一个控制台工程文件,由于内存分配、释放及系统存储空间使用情况函数均是Microsoft Windows操作系统的系统调用,因此需要选择An application that supports MFC。四、程序调试(结果及分析)运行代码截图如下图1-1:图1-1运行结果截图如下图1-2:图1-2五、总结与体会总结、体会该实验是实现进程间的信息传递的,是由客户端与服务端之间进行通信的。其中要实现客户端与服务端之间的通信,需要同时打开客户端与服务端的窗口,在客户端的编辑框输入信息,点击发送信息,则信息发送到服务端,点击确定则关闭客户端(服务端)。六、教师评语签名:日期:成绩8