操作系统实验:系统内存使用统计
实验六:系统内存使用统计
一、实验目的
(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.了解windows内存管理机制,理解页式存储管理技术. 2.熟悉Windows内存管理基本数据结构. 3.掌握WIndows内存管理基本API的使用. 二. ...
- java的内存管理_操作系统实验——java内存管理
1.Test.java import java.util.Scanner; public class Test { public static void main(String[] args) { T ...
- 【操作系统】实验六 系统内存使用统计
实验六 一.实验目的 (1)了解Windows内存管理机制,理解页式存储管理技术. (2)熟悉Windows内存管理基本数据结构. (3)掌握Windows内存管理基本API的使用. 二.实验准备 相 ...
- 操作系统实验五·xv6系统内存布局修改·栈空间位置变更与栈不足时扩充
xv6系统内存布局修改·栈空间位置变更与栈不足时扩充 1.实验目的 2.实验内容 3. 实验手册 4. 实验环境 5. 程序设计和实现 5.1系统函数修改 5.2 编译运行 6. 实验结果和分析 1. ...
- 操作系统实验四 进程运行轨迹的跟踪与统计(哈工大李治军)
实验4 进程运行轨迹的跟踪与统计 实验目的 掌握 Linux 下的多进程编程技术: 通过对进程运行轨迹的跟踪来形象化进程的概念: 在进程运行轨迹跟踪的基础上进行相应的数据统计,从而能对进程调度算法进行 ...
- 操作系统实验3:进程运行轨迹的跟踪与统计
参考 哈工大操作系统实验 B站UP主的视频讲解 Linux内核完全注释:基于0.11内核(修正版V3.0) https://www.cnblogs.com/wanghuizhao/p/16644919 ...
- 操作系统实验报告7:进程间通信—共享内存。实现一个带有n个单元的线性表的并发维护。
操作系统实验报告7 实验内容 实验内容:进程间通信-共享内存.实现一个带有n个单元的线性表的并发维护. 建立一个足够大的共享内存空间(lock, M),逻辑值lock用来保证同一时间只有一个进程进入M ...
- 操作系统实验报告6:进程间通信—共享内存
操作系统实验报告6 实验内容 实验内容:进程间通信-共享内存. (1).验证:编译运行课件 Lecture 08 例程代码: Linux 系统调用示例 reader-writer 问题:Algorit ...
- linux系统使用实验报告操作系统,linux操作系统实验报告1.doc
linux操作系统实验报告1.doc 实验LINUXSHELL基本命令使用实验目的熟悉LINUX操作系统环境,掌握LINUX的基本命令.实验提示1.LINUX命令行的语法结构COMMANDOPTION ...
- 操作系统实验·Linux进程通信与内存管理
预备知识 Linux进程的数据结构 在Linux中,进程用task_struct表示,所有进程被组织到以init_task为表头的双向链表中(见[include/linux/sched.h]SET_L ...
最新文章
- 20151130语法基础
- Web开发框架 SSH 简介
- 树莓派上搭建svn服务器
- Hadoop基于Shell命令与底层Unix操作系统的交互
- LeetCode 1751. 最多可以参加的会议数目 II(DP + 二分查找)
- iptables防火墙配置工具ShoreWall的安装和使用实例
- Luogu3403跳楼机
- Java连接数据库(增删改查)
- c语言 防止sql注入,c#如何防止sql注入?
- IE浏览器与IE内核浏览器有什么区别
- 【编程语言】品诺试题
- Java 9 与 Java 10
- 【Geoserver】GeoServer安装GDAL扩展的方法总结
- Service id not legal hostname (service_cmn)
- Xiaojie雷达之路---MATLAB仿真---给信号添加高斯白噪声
- 送书来了|Python数据分析必备工具书
- 不是那个层次的人,也便没机会领略…
- 【Linux】解决VirtualBox下Ubuntu开机后黑屏
- 点焊机器人焊接超时_焊接机器人常见故障原因及解决措施
- 2022.4.30 转眼四月就已是最后一天了
热门文章
- 无刷直流电机与永磁同步电机比较
- Xshell7的下载和安装
- android 环信集成demo,集成环信即时通讯(导入demo到AndroidStudio)
- python中scale啥意思_scale什么意思
- mysql 数据汇总与分组
- vue3 中使用pinia报错 pinia.mjs:1696 Uncaught Error: []: getActivePinia was called with no active Pinia.
- LSL-- Events
- python报KeyError: ('Age', 'occurred at index PassengerId')错误
- 《上瘾:让用户养成使用习惯的四大产品逻辑》读书笔记
- HDU6069(区间筛)