1、Windows操作系统实验六实验报告Windows操作系统 C/C+ 程序实验姓名:_ _学号:_班级:_院系:_信息工程学院_年_月_日实验六 Windows 2000/xp虚拟内存一、背景知识二、实验目的三、工具/准备工作四、实验内容与步骤 1. 虚拟内存的检测清单6-1所示程序使用VirtualQueryEX() 函数来检查虚拟内存空间。步骤1:登录进入Windows 2000/xp Professional。步骤2:在“开始”菜单中单击“程序-Microsoft Visual Studio 6.0 Microsoft Visual C+ 6.0”命令,进入Visual C+窗口。步骤3
2、:在工具栏单击“打开”按钮,在“打开”对话框中找到并打开实验源程序6-1.cpp。步骤4:单击“Build”菜单中的“Compile 6-1.cpp”命令,并单击“是”按钮确认。系统对6-1.cpp进行编译。步骤5:编译完成后,单击“Build”菜单中的“Build 6-1.exe”命令,建立6-1.exe可执行文件。操作能否正常进行?如果不行,则可能的原因是什么?_步骤6:在工具栏单击“Execute Program”按钮,执行6-1.exe程序。1) 分析运行结果 (如果运行不成功,则可能的原因是什么?) 。按committed、reserved、free等三种虚拟地址空间分别记录实验数据
3、。其中“描述”是指对该组数据的简单描述,例如,对下列一组数据: /xp Committed, READWRITE, Private可描述为:具有READWRITE权限的已调配私有内存区。将系统当前的自由区 (free) 虚拟地址空间填入表6-3中。表6-3 实验记录地址大小虚拟地址空间类型访问权限描述-8.00KBfreeREADWRITE具有READWRITE权限的已调配私有内存区-56.0KB freeNOACCESS没有任何权限的已调配的共有内存区-4.00KBfreeREADWRITE具有READWRITE权限的已调配私有内存区-60.0KBfreeNOACCESS没有任何权限的已调配
4、的共有内存区-0012c0000.98MB freeREADONLY只具有READ权限的已调配私有内存区0012c000-0012d0004.00KBfreeREADWRITE具有READWRITE权限的已调配私有内存区0012d000-12.0KBfreeREADWRITE具有READWRITE权限的已调配私有内存区-12.0KBfreeREADONLY只具有READ权限的已调配内存区提示:详细记录实验数据在实验活动中是必要的,但想想是否可以简化记录的办法?将系统当前的已调配区 (committed) 虚拟地址空间填入表6-4中。表6-4 实验记录地 址大小虚拟地址空间类型访问权限描 述-
5、(64.0 KB) Committed, READWRITE, Mapped- (64.0 KB) Committed, READWRITE, Mapped0012d000-0012e000 (4.00 KB) Committed, GUARD, READWRITE, Private0012e000- (8.00 KB) Committed, READWRITE, Private- (16.0 KB) Committed, READONLY, Mapped -001a7000 (412 KB) Committed, READONLY, Mapped 001b0000-001b1000 (4.0
6、0 KB) Committed, READWRITE, Private001c0000-001c1000 (4.00 KB) Committed, READWRITE, Private001d0000-001d7000 (28.0 KB) Committed, READONLY, Mapped001e0000-001e2000 (8.00 KB) Committed, READWRITE, Mapped将系统当前的保留区 (reserved) 虚拟地址空间填入表6-5中。表6-5 实验记录地 址大小虚拟地址空间类型访问权限描 述0022d000- (844 KB) Reserved, READ
7、ONLY, Private -003c0000 (744 KB) Reserved, READONLY, Mapped 003c3000-003c8000 (20.0 KB) Reserved, READONLY, Mapped- (52.0 KB) Reserved, READONLY, Private 006f4000- (11.5 MB) Reserved, READONLY, Mapped- (992 KB) Reserved, READONLY, Private- (40.0 KB) Reserved, READONLY, Private2) 从上述输出结果,对照分析5-2程序,请简
8、单描述程序运行的流程: _ 2. 虚拟内存操作清单6-2的示例显示了如何分配一个大容量空间,将物理存储委托给其中的很小一部分 (千分之一) 并加以使用。步骤7:在Visual C+ 窗口的工具栏中单击“打开”按钮,在“打开”对话框中找到并打开实验源程序6-2.cpp。 步骤8:单击“Build”菜单中的“Compile 6-2.cpp”命令,并单击“是”按钮确认。系统对6-2.cpp进行编译。步骤9:编译完成后,单击“Build”菜单中的“Build 6-2.exe”命令,建立6-2.exe可执行文件。操作能否正常进行?如果不行,则可能的原因是什么? _步骤10:在工具栏单击“Execute
9、Program”按钮,执行6-2.exe程序。运行结果 (如果运行不成功,则可能的原因是什么?) :1) _标点_2) _3) _对照运行结果,分析程序6-2。为了给数据库保留1GB的段地址空间,清单6-2给出了内存分配的四种方法。 第一种技术即程序中说明为_ LPVOID pBlock = : malloc(c_dwGigabyte) ;: FillZero (pBlock, c_dwMegabyte) ;: free(pBlock) ; _的程序段,该段程序试图利用标准C中的malloc() 函数,从已经已调配的小内存区获得内存。从运行结果看,这种技术成功了吗?_成功_。 第二种技术即程序
10、中说明为_ LPVOID pBlock = : VirtualAlloc(NULL, / 不指定起始地址c_dwGigabyte, / 要求1GBMEM_COMMIT, / 调配物理存储PAGE_READWRITE) ; / 对此的读写操作: FillZero(pBlock, c_dwMegabyte) ;: VirtualFree(pBlock, 0, MEM_RELEASE) ;的程序段,该段程序试图通过VirtualAlloc() ,然后利用物理备用内存将整个块分配到虚拟内存空间的任何位置。这种技术只对拥有1GB以上的RAM且都有换页文件的计算机可行。从运行结果看,这种技术成功了吗?_成
11、功_。 第三种技术即程序中说明为LPVOID pBlock = : VirtualAlloc(NULL, / 不指定起始地址c_dwGigabyte, /MEM_RESERVE, / 不调配物理存储PAGE_READWRITE) ; / 对此的读写操作: FillZero(pBlock, c_dwMegabyte) ;: VirtualFree(pBlock, 0, MEM_RELEASE) ;要求1GB的程序段,该段程序利用VirtualAlloc() ,如果函数成功,则获得大块内存,但不将任何物理内存调配到此块中。从运行结果看,这种技术成功了吗?_不成功_。 第四种技术即程序中说明为LPV
12、OID pBlock = : VirtualAlloc( NULL, / 不指定起始地址c_dwGigabyte, / 要求1GBMEM_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。当然,如果要将整个虚拟内存空间锁定,系统就会停留于试图将系统中工作内存的每一小块换页到磁盘。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1