Windows操作系统实验六实验报告.docx
《Windows操作系统实验六实验报告.docx》由会员分享,可在线阅读,更多相关《Windows操作系统实验六实验报告.docx(11页珍藏版)》请在冰豆网上搜索。
Windows操作系统实验六实验报告
Windows操作系统
C/C++程序实验
姓名:
______________
学号:
_________
班级:
_________________
院系:
_____信息工程学院_____
______________年_____月_____日
实验六Windows2000/xp虚拟内存
一、背景知识
二、实验目的
三、工具/准备工作
四、实验内容与步骤
1.虚拟内存的检测
清单6-1所示程序使用VirtualQueryEX()函数来检查虚拟内存空间。
步骤1:
登录进入Windows2000/xpProfessional。
步骤2:
在“开始”菜单中单击“程序-MicrosoftVisualStudio6.0–MicrosoftVisualC++6.0”命令,进入VisualC++窗口。
步骤3:
在工具栏单击“打开”按钮,在“打开”对话框中找到并打开实验源程序6-1.cpp。
步骤4:
单击“Build”菜单中的“Compile6-1.cpp”命令,并单击“是”按钮确认。
系统对6-1.cpp进行编译。
步骤5:
编译完成后,单击“Build”菜单中的“Build6-1.exe”命令,建立6-1.exe可执行文件。
操作能否正常进行?
如果不行,则可能的原因是什么?
_
__
_________________________________________________________________
________________________________________________________________________
步骤6:
在工具栏单击“ExecuteProgram”按钮,执行6-1.exe程序。
1)分析运行结果(如果运行不成功,则可能的原因是什么?
)。
按committed、reserved、free等三种虚拟地址空间分别记录实验数据。
其中“描述”是指对该组数据的简单描述,例如,对下列一组数据:
–/xp<8.00KB>Committed,READWRITE,Private
可描述为:
具有READWRITE权限的已调配私有内存区。
将系统当前的自由区(free)虚拟地址空间填入表6-3中。
表6-3实验记录
地址
大小
虚拟地址
空间类型
访问权限
描述
-
8.00KB
free
READWRITE
具有READWRITE权限的已调配私有内存区
-
56.0KB
free
NOACCESS
没有任何权限的已调配的共有内存区
-
4.00KB
free
READWRITE
具有READWRITE权限的已调配私有内存区
-
60.0KB
free
NOACCESS
没有任何权限的已调配的共有内存区
-0012c000
0.98MB
free
READONLY
只具有READ权限的已调配私有内存区
0012c000-0012d000
4.00KB
free
READWRITE
具有READWRITE权限的已调配私有内存区
0012d000-
12.0KB
free
READWRITE
具有READWRITE权限的已调配私有内存区
-
12.0KB
free
READONLY
只具有READ权限的已调配内存区
提示:
详细记录实验数据在实验活动中是必要的,但想想是否可以简化记录的办法?
将系统当前的已调配区(committed)虚拟地址空间填入表6-4中。
表6-4实验记录
地址
大小
虚拟地址
空间类型
访问权限
描述
-(64.0KB)Committed,READWRITE,Mapped
-(64.0KB)Committed,READWRITE,Mapped
0012d000-0012e000(4.00KB)Committed,GUARD,READWRITE,Private
0012e000-(8.00KB)Committed,READWRITE,Private
-(16.0KB)Committed,READONLY,Mapped
-001a7000(412KB)Committed,READONLY,Mapped
001b0000-001b1000(4.00KB)Committed,READWRITE,Private
001c0000-001c1000(4.00KB)Committed,READWRITE,Private
001d0000-001d7000(28.0KB)Committed,READONLY,Mapped
001e0000-001e2000(8.00KB)Committed,READWRITE,Mapped
将系统当前的保留区(reserved)虚拟地址空间填入表6-5中。
表6-5实验记录
地址
大小
虚拟地址
空间类型
访问权限
描述
0022d000-(844KB)Reserved,READONLY,Private
-003c0000(744KB)Reserved,READONLY,Mapped
003c3000-003c8000(20.0KB)Reserved,READONLY,Mapped
-(52.0KB)Reserved,READONLY,Private
006f4000-(11.5MB)Reserved,READONLY,Mapped
-(992KB)Reserved,READONLY,Private
-(40.0KB)Reserved,READONLY,Private
2)从上述输出结果,对照分析5-2程序,请简单描述程序运行的流程:
____________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
2.虚拟内存操作
清单6-2的示例显示了如何分配一个大容量空间,将物理存储委托给其中的很小一部分(千分之一)并加以使用。
步骤7:
在VisualC++窗口的工具栏中单击“打开”按钮,在“打开”对话框中找到并打开实验源程序6-2.cpp。
步骤8:
单击“Build”菜单中的“Compile6-2.cpp”命令,并单击“是”按钮确认。
系统对6-2.cpp进行编译。
步骤9:
编译完成后,单击“Build”菜单中的“Build6-2.exe”命令,建立6-2.exe可执行文件。
操作能否正常进行?
如果不行,则可能的原因是什么?
_
___________________________________________________________________
________________________________________________________________________
步骤10:
在工具栏单击“ExecuteProgram”按钮,执行6-2.exe程序。
运行结果(如果运行不成功,则可能的原因是什么?
):
1)__标点____________________________________________________
2)__________________________________________________________________
3)__________________________________________________________________
对照运行结果,分析程序6-2。
为了给数据库保留1GB的段地址空间,清单6-2给出了内存分配的四种方法。
·第一种技术
即程序中说明为__LPVOIDpBlock=:
:
malloc(c_dwGigabyte);
:
:
FillZero(pBlock,c_dwMegabyte);
:
:
free(pBlock);_____
的程序段,该段程序试图利用标准C中的malloc()函数,从已经已调配的小内存区获得内存。
从运行结果看,这种技术成功了吗?
_____成功________________。
·第二种技术
即程序中说明为_LPVOIDpBlock=:
:
VirtualAlloc(
NULL,//不指定起始地址
c_dwGigabyte,//要求1GB
MEM_COMMIT,//调配物理存储
PAGE_READWRITE);//对此的读写操作
:
:
FillZero(pBlock,c_dwMegabyte);
:
:
VirtualFree(pBlock,0,MEM_RELEASE);
的程序段,该段程序试图通过VirtualAlloc(),然后利用物理备用内存将整个块分配到虚拟内存空间的任何位置。
这种技术只对拥有1GB以上的RAM且都有换页文件的计算机可行。
从运行结果看,这种技术成功了吗?
______成功_______________。
·第三种技术
即程序中说明为LPVOIDpBlock=:
:
VirtualAlloc(
NULL,//不指定起始地址
c_dwGigabyte,//
MEM_RESERVE,//不调配物理存储
PAGE_READWRITE);//对此的读写操作
:
:
FillZero(pBlock,c_dwMegabyte);
:
:
VirtualFree(pBlock,0,MEM_RELEASE);
}
要求1GB的程序段,该段程序利用VirtualAlloc(),如果函数成功,则获得大块内存,但不将任何物理内存调配到此块中。
从运行结果看,这种技术成功了吗?
_____不成功____。
·第四种技术
即程序中说明为LPVOIDpBlock=:
:
VirtualAlloc(
NULL,//不指定起始地址
c_dwGigabyte,//要求1GB
MEM_RESERVE,//不调配物理存储
PAGE_READWRITE);//对此的读写操作
:
:
VirtualAlloc(
pBlock,
c_dwMegabyte,
MEM_COMMIT,
PAGE_READWRITE);
:
:
FillZero(pBlock,c_dwMegabyte);
:
:
VirtualFree(pBlock,0,MEM_RELEASE);
的程序段,该段程序保留1GB的内存区,然后将物理内存调配给其中的很小一部分(1MB)。
这就是清单6-2介绍的处理一个假想的数据库应用程序的方法:
保留整个块,然后按要求在其一小部分内进行读操作,让系统将用过的区域换页到磁盘中。
利用VirtualLock()API,Windows可用来在自己的进程空间中控制虚拟内存的行为。
这个函数与其成对的VirtualUnlock()阻止或允许一块内存从物理RAM中换页和换页到页面文件中。
这样就会通知系统有一段特定的内存区要求对用户作出强烈的响应,所以系统不应将其移出RAM。
当然,如果要将整个虚拟内存空间锁定,系统就会停留于试图将系统中工作内存的每一小块换页到磁盘。