实验六:系统内存使用统计


一、实验目的

(1).了解Windows内存管理机制,理解页式存储管理技术。
(2).熟悉Windows内存管理基本数据结构。
(3).掌握Windows内存管理基本API的使用。

二、实验准备

1.Windows内存管理基本数据结构系统结构MEMORYSTATUS中包含当前物理内存和虚拟内存和虚拟内存信息,使用函数GlobaiMemoryStatus()可以将这些信息存储在结构MEMORYSTATUS中。
结构原型:
Typedef struct_MRMORYSTATUS{
DWORD dwLength;                        //MOMORYSTATUS结构大小,单位为字节
DWORD dwMemoryLoad;                   //内存利用率
DWORD dwTotalPhys;                      //物理内存大小
DWORD dwAvailPhys;                      //空闲物理内存大小
DWORD dwTotalPageFile;                   //页文件大小
DWORD dwAvailPageFile;                   //空闲页文件大小
DWORD dwTotalVirtual;                    //虚拟地址空间大小
DWORD dwAvailVirtual;                    //空闲虚拟地址空间大小
} MEMORYSTATUS, *LPMEMORYSTAYUS;2.Windows内存管理基本API的使用
(1).获取系统物理内存和虚拟内存使用信息原型:VID GlobalMemoryStatus(LPMEMORYSTATUS lpBuffer         //指向MEMORYSTATUS数据结构的指针);
(2).保留或提交某一点虚拟地址空间 函数VirtualAlloc()可以在调用进程的虚拟地址空间中保留或提交若干页面。保留意味着这段虚拟地址地址不能被使用,当提交时,这段虚拟地址才真正被分配给进程。原型: VPVOID VirtuaiAlloc( LPVOID lpAddress,                    //待分配空间的起始位置DWORD dwSize,                      //待分配空间的大小DWORD flAllocationType,              //分配类型DWORD flaProtect                    //存取保护的类型);返回值:如果函数调用成功,则返回值为已分配虚拟地址空间的起始地址。如果函数调用失败,则返回值为NULL。
(3).释放或注销某一段虚拟地址空间 函数VirtualFree()用于释放或注销某一段虚拟地址空间。原型:BOOL VirtualFree(LPVOID lpAddress,               //待分配空间的起始位置DWORD dwSize,                  //待分配空间的大小DWORD dwFreeType              //释放操作类型);返回值:如果函数调用成功,则返回值为非零。如果函数调用失败,则返回值为零。
(4).分配内存空间原型:void *malloc(site_t size   //要分配内存大小,单位为B(字节));返回值:该函数返回分配内存空间void类型的指针。如果返回NULL,说明没有有效的内存空间可供分配。
(5).释放内存空间原型:Void free(void * memblock    //*memblock:要释放的内存地址。);

三、实验内容

(一)实验内容
   使用Windows系统提供的函数和数据结构显示系统存储空间的使用情况,当内存和虚拟存储空间变化时,观察系统显示变化情况。能正确使用系统函数GlobalMemoryStatus()和数据结构MEMORYSTATUS了解系统内存和虚拟存储空间使用情况,会使用VirtualAllocation()函数和VirtualFree()函数分配和释放虚拟存储空间。
(二)主要代码
// 06.cpp : Defines the entry point for the console application.
//#include "stdafx.h"
#include "06.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endifvoid GetMemSta(void);CWinApp theApp;
using namespace std;int _tmain(int arcg, TCHAR* argv[],TCHAR* envp[])
{int nRetCode = 0;LPVOID BaseAddr;char * str;GetMemSta() ;printf("Now 分配66MB虚拟内存和5MB物理内存后:\n\n");BaseAddr = VirtualAlloc(NULL,1024*1024*66,MEM_RESERVE,PAGE_READWRITE);if (BaseAddr == NULL)printf ("Virtual Allocate Fail\n");str = (char * )malloc(1024*1024*5);GetMemSta();printf("Now 释放66MB虚拟内存和5MB物理内存后:\n\n");if (VirtualFree(BaseAddr,0,MEM_RELEASE) == 0)printf("Release Allocation Fail\n");free (str);GetMemSta();return nRetCode;
}void GetMemSta(void)
{MEMORYSTATUS MemInfo;GlobalMemoryStatus (&MemInfo);printf("当前内存状态为: \n");printf("\t Total Physical Memory is %d MB\n",MemInfo.dwTotalPhys/(1024*1024));printf("\t Available Physical Memoryis %d MB\n", MemInfo.dwAvailPhys/(1024*1024));printf("\t Total Page File is %d MB\n",MemInfo.dwTotalPageFile/(1024*1024));printf("\t Available Page File is %d MB\n",MemInfo.dwAvailPageFile/(1024*1024));printf("\t Total Virtual Memory is %d MB\n",MemInfo.dwTotalVirtual/(1024*1024));printf("\t Available Virtual Memory is %d MB\n",MemInfo.dwAvailVirtual/(1024*1024));printf("\t Memory Load is %d % %\n\n",MemInfo.dwMemoryLoad);
}

四、实验结果与总结

(1).程序开始运行时,显示可用物理内存为330MB,可用页文件大小为1091MB,可用虚拟内存为2031MB。
(2).当分别使用函数VirtualAlloc()和malloc()分配了66MB虚拟内存和5MB物理内存后,系统显示可用物理内存为325MB,可用页文件大小为1086MB,可用虚拟内存为1960MB。
(3).当分别使用函数VirtualFree()和free()释放了66MB虚拟内存和5MB物理内存后,系统的显示情况又恢复到了(1)的情况。通过本次实验学会使用Windows系统提供的函数和数据结构显示系统存储空间的使用情况,学会了使用系统函数GlobalMemoryStatus()和数据结构MEMORYSTATUS了解系统内存和虚拟存储空间使用情况,会使用VirtualAllocation()函数和VirtualFree()函数分配和释放虚拟存储空间。

操作系统实验:系统内存使用统计相关推荐

  1. 操作系统实验六、系统内存使用统计

    实验六:系统内存使用统计 一.实验目的 1.了解windows内存管理机制,理解页式存储管理技术. 2.熟悉Windows内存管理基本数据结构. 3.掌握WIndows内存管理基本API的使用. 二. ...

  2. java的内存管理_操作系统实验——java内存管理

    1.Test.java import java.util.Scanner; public class Test { public static void main(String[] args) { T ...

  3. 【操作系统】实验六 系统内存使用统计

    实验六 一.实验目的 (1)了解Windows内存管理机制,理解页式存储管理技术. (2)熟悉Windows内存管理基本数据结构. (3)掌握Windows内存管理基本API的使用. 二.实验准备 相 ...

  4. 操作系统实验五·xv6系统内存布局修改·栈空间位置变更与栈不足时扩充

    xv6系统内存布局修改·栈空间位置变更与栈不足时扩充 1.实验目的 2.实验内容 3. 实验手册 4. 实验环境 5. 程序设计和实现 5.1系统函数修改 5.2 编译运行 6. 实验结果和分析 1. ...

  5. 操作系统实验四 进程运行轨迹的跟踪与统计(哈工大李治军)

    实验4 进程运行轨迹的跟踪与统计 实验目的 掌握 Linux 下的多进程编程技术: 通过对进程运行轨迹的跟踪来形象化进程的概念: 在进程运行轨迹跟踪的基础上进行相应的数据统计,从而能对进程调度算法进行 ...

  6. 操作系统实验3:进程运行轨迹的跟踪与统计

    参考 哈工大操作系统实验 B站UP主的视频讲解 Linux内核完全注释:基于0.11内核(修正版V3.0) https://www.cnblogs.com/wanghuizhao/p/16644919 ...

  7. 操作系统实验报告7:进程间通信—共享内存。实现一个带有n个单元的线性表的并发维护。

    操作系统实验报告7 实验内容 实验内容:进程间通信-共享内存.实现一个带有n个单元的线性表的并发维护. 建立一个足够大的共享内存空间(lock, M),逻辑值lock用来保证同一时间只有一个进程进入M ...

  8. 操作系统实验报告6:进程间通信—共享内存

    操作系统实验报告6 实验内容 实验内容:进程间通信-共享内存. (1).验证:编译运行课件 Lecture 08 例程代码: Linux 系统调用示例 reader-writer 问题:Algorit ...

  9. linux系统使用实验报告操作系统,linux操作系统实验报告1.doc

    linux操作系统实验报告1.doc 实验LINUXSHELL基本命令使用实验目的熟悉LINUX操作系统环境,掌握LINUX的基本命令.实验提示1.LINUX命令行的语法结构COMMANDOPTION ...

  10. 操作系统实验·Linux进程通信与内存管理

    预备知识 Linux进程的数据结构 在Linux中,进程用task_struct表示,所有进程被组织到以init_task为表头的双向链表中(见[include/linux/sched.h]SET_L ...

最新文章

  1. 20151130语法基础
  2. Web开发框架 SSH 简介
  3. 树莓派上搭建svn服务器
  4. Hadoop基于Shell命令与底层Unix操作系统的交互
  5. LeetCode 1751. 最多可以参加的会议数目 II(DP + 二分查找)
  6. iptables防火墙配置工具ShoreWall的安装和使用实例
  7. Luogu3403跳楼机
  8. Java连接数据库(增删改查)
  9. c语言 防止sql注入,c#如何防止sql注入?
  10. IE浏览器与IE内核浏览器有什么区别
  11. 【编程语言】品诺试题
  12. Java 9 与 Java 10
  13. 【Geoserver】GeoServer安装GDAL扩展的方法总结
  14. Service id not legal hostname (service_cmn)
  15. Xiaojie雷达之路---MATLAB仿真---给信号添加高斯白噪声
  16. 送书来了|Python数据分析必备工具书
  17. 不是那个层次的人,也便没机会领略…
  18. 【Linux】解决VirtualBox下Ubuntu开机后黑屏
  19. 点焊机器人焊接超时_焊接机器人常见故障原因及解决措施
  20. 2022.4.30 转眼四月就已是最后一天了

热门文章

  1. 无刷直流电机与永磁同步电机比较
  2. Xshell7的下载和安装
  3. android 环信集成demo,集成环信即时通讯(导入demo到AndroidStudio)
  4. python中scale啥意思_scale什么意思
  5. mysql 数据汇总与分组
  6. vue3 中使用pinia报错 pinia.mjs:1696 Uncaught Error: []: getActivePinia was called with no active Pinia.
  7. LSL-- Events
  8. python报KeyError: ('Age', 'occurred at index PassengerId')错误
  9. 《上瘾:让用户养成使用习惯的四大产品逻辑》读书笔记
  10. HDU6069(区间筛)