四川大学操作系统实验报告 下载本文

实验报告

实验名称:Windows虚拟存储器管理 实验时间: 2014 年 5 月 28 日

实验人员: 张熙 (姓名) 2012141461286 (学号)____2012____(年级) 实验目的:

1、了解Windows 2000/XP的内存管理机制,掌握页式虚拟存储技术。 2、理解内存分配原理,特别是以页面为单位的虚拟内存分配方法。 3、学会使用Windows 2000/XP下内存管理的基本API函数。

实验环境: VC6.0 实验步骤:

1、下载virtumem.cpp; 2、建立工程,将virtumen.cpp加入; 3、编译工程,观察结果,确信六种状态都出现至少一次,必要时可改程序,方便观察结果; 4、看懂程序,按要求另写一段小程序; 5、编译,执行,观察结果。 6,总结。

实验陈述:

1、基础知识:

pagefile.sys文件的位置在:____系统盘的根目录下,属性为系统隐藏文件

此文件的作用:__以磁盘文件的形式来存储没有装入内存的程序和数据文件部分 改变此文件大小的方法: 方法是:右击“我的电脑”,依次选择“属性”->“高级”->“性能-选项”->“高级”->“虚拟内存-更改” 虚拟地址空间中的页面分为:提交页面,___保留页面________,______空闲页面_______

页面的操作可以分为: 保留、提交、回收、释放、加锁、解锁

2、编程准备.

页面属性是在结构体______MEMORY_BASIC_INFORMATION_______的字段 AllocationProtect 和字段 Protect 中体现出来的。

简述VirtualFree,VirtualPtotect,VirtualLock,VirtualUnlock,VirtualQuery的作用: VirtualFree:解除已被提交的虚存或者释放被保留或者提交虚拟地址空间。VirtualFree还可以用来对已提交的虚拟地址页解除提交,使得该段地址空间变成保留状态。(注:一旦地址页面被保留或者已被提交,则VirtualFree函数是唯一可以释放它们的函数,即将它们返回到自由地址状态的方法;当解除地址的提交时,所有与该地址相关的物理内存都会被释放。)

VirtualPtotect:改变虚拟内存页的保护方式。例如,一个应用程序可以按PAGE_READWRITE保护方式来提交一个页的地址,并且立即将数据填写到该页中。然后该页的保护将被改变为PAGE_READONLY,

这样可以有效地保护数据不被该进程中的任何线程重写。

VirtualLock/ VirtualUnlock:锁定和解锁虚拟内存页。 VirtualQuery:查询一个进程的虚拟内存。

3、编程

1)将virtumem.cpp加入工程,编译,执行。

是否能编译成功? 能 请描述运行结果:

根据监控线程给出的虚拟活动和变化的信息,可知随机的不同的虚拟活动导致了程序虚拟空间和系统存储资源的变化,就算是同样的虚拟活动也有不同的统计结果。程序运行结果展示了目前执行的虚存动作和一些状态,同时也给出了整个内存系统的各个全局统计量,包括物理内存使用量和页面文件使用情况等。 请通过运行结果描述六种虚拟操作后虚拟存储空间和系统存储资源的变化: 六种操作运行结果如下:

分析结果,以两张图片结果为例,其余分析类似,不一一说明。

图1

图2

由上可以明显看出两个相同的模拟活动中的变化,在物理内存、页面文件总数、虚拟空间总数不变的情况下,在图中程序进行一次虚存提交后,图1可用物理内存、可用页面文件数、可用虚拟空间数都多于图2中的虚拟提交后的统计数。这是因为在图1 的活动中的进程数少或者进程占用空间少,在物理内存中占用少,在虚拟内存上也如此。而图2的活动中在各个存储空间上进程都占用了较大的空间,或者进程数大,从而导致了各个可用存储空间变小。如果程序在进行一次虚存提交过后,显示的可用物理存储反而变多了,这是因为Windows的内存管理发现某个进程在一段时间没有运行后,会将它的部分页面转移到页面文件中,此时可用页面文件总数会减少。

2)编写小程序得到当前系统整体存储统计如下

附源程序:

#include #include

int main(int argc, char* argv[])

{ }

MEMORYSTATUS Vmeminfo; GlobalMemoryStatus(&Vmeminfo);

printf(\当前系统存储空间使用概况\\n\

printf(\物理内存总数:%d(BYTES)\\n\ printf(\可用物理内存:%d(BYTES)\\n\ printf(\页面文件总数:%d(BYTES)\\n\ printf(\可用页面文件数:%d(BYTES)\\n\ printf(\虚存空间总数:%d(BYTES)\\n\

printf(\可用虚存空间数:%d(BYTES)\\n\ printf(\物理存储使用负荷:%%%d\\n\\n\\n\\n\ getchar(); return 0;

实验总结: 经过这次实验我了解了Windows 2000/XP的内存管理机制和内存分配原理以及内存分配的内容。主要是以页面为单位的虚拟内存分配方法。学会使用Windows 2000/XP下内存管理的基本API函数。但是实验过程中还有很多不明白的地方,需要进一步的了解和学习。