操作系统实验四存储管理.docx
《操作系统实验四存储管理.docx》由会员分享,可在线阅读,更多相关《操作系统实验四存储管理.docx(21页珍藏版)》请在冰豆网上搜索。
![操作系统实验四存储管理.docx](https://file1.bdocx.com/fileroot1/2022-12/14/49ebf2b0-e8b7-4619-a12c-e19cc7625f75/49ebf2b0-e8b7-4619-a12c-e19cc7625f751.gif)
操作系统实验四存储管理
宁德师范学院计算机系
实验报告
(2014—2015学年第二学期)
课程名称操作系统
实验名称实验四存储管理
专业计算机科学与技术(非师)
年级2012级
学号B2012102147姓名王秋
指导教师王远帆
实验日期2015-05-20
实验目的与要求:
(1)通过对Windows7“任务管理器”、“计算机管理”、“我的电脑”属性、“系统信息”、“系统监视器”等程序的应用,学习如何察看和调整Windows的内存性能,加深对操作系统存储管理、虚拟存储管理等理论知识的理解。
(2)了解Windows7的内存结构和虚拟内存的管理,理解进程的虚拟内存空间和物理内存的映射关系。
实验设备(环境):
(1)一台安装有CygwinTerminal的计算机
(2)Windows7操作系统
(3)VC++6.0
实验内容:
(1)观察和调整Windows的内存性能。
(2)了解和检测进程的虚拟内存空间。
实验步骤、实验结果及分析:
(1)观察和调整Windows的内存性能。
1:
阅读“背景知识”,请回答:
1)什么是“分页过程”?
分页过程就是将信息从主内存移动到磁盘进行临时存储的过程。
2)什么是“内存共享”?
允许访问某些内存空间而不危及它和其他应用程序的安全性和完整性。
3)什么是“未分页合并内存”和“分页合并内存”?
Windows2000中,未分页合并内存的最大限制是多少?
未分页合并内存:
分页合并内存是存储迟早需要的可分页代码或数据的内存部分。
分页合并内存:
未分页合并内存包含必须驻留在内存中的占用代码或数据。
在Windows7中为分业合并内存的最大限制是256MB。
1)Windows分页文件默认设置的最小容量和最大容量是多少?
内存数量的1.5倍作为分页文件的最小容量,这个最小容量的两倍作为最大容量。
2:
登录进入WindowsProfessional。
3:
查看包含多个实例的应用程序的内存需求。
1)启动想要监视的应用程序,例如Word。
2)右键单击任务栏以启动“任务管理器”。
3)在“Windows任务管理器”对话框中选定“进程”选项卡。
4)向下滚动在系统上运行的进程列表,查找想要监视的应用程序。
请在表4-3中记录:
表4-3实验记录
映像名称
PID
CPU
CPU时间
内存使用
WINWORD.EXE
5160
00
0:
00:
10
22772k
图1word运行情况
“内存使用”列显示了该应用程序的一个实例正在使用的内存数量。
5)启动应用程序的另一个实例并观察它的内存需求。
请描述使用第二个实例占用的内存与使用第一个实例时的内存对比情况:
第二个实例占用内存22772K,比第一个实例占用的内存大很多
4:
未分页合并内存。
估算未分页合并内存大小的最简单方法是使用“任务管理器”。
未分页合并内存的估计值显示在“任务管理器”的“性能”选项卡的“核心内存”部分。
总数(K):
________220___________
分页数:
__________167___________
未分页(K):
_________34__________
图2核心内存
还可以使用“任务管理器”查看一个独立进程正在使用的未分页合并内存数量和分页合并内存数量。
操作步骤如下:
1)单击“Windows任务管理器”的“进程”选项卡,然后从“查看”菜单中选择“选择列”命令,显示“进程”选项卡的可查看选项。
2)在“选择列”对话框中,选定“页面缓冲池”选项和“非页面缓冲池”选项旁边的复选框,然后单击“确定”按钮。
返回Windows“任务管理器”的“进程”选项卡时,将看到其中增加显示了各个进程占用的分页合并内存数量和未分页合并内存数量。
仍以刚才打开观察的应用程序(例如Word)为例,请在表4-4中记录:
表4-4实验记录
映像名称
PID
内存使用
页面缓冲池
非页面缓冲池
WINWORD.EXE
2964
37488
951
42
从性能的角度来看,未分页合并内存越多,可以加载到这个空间的数据就越多。
拥有的物理内存越多,未分页合并内存就越多。
但未分页合并内存被限制为256MB,因此添加超出这个限制的内存对未分页合并内存没有影响。
5:
提高分页性能。
在Windows2000的安装过程中,将使用连续的磁盘空间自动创建分页文件(pagefile.sys)。
用户可以事先监视变化的内存需求并正确配置分页文件,使得当系统必须借助于分页时的性能达到最高。
虽然分页文件一般都放在系统分区的根目录下面,但这并不总是该文件的最佳位置。
要想从分页获得最佳性能,应该首先检查系统的磁盘子系统的配置,以了解它是否有多个物理硬盘驱动器。
1)在“开始”菜单中单击“设置”–“控制面板”命令,双击“管理工具”图标,再双击“计算机管理”图标。
2)在“计算机管理”窗口的左格选择“磁盘管理”管理单元来查看系统的磁盘配置。
如果系统只有一个硬盘,那么建议应该尽可能为系统配置额外的驱动器。
这是因为:
Windows2000最多可以支持在多个驱动器上分布的16个独立的分页文件。
为系统配置多个分页文件可以实现对不同磁盘I/O请求的并行处理,这将大大提高I/O请求的分页文件性能。
请在表4-5中记录:
表4-5实验记录
卷
布局
类型
文件系统
容量
状态
C
简单
基本
NTFS
30G
良好(系统)
D
简单
基本
NTFS
90G
良好
E
简单
基本
NTFS
90G
良好
F
简单
基本
NTFS
88G
良好
图3磁盘情况
6:
计算分页文件的大小。
要想更改分页文件的位置或大小配置参数,可按以下步骤进行:
1)右键单击桌面上的“我的电脑”图标并选定“属性”。
2)在“高级”选项卡上单击“性能选项”按钮。
3)单击对话框中的“虚拟内存”区域中的“更改”按钮。
请记录:
所选驱动器的页面文件大小:
驱动器:
______________F_____________________
可用空间:
___________9825_____________________MB
初始大小(MB):
_____2048______________________
最大值(MB):
________4092_____________________
所有驱动器页面文件大小的总数:
允许的最小值:
________16____________________MB
推荐:
____________4590________________________MB
当前已分配:
________2048______________________MB
4)要想将另一个分页文件添加到现有配置,在“虚拟内存”对话框中选定一个还没有分页文件的驱动器,然后指定分页文件的初始值和最大值(以兆字节表示),单击“设置”,然后单击“确定”。
5)要想更改现有分页文件的最大值和最小值,可选定分页文件所在的驱动器。
然后指定分页文件的初始值和最大值,单击“设置”按钮,然后单击“确定”按钮。
6)在“性能选项”对话框中单击“确定”按钮。
7)单击“确定”按钮以关闭“系统特性”对话框。
7:
使用任务管理器。
可以使用“任务管理器”来简单地检查分页文件是否配置了正确容量。
这样可以实时提供系统正在使用分页文件的方式以及其他重要系统信息的准确描述。
通过右键单击任务栏运行“任务管理器”,选定“性能”选项卡查看实时的系统统计数据。
与分页文件大小最有关的信息位于“认可用量”区域。
这一区域显示了认可“峰值”是否达到或超过了认可“限制”,以及它是否超过了系统上的物理内存数量。
认可“峰值”是指系统迄今为止向进程分配的最大物理内存和虚拟内存数量。
请记录:
物理内存(K)
总数:
________2022224_______________
可用数:
_______1249540______________
系统缓存:
______806992______________
认可用量(K)
总数:
_________930388_______________
限制:
________3960780_______________
峰值:
________1024464______________
当系统遇到分页活动增加的情况时,提交的内存数量(“认可总数”)就会增加。
一旦它达到了“认可限制”值,系统就需要扩展分页文件。
“认可限制”值指出在不必扩展分页文件的情况下可以向内存提交的虚拟内存数量。
因为目标是避免扩展分页文件,所以必须保持“认可总数”和“认可限制”值相差较大。
如果这两个值接近了,那么系统必须动态增加分页文件的大小。
“任务管理器”的“认可用量”区域显示的信息还说明了系统的主内存是否足以满足系统执行的任务。
如果认可“总数”值经常超过系统中的内存数量,那么系统的物理内存可能不足。
(2)了解和检测进程的虚拟内存空间。
1:
创建一个“Win32ConsolApplication”工程,然后拷贝清单4-1中的程序,编译成可执行文件。
2:
在VC的工具栏单击“ExecuteProgram”(执行程序)按钮,或者按Ctrl+F5键,或者在“命令提示符”窗口运行步骤1中生成的可执行文件。
3:
根据运行结果,回答下列问题
虚拟内存每页容量为:
_________4.00KB_______________________________
最小应用地址:
_____________0x00010000_____________________________
最大应用地址:
_____________0x7ffeffff___________________________
当前可供应用程序使用的内存空间为:
_______1.99GB_________________
当前计算机的实际内存大小为:
__________3GB_________________________
理论上每个Windows应用程序可以独占的最大存储空间是:
___3GB______
按committed、reserved、free等三种虚拟地址空间分别记录实验数据。
其中“描述”是指对该组数据的简单描述,例如,对下列一组数据:
00010000–00017<8.00KB>Committed,READWRITE,Private
可描述为:
具有READWRITE权限的已调配私有内存区。
将系统当前的自由区(free)虚拟地址空间填入表4-6中。
表4-6实验记录
地址
大小
虚拟地址
空间类型
访问权限
描述
00134000-00140000
48.0KB
free
NOACCESS
有任何权限的已调配的共有内存区
00141000-00150000
60KB
free
NOACCESS
有任何权限的已调配的共有内存区
001b7000-001c0000
36KB
free
NOACCESS
没有任何权限的已调配的共有内存区
00288000-00290000
32KB
f
ee
NOACCESS
没有任何权限的已调配的共有内存区
00391000-003a0000
60KB
free
NOACCESS
没有任何权限的已调配的共有内存区
003b1000-003c0000
60KB
free
NOACCESS
没有任何权限的已调配的共有内存区
003c1000-003d0000
60KB
free
NOACCESS
没有任何权限的已调配的共有内存区
003d1000-003e0000
60 KB
free
NOACCESS
没有任何权限的已调配的共有内存区
003e1000-003f0000
60 KB
free
NOACCESS
没有任何权限的已调配的共有内存区
003f1000-00400000
60KB
free
NOACCESS
没有任何权限的已调配的共有内存区
00485000-00490000
44KB
free
NOACCESS
没有任何权限的已调配的共有内存区
00491000-004a0000
60KB
free
NOACCESS
没有任何权限的已调配的共有内存区
004a7-004b0000
56KB
free
NOACCESS
没有任何权限的已调配的共有内存区
004b1000-004c000
60 KB
free
NOACCESS
没有任何权限的已调配的共有内存区
004c1000-004d0000
60 KB
free
NOACCESS
没有任何权限的已调配的共有内存区
004d7000-004e0000
36 KB
free
NOACCESS
没有任何权限的已调配的共有内存区
004e7-00570000
568 KB
f
ee
NOACCESS
没有任何权限的已调配的共有内存区
00590000-00650000
768 KB
free
NOACCESS
没有任何权限的已调配的共有内存区
00185b000-70000000
1.72GB
free
NOACCESS
没有任何权限的已调配的共有内存区
70001000-73750000
55.3MB
free
NOACCESS
没有任何权限的已调配的共有内存区
73845000-74f50000
23MB
free
NOACCESS
没有任何权限的已调配的共有内存区
74f59000-74f60000
28 KB
free
NOACCESS
没有任何权限的已调配的共有内存区
74f9d000-75190000
1.94MB
free
NOACCESS
没有任何权限的已调配的共有内存区
751db000-75430000
2.33MB
free
NOACCESS
没有任何权限的已调配的共有内存区
75487000-75490000
36KB
free
NOACCESS
没有任何权限的已调配的共有内存区
将系统当前的已调配区(committed)虚拟地址空间填入表4-7中
表4-7实验记录
地址
大小
虚拟地址
空间类型
访问权限
描述
00010000-00070
64KB
committed
READWRITE
具有READWRITE权限的已调配私有内存区。
00070-00030000
64 KB
committed
READWRITE
具有READWRITE权限的已调配私有内存区。
0012d000-0012e000
4 KB
committed
GUARD,READWRITE
具有GUARD,READWRITE权限的已调配私有内存区。
0012e000-00130000
8 KB
committed
READWRITE
具有READWRITE权限的已调配私有内存区。
00130000-00134000
16KB
committed
READONLY
具有READONLY权限的已调配私有内存区。
00140000-00141000
4 KB
committed
READWRITE
具有READWRITE权限的已调配私有内存区。
00150000-001b7000
412 KB
committed
READONLY
具有READONLY权限的已调配私有内存区。
001c0000-001c5000
20KB
committed
READONLY
具有READONLY权限的已调配私有内存区。
00280000-00283000
12 KB
committed
READONLY
具有READONLY权限的已调配私有内存区。
00290000-00391000
1MB
committed
READONLY
具有READONLY权限的已调配私有内存区。
003a0000-003a1000
4 KB
committed
READWRITE
具有READWRITE权限的已调配私有内存区。
003b0000-003b1000
4 KB
committed
READWRITE
具有READWRITE权限的已调配私有内存区。
003c0000-003c1000
4KB
committed
EX-READWRITE
具有EX-READWRITE权限的已调配私有内存区。
003d0000-003d1000
4 KB
committed
EX-READWRITE
具有READWRITE权限的已调配私有内存区。
003e0000-003e1000
4 KB
committed
EX-READWRITE
具有EX-READWRITE权限的已调配私有内存区。
003f0000-003f1000
4 KB
committed
EX-READWRITE
具有EX-READWRITE权限的已调配私有内存区。
00400000-00401000
4 KB
committed
RX-READWRITE
具有EX-READWRITE权限的已调配私有内存区。
00401000-00470000
444 KB
committed
EX-READ
具有EX-READ权限的已调配私有内存区。
00470000-00478000
32 KB
committed
READONLY
具有READONLY权限的已调配私有内存区。
00478000-0047b000
12 KB
committed
READWRITE
具有READWRITE权限的已调配私有内存区。
0047b000-0047d000
8 KB
committed
WRITECOPY
具有WRITECOPY权限的已调配私有内存区。
0047d000-00481000
16 KB
committed
READWRITE
具有READWRITE权限的已调配私有内存区。
00481000-00485000
16 KB
committed
READONLY
具有READONLY权限的已调配私有内存区。
00490000-004sf000
124 KB
committed
READWRITE
具有READWRITE权限的已调配私有内存区。
00590000-00597
8KB
committed
READONLY
具有READONLY权限的已调配私有内存区。
将系统当前的保留区(reserved)虚拟地址空间填入表4-8中。
表4-8实验记录
地址
大小
虚拟地址
空间类型
访问权限
描述
00030000-0012D000
0.98MB
reserved
READONLY
具有READONLY权限的
已调配私有内存区
001C5000-00280000
748KB
reserved
READONLY
具有READONLY权限的
已调配私有内存区
00283000-00288000
20KB
reserved
READONLY
具有READONLY权限的
已调配私有内存区
004AF000-00590000
900KB
reserved
READONLY
具有READONLY权限的
已调配私有内存区
00607000-00610000
36KB
reserved
READONLY
具有READONLY权限的
已调配私有内存区
00613000-00670
52KB
reserved
READONLY
具有READONLY权限的
已调配私有内存区
0069d000-00770000
844KB
reserved
READONLY
具有READONLY权限的
已调配私有内存区
007c6000-01370000
11.6MB
reserved
READONLY
具有READONLY权限的
已调配私有内存区
01370000-0146d000
0.98MB
reserved
READONLY
具有READONLY权限的
已调配私有内存区
014f3000-01500000
52KB
reserved
READONLY
具有READONLY权限的
已调配私有内存区
实验结论:
简单描述windows进程的虚拟内存管理方案:
通过对文件的操作权限,有只读,读写,不允许访问等等和不同的调度方式实现对虚拟内存的管理。
程序代码清单
程序4-1代码:
#include
#include
#include
#include
#pragmacomment(lib,"Shlwapi.lib")
inlineboolTestSet(DWORDdwTarget,DWORDdwMask)
{
return((dwTarget&dwMask)==dwMask);
}
#defineSHOWMASK(dwTarget,type)\
if(TestSet(dwTarget,PAGE_##type))\
{std:
:
cout<<","<<#type;}
voidShowProtection(DWORDdwTarget)
{
SHOWMASK(dwTarget,READONLY);
SHOWMASK(dwTarget,GUARD);
SHOWMASK(dwTarget,NOCACHE);
SHOWMASK(dwTarget,READWRITE);
SHOWMASK(dwTarget,WRITECOPY);
SHOWMASK(dwTarget,EXECUTE);
SHOWMASK(dwTarget,EXECUTE_READ);
SHOWMASK(dwTarget,EXECUTE_READWRITE);
SHOWMASK(dwTarget,EXECUTE_WRITECOPY);
SHOWMASK(dwTarget,NOACCESS);
}
voidWalkVM(HANDLEhProcess)
{
SYST