《操作系统实验四存储管理.doc》由会员分享,可在线阅读,更多相关《操作系统实验四存储管理.doc(15页珍藏版)》请在三一办公上搜索。
1、宁德师范学院计算机系实验报告(20142015学年 第二学期)课程名称 操作系统 实验名称 实验四 存储管理 专 业 计算机科学与技术(非师)年 级 2012级 学号 B 姓名 王 秋 指导教师 王远帆 实验日期 2015-05-20 实验目的与要求:(1)通过对Windows 7“任务管理器”、“计算机管理”、“我的电脑”属性、“系统信息”、“系统监视器”等程序的应用,学习如何察看和调整Windows的内存性能,加深对操作系统存储管理、虚拟存储管理等理论知识的理解。(2)了解Windows 7的内存结构和虚拟内存的管理,理解进程的虚拟内存空间和物理内存的映射关系。实验设备(环境):(1)一台
2、安装有Cygwin Terminal的计算机(2) Windows 7操作系统(3)VC+6.0实验内容:(1)观察和调整Windows的内存性能。(2)了解和检测进程的虚拟内存空间。实验步骤、实验结果及分析:(1)观察和调整Windows的内存性能。1:阅读“背景知识”,请回答:1) 什么是“分页过程”?分页过程就是将信息从主内存移动到磁盘进行临时存储的过程。2)什么是“内存共享”?允许访问某些内存空间而不危及它和其他应用程序的安全性和完整性。3)什么是“未分页合并内存”和“分页合并内存”?Windows 2000中,未分页合并内存的最大限制是多少?未分页合并内存:分页合并内存是存储迟早需要
3、的可分页代码或数据的内存部分。 分页合并内存:未分页合并内存包含必须驻留在内存中的占用代码或数据。 在Windows7中为分业合并内存的最大限制是256MB。1) Windows 分页文件默认设置的最小容量和最大容量是多少?内存数量的1.5倍作为分页文件的最小容量,这个最小容量的两倍作为最大容量。2:登录进入Windows Professional。3:查看包含多个实例的应用程序的内存需求。1) 启动想要监视的应用程序,例如Word。2) 右键单击任务栏以启动“任务管理器”。3) 在“Windows任务管理器”对话框中选定“进程”选项卡。4) 向下滚动在系统上运行的进程列表,查找想要监视的应用
4、程序。请在表4-3中记录:表4-3 实验记录映像名称PIDCPUCPU时间内存使用 WINWORD.EXE 5160 00 0:00:10 22772k图1 word运行情况“内存使用”列显示了该应用程序的一个实例正在使用的内存数量。5) 启动应用程序的另一个实例并观察它的内存需求。请描述使用第二个实例占用的内存与使用第一个实例时的内存对比情况:第二个实例占用内存22772K,比第一个实例占用的内存大很多4:未分页合并内存。估算未分页合并内存大小的最简单方法是使用“任务管理器”。未分页合并内存的估计值显示在“任务管理器”的“性能”选项卡的“核心内存”部分。总数 (K) :_220_分页数:_1
5、67_未分页 (K) :_34_图2核心内存还可以使用“任务管理器”查看一个独立进程正在使用的未分页合并内存数量和分页合并内存数量。操作步骤如下:1) 单击“Windows任务管理器”的“进程”选项卡,然后从“查看”菜单中选择“选择列”命令,显示“进程”选项卡的可查看选项。2) 在“选择列”对话框中,选定“页面缓冲池”选项和“非页面缓冲池”选项旁边的复选框,然后单击“确定”按钮。返回Windows “任务管理器”的“进程”选项卡时,将看到其中增加显示了各个进程占用的分页合并内存数量和未分页合并内存数量。仍以刚才打开观察的应用程序 (例如Word) 为例,请在表4-4中记录:表4-4 实验记录映
6、像名称PID内存使用页面缓冲池非页面缓冲池 WINWORD.EXE 2964 37488 951 42从性能的角度来看,未分页合并内存越多,可以加载到这个空间的数据就越多。拥有的物理内存越多,未分页合并内存就越多。但未分页合并内存被限制为256MB,因此添加超出这个限制的内存对未分页合并内存没有影响。5:提高分页性能。在Windows 2000的安装过程中,将使用连续的磁盘空间自动创建分页文件(pagefile.sys) 。用户可以事先监视变化的内存需求并正确配置分页文件,使得当系统必须借助于分页时的性能达到最高。虽然分页文件一般都放在系统分区的根目录下面,但这并不总是该文件的最佳位置。要想从
7、分页获得最佳性能,应该首先检查系统的磁盘子系统的配置,以了解它是否有多个物理硬盘驱动器。1) 在“开始”菜单中单击“设置” “控制面板”命令,双击“管理工具”图标,再双击“计算机管理”图标。2) 在“计算机管理”窗口的左格选择“磁盘管理”管理单元来查看系统的磁盘配置。如果系统只有一个硬盘,那么建议应该尽可能为系统配置额外的驱动器。这是因为:Windows 2000最多可以支持在多个驱动器上分布的16个独立的分页文件。为系统配置多个分页文件可以实现对不同磁盘I/O请求的并行处理,这将大大提高I/O请求的分页文件性能。请在表4-5中记录:表4-5 实验记录卷布局类型文件系统容量状态 C 简单 基本
8、 NTFS 30G 良好(系统) D 简单 基本 NTFS 90G 良好 E 简单 基本 NTFS 90G 良好 F 简单 基本 NTFS 88G 良好 图3磁盘情况6:计算分页文件的大小。要想更改分页文件的位置或大小配置参数,可按以下步骤进行:1) 右键单击桌面上的“我的电脑”图标并选定“属性”。2) 在“高级”选项卡上单击“性能选项”按钮。3) 单击对话框中的“虚拟内存”区域中的“更改”按钮。请记录:所选驱动器的页面文件大小:驱动器:_F_可用空间:_9825_ MB初始大小 (MB) :_ 2048_最大值 (MB) :_4092_所有驱动器页面文件大小的总数:允许的最小值:_16_ M
9、B推荐:_4590_ MB当前已分配:_2048_ MB4) 要想将另一个分页文件添加到现有配置,在“虚拟内存”对话框中选定一个还没有分页文件的驱动器,然后指定分页文件的初始值和最大值 (以兆字节表示) ,单击“设置”,然后单击“确定”。5) 要想更改现有分页文件的最大值和最小值,可选定分页文件所在的驱动器。然后指定分页文件的初始值和最大值,单击“设置”按钮,然后单击“确定”按钮。6) 在“性能选项”对话框中单击“确定”按钮。7) 单击“确定”按钮以关闭“系统特性”对话框。7:使用任务管理器。可以使用“任务管理器”来简单地检查分页文件是否配置了正确容量。这样可以实时提供系统正在使用分页文件的方
10、式以及其他重要系统信息的准确描述。通过右键单击任务栏运行“任务管理器”,选定“性能”选项卡查看实时的系统统计数据。与分页文件大小最有关的信息位于“认可用量”区域。这一区域显示了认可“峰值”是否达到或超过了认可“限制”,以及它是否超过了系统上的物理内存数量。认可“峰值”是指系统迄今为止向进程分配的最大物理内存和虚拟内存数量。请记录:物理内存 (K)总数:_可用数:_系统缓存:_认可用量 (K)总数:_限制:_峰值:_当系统遇到分页活动增加的情况时,提交的内存数量 (“认可总数”) 就会增加。一旦它达到了“认可限制”值,系统就需要扩展分页文件。“认可限制”值指出在不必扩展分页文件的情况下可以向内存
11、提交的虚拟内存数量。因为目标是避免扩展分页文件,所以必须保持“认可总数”和“认可限制”值相差较大。如果这两个值接近了,那么系统必须动态增加分页文件的大小。“任务管理器”的“认可用量”区域显示的信息还说明了系统的主内存是否足以满足系统执行的任务。如果认可“总数”值经常超过系统中的内存数量,那么系统的物理内存可能不足。(2)了解和检测进程的虚拟内存空间。1:创建一个“Win32 Consol Application”工程,然后拷贝清单4-1中的程序,编译成可执行文件。2:在VC的工具栏单击“Execute Program”(执行程序) 按钮,或者按Ctrl + F5键,或者在“命令提示符”窗口运行
12、步骤1中生成的可执行文件。排版要整理,要层次分明,合理,内容清晰。3:根据运行结果,回答下列问题 虚拟内存每页容量为:_4.00KB_ 最小应用地址:_0x_ 最大应用地址:_0x7ffeffff_ _ 当前可供应用程序使用的内存空间为:_1.99GB_ _ 当前计算机的实际内存大小为:_3GB_ 理论上每个Windows应用程序可以独占的最大存储空间是:_3GB_按committed、reserved、free等三种虚拟地址空间分别记录实验数据。其中“描述”是指对该组数据的简单描述,例如,对下列一组数据: 00017 Committed, READWRITE, Private可描述为:具有R
13、EADWRITE权限的已调配私有内存区。将系统当前的自由区 (free) 虚拟地址空间填入表4-6中。表4-6 实验记录地址大小虚拟地址空间类型访问权限描述-48.0KBfreeNOACCESS 有任何权限的已调配的共有内存区-60 KBfreeNOACCESS 有任何权限的已调配的共有内存区001b7000-001c000036 KBfreeNOACCESS没有任何权限的已调配的共有内存区-32 KBfeeNOACCESS没有任何权限的已调配的共有内存区-003a000060 KBfreeNOACCESS没有任何权限的已调配的共有内存区003b1000-003c000060 KBfreeNO
14、ACCESS没有任何权限的已调配的共有内存区003c1000-003d000060 KBfreeNOACCESS没有任何权限的已调配的共有内存区003d1000-003e000060KBfreeNOACCESS没有任何权限的已调配的共有内存区003e1000-003f000060KBfreeNOACCESS没有任何权限的已调配的共有内存区003f1000-60 KBfreeNOACCESS没有任何权限的已调配的共有内存区-44 KBfreeNOACCESS没有任何权限的已调配的共有内存区-004a000060 KBfreeNOACCESS没有任何权限的已调配的共有内存区004a7-004b00
15、0056 KBfreeNOACCESS没有任何权限的已调配的共有内存区004b1000-004c00060KBfreeNOACCESS没有任何权限的已调配的共有内存区004c1000-004d000060KBfreeNOACCESS没有任何权限的已调配的共有内存区004d7000-004e000036KBfreeNOACCESS没有任何权限的已调配的共有内存区004e7-568KBfeeNOACCESS没有任何权限的已调配的共有内存区-768KBfreeNOACCESS没有任何权限的已调配的共有内存区00185b000-1.72GBfreeNOACCESS没有任何权限的已调配的共有内存区-55
16、.3MBfreeNOACCESS没有任何权限的已调配的共有内存区-74f5000023MBfreeNOACCESS没有任何权限的已调配的共有内存区74f59000-74f6000028KBfreeNOACCESS没有任何权限的已调配的共有内存区74f9d000-1.94MBfreeNOACCESS没有任何权限的已调配的共有内存区751db000-2.33MBfreeNOACCESS没有任何权限的已调配的共有内存区-36 KBfreeNOACCESS没有任何权限的已调配的共有内存区将系统当前的已调配区 (committed) 虚拟地址空间填入表4-7中表4-7 实验记录地址大小虚拟地址空间类型访
17、问权限描述-0007064KBcommittedREADWRITE具有READWRITE权限的已调配私有内存区。00070-64KBcommittedREADWRITE具有READWRITE权限的已调配私有内存区。0012d000-0012e0004KBcommittedGUARD,READWRITE具有GUARD,READWRITE权限的已调配私有内存区。0012e000-8KBcommittedREADWRITE具有READWRITE权限的已调配私有内存区。-16 KBcommittedREADONLY具有READONLY权限的已调配私有内存区。-4KBcommittedREADWRITE
18、具有READWRITE权限的已调配私有内存区。-001b7000412KBcommittedREADONLY具有READONLY权限的已调配私有内存区。001c0000-001c500020 KBcommittedREADONLY具有READONLY权限的已调配私有内存区。-12KBcommittedREADONLY具有READONLY权限的已调配私有内存区。-1MBcommittedREADONLY具有READONLY权限的已调配私有内存区。003a0000-003a10004KBcommittedREADWRITE具有READWRITE权限的已调配私有内存区。003b0000-003b10
19、004KBcommittedREADWRITE具有READWRITE权限的已调配私有内存区。003c0000-003c10004 KBcommittedEX-READWRITE具有EX-READWRITE权限的已调配私有内存区。003d0000-003d10004KBcommittedEX-READWRITE具有READWRITE权限的已调配私有内存区。003e0000-003e10004KBcommittedEX-READWRITE具有EX-READWRITE权限的已调配私有内存区。003f0000-003f10004KBcommittedEX-READWRITE具有EX-READWRITE
20、权限的已调配私有内存区。-4KBcommittedRX-READWRITE具有EX-READWRITE权限的已调配私有内存区。-444KBcommittedEX-READ具有EX-READ权限的已调配私有内存区。-32KBcommittedREADONLY具有READONLY权限的已调配私有内存区。-0047b00012KBcommittedREADWRITE具有READWRITE权限的已调配私有内存区。0047b000-0047d0008KBcommittedWRITECOPY具有WRITECOPY权限的已调配私有内存区。0047d000-16KBcommittedREADWRITE具有RE
21、ADWRITE权限的已调配私有内存区。-16KBcommittedREADONLY具有READONLY权限的已调配私有内存区。-004sf000124KBcommittedREADWRITE具有READWRITE权限的已调配私有内存区。-005978 KBcommittedREADONLY具有READONLY权限的已调配私有内存区。将系统当前的保留区 (reserved) 虚拟地址空间填入表4-8中。表4-8 实验记录地址大小虚拟地址空间类型访问权限描述-0012D0000.98MBreservedREADONLY具有READONLY权限的已调配私有内存区001C5000-748KBreser
22、vedREADONLY具有READONLY权限的已调配私有内存区-20KBreservedREADONLY具有READONLY权限的已调配私有内存区004AF000-900KBreservedREADONLY具有READONLY权限的已调配私有内存区-36KBreservedREADONLY具有READONLY权限的已调配私有内存区-0067052KBreservedREADONLY具有READONLY权限的已调配私有内存区0069d000-844KBreservedREADONLY具有READONLY权限的已调配私有内存区007c6000-11.6MBreservedREADONLY具有RE
23、ADONLY权限的已调配私有内存区-0146d0000.98MBreservedREADONLY具有READONLY权限的已调配私有内存区014f3000-52KBreservedREADONLY具有READONLY权限的已调配私有内存区实验结论:简单描述windows进程的虚拟内存管理方案:通过对文件的操作权限,有只读,读写,不允许访问等等和不同的调度方式实现对虚拟内存的管理。程序代码清单程序4-1代码:#include #include #include #include #pragma comment(lib, Shlwapi.lib)inline bool TestSet(DWORD
24、dwTarget, DWORD dwMask) return (dwTarget &dwMask) = dwMask) ;# define SHOWMASK(dwTarget, type) if (TestSet(dwTarget, PAGE_#type) ) std : cout , #type; void ShowProtection(DWORD dwTarget) SHOWMASK(dwTarget, READONLY) ; SHOWMASK(dwTarget, GUARD) ; SHOWMASK(dwTarget, NOCACHE) ; SHOWMASK(dwTarget, READW
25、RITE) ; SHOWMASK(dwTarget, WRITECOPY) ; SHOWMASK(dwTarget, EXECUTE) ; SHOWMASK(dwTarget, EXECUTE_READ) ; SHOWMASK(dwTarget, EXECUTE_READWRITE) ; SHOWMASK(dwTarget, EXECUTE_WRITECOPY) ; SHOWMASK(dwTarget, NOACCESS) ;void WalkVM(HANDLE hProcess) SYSTEM_INFO si; : ZeroMemory(&si, sizeof(si) ) ; : GetSy
26、stemInfo(&si) ; MEMORY_BASIC_INFORMATION mbi; : ZeroMemory(&mbi, sizeof(mbi) ) ; LPCVOID pBlock = (LPVOID) si.lpMinimumApplicationAddress; while (pBlock si.lpMaximumApplicationAddress) if (: VirtualQueryEx( hProcess, pBlock, &mbi, sizeof(mbi)=sizeof(mbi) ) LPCVOID pEnd = (PBYTE) pBlock + mbi.RegionS
27、ize;TCHAR szSizeMAX_PATH; : StrFormatByteSize(mbi.RegionSize, szSize, MAX_PATH) ; std : cout.fill (0) ; std : cout std : hex std : setw(8) (DWORD) pBlock - std : hex std : setw(8) (DWORD) pEnd (: strlen(szSize)=7? ( : () szSize ) ; switch(mbi.State) case MEM_COMMIT :std : cout Committed ;break; case
28、 MEM_FREE :std : cout Free ;break; case MEM_RESERVE :std : cout Reserved ;break; if(mbi.Protect=0 & mbi.State!=MEM_FREE) mbi.Protect=PAGE_READONLY; ShowProtection(mbi.Protect); switch(mbi.Type) case MEM_IMAGE :std : cout , Image ;break;case MEM_MAPPED:std : cout , Mapped;break; case MEM_PRIVATE :std
29、 : cout 0) : PathStripPath(szFilename) ; std : cout , Module: szFilename; std : cout std : endl; pBlock = pEnd; void ShowVirtualMemory() SYSTEM_INFO si; : ZeroMemory(&si, sizeof(si) ) ; : GetSystemInfo(&si) ; TCHAR szPageSizeMAX_PATH; :StrFormatByteSize(si.dwPageSize, szPageSize, MAX_PATH) ; DWORD d
30、wMemSize = (DWORD)si.lpMaximumApplicationAddress - (DWORD) si.lpMinimumApplicationAddress; TCHAR szMemSize MAX_PATH ; : StrFormatByteSize(dwMemSize, szMemSize, MAX_PATH) ; std : cout Virtual memory page size: szPageSize std : endl; std : cout.fill (0) ; std : cout Minimum application address: 0x std
31、 : hex std : setw(8) (DWORD) si.lpMinimumApplicationAddress std : endl; std : cout Maximum application address: 0x std : hex std : setw(8) (DWORD) si.lpMaximumApplicationAddress std : endl; std : cout Total available virtual memory: szMemSize std : endl ;void main()ShowVirtualMemory();:WalkVM(:GetCu
32、rrentProcess();实验分析:应用程序将物理内存和虚拟内存视为一个独立的实体,当主内存不足时,系统会使用硬盘获取虚拟内存,分页就是将信息从主内存移动到磁盘进行临时存储的过程。但是使用分页会减低计算机的访问速度。实验总结(包括过程总结、心得体会及实验改进意见等):1. 在命令提示符中运行应用程序时要先转到应用程序所在的盘符下,要把应用程序所在目录位置输入正确,才能找到相应的程序运行。2. 内存分为未分页合并内存和分页合并内存;分页合并内存是存储迟早需要的可分页代码或数据的内存部分;未分页合并内存包含必须驻留在内存中的占用代码或数据。3. 通过本次实验了解到了当物理内存耗尽时可以采取的解
33、决方法,一个是加大物理内存,一个是使用分页。虽然分页解决了内存不足的问题,但是使用分页会降低系统的访问速度,而且只有一个物理硬盘驱动器的系统限制了优化分页性能的能力。所以可以使用多个物理驱动器的服务器来使用多个分页文件来提高分页性能。分页文件最重要的配置参数是大小,太小或太大都不适合,并且应该尽量避免系统增加分页文件的大小。指导教师评语:完成所有规定的实验内容,实验步骤正确,结果正确;以后需要进一步改进或注意的是:(1)实验目的与要求、实验设备、实验内容格式要对齐。(2)源代码要进行命名以便区分。(3)标题文字首行缩进。(4)实验总结要分点讲述,并与分析、心得体会分开。成绩评定 A(优秀) 教师签字 王远帆 2015 年 5 月 25 日备注:注:1、报告内的项目或设置,可根据实际情况加以补充和调整 2、教师批改学生实验报告应在学生提交实验报告10日内