1、 . 师学院计算机系 实验报告 〔2021—2021 学年第二学期〕 课程名称 操作系统 实验名称实验四 存储管理 专 业计算机科学与技术〔非师〕 年 级 2021级 学号 B2021102
2、147 XX 秋 指导教师 远帆 实验日期 2021 -05-20 实验目的与要求: (1)通过对Windows 7“任务管理器〞、“计算机管理〞、“我的电脑〞属性、“系统信息〞、“系统监视器〞等程序的应用,学习如观察和调整Windows的存性能,加深对操作系统存储管理、虚拟存储管理等理论知识的理解。 (2)了解Windows 7的存构造和虚拟存的管理,理解进程的虚拟存空间和物理存的映射关系。 实验设备〔环境〕: 〔1〕一台安装有Cygwin Terminal的计算机 〔2〕 Windows 7操作系统 〔3〕VC++
3、6.0 实验容: 〔1〕观察和调整Windows的存性能。 〔2〕了解和检测进程的虚拟存空间。 实验步骤、实验结果及分析: 〔1〕观察和调整Windows的存性能。 1:阅读“背景知识〞,请答复: 1) 什么是“分页过程〞? 分页过程就是将信息从主存移动到磁盘进展临时存储的过程。 2〕什么是“存共享〞? 允访问某些存空间而不危及它和其他应用程序的平安性和完整性。 3〕什么是“未分页合并存〞和“分页合并存〞? Windows 2000中,未分页合并存的最大限制是多少? 未分页合并存:分页合并存是存储迟早需要的可分页代码或数据的存局部。 分页合并存:未分页合并存包含必须驻
4、留在存中的占用代码或数据。 在Windows7中为分业合并存的最大限制是256MB。 1) Windows 分页文件默认设置的最小容量和最大容量是多少? 存数量的1.5倍作为分页文件的最小容量,这个最小容量的两倍作为最大容量。 2:登录进入Windows Professional。 3:查看包含多个实例的应用程序的存需求。 1) 启动想要监视的应用程序,例如Word。 2) 右键单击任务栏以启动“任务管理器〞。 3) 在“Windows任务管理器〞对话框中选定“进程〞选项卡。 4) 向下滚动在系统上运行的进程列表,查找想要监视的应用程序。 请在表4-3中记录: 表4-3
5、实验记录 映像名称 PID CPU CPU时间 存使用 WINWORD.EXE 5160 00 0:00:10 22772k 图1 word运行情况 “存使用〞列显示了该应用程序的一个实例正在使用的存数量。 5) 启动应用程序的另一个实例并观察它的存需求。 请描述使用第二个实例占用的存与使用第一个实例时的存比照情况: 第二个实例占用存22772K,比第一个实例占用的存大很多 4:未分页合并存。 估算未分页合并存大小的最简单法是使用“任务管理器〞。未分页合并存的估计值显示在“任务管理器〞的“性能〞选项卡的“核心存〞局部。 总数 (K) :__
6、220___________ 分页数:_____________________ 未分页 (K) :_________34__________ 图2核心存 还可以使用“任务管理器〞查看一个独立进程正在使用的未分页合并存数量和分页合并存数量。操作步骤如下: 1) 单击“Windows任务管理器〞的“进程〞选项卡,然后从“查看〞菜单中选择“选择列〞命令,显示“进程〞选项卡的可查看选项。 2) 在“选择列〞对话框中,选定“页面缓冲池〞选项和“非页面缓冲池〞选项旁边的复选框,然后单击“确定〞按钮。 返回Windows “任务管理器〞的“进程〞选项卡时,将看到其中增加显
7、示了各个进程占用的分页合并存数量和未分页合并存数量。 仍以刚刚翻开观察的应用程序 (例如Word) 为例,请在表4-4中记录: 表4-4 实验记录 映像名称 PID 存使用 页面缓冲池 非页面缓冲池 WINWORD.EXE 2964 37488 951 42 从性能的角度来看,未分页合并存越多,可以加载到这个空间的数据就越多。拥有的物理存越多,未分页合并存就越多。但未分页合并存被限制为256MB,因此添加超出这个限制的存对未分页合并存没有影响。 5:提高分页性能。 在Windows 2000的安装过程中,将使用连续的磁盘空间自动创立分页文件(pag
8、efile.sys) 。用户可以事先监视变化的存需求并正确配置分页文件,使得当系统必须借助于分页时的性能到达最高。 虽然分页文件一般都放在系统分区的根目录下面,但这并不总是该文件的最正确位置。要想从分页获得最正确性能,应该首先检查系统的磁盘子系统的配置,以了解它是否有多个物理硬盘驱动器。 1) 在“开场〞菜单中单击“设置〞 – “控制面板〞命令,双击“管理工具〞图标,再双击“计算机管理〞图标。 2) 在“计算机管理〞窗口的左格选择“磁盘管理〞管理单元来查看系统的磁盘配置。 如果系统只有一个硬盘,那么建议应该尽可能为系统配置额外的驱动器。这是因为:Windows 2000最多可以支持在多
9、个驱动器上分布的16个独立的分页文件。为系统配置多个分页文件可以实现对不同磁盘I/O请求的并行处理,这将大大提高I/O请求的分页文件性能。 请在表4-5中记录: 表4-5 实验记录 卷 布局 类型 文件系统 容量 状态 C 简单 根本 NTFS 30G 良好〔系统〕 D 简单 根本 NTFS 90G 良好 E 简单 根本 NTFS 90G 良好 F 简单 根本 NTFS 88G 良好 图3磁盘情况 6:计算分页文件的大小。 要想更改分页文件的位置或大小配置参数,可
10、按以下步骤进展: 1) 右键单击桌面上的“我的电脑〞图标并选定“属性〞。 2) 在“高级〞选项卡上单击“性能选项〞按钮。 3) 单击对话框中的“虚拟存〞区域中的“更改〞按钮。 请记录: 所选驱动器的页面文件大小: 驱动器:______________F_____________________ 可用空间:___________9825_____________________ MB 初始大小 (MB) :_____ 2048______________________ 最大值 (MB) :________4092_____________________ 所有驱动器页面文件
11、大小的总数: 允的最小值:________16____________________ MB 推荐:____________4590________________________ MB 当前已分配:________2048______________________ MB 4) 要想将另一个分页文件添加到现有配置,在“虚拟存〞对话框中选定一个还没有分页文件的驱动器,然后指定分页文件的初始值和最大值 (以兆字节表示) ,单击“设置〞,然后单击“确定〞。 5) 要想更改现有分页文件的最大值和最小值,可选定分页文件所在的驱动器。然后指定分页文件的初始值和最大值,单击“设置〞按钮,然后单击
12、确定〞按钮。 6) 在“性能选项〞对话框中单击“确定〞按钮。 7) 单击“确定〞按钮以关闭“系统特性〞对话框。 7:使用任务管理器。 可以使用“任务管理器〞来简单地检查分页文件是否配置了正确容量。这样可以实时提供系统正在使用分页文件的式以及其他重要系统信息的准确描述。 通过右键单击任务栏运行“任务管理器〞,选定“性能〞选项卡查看实时的系统统计数据。与分页文件大小最有关的信息位于“认可用量〞区域。这一区域显示了认可“峰值〞是否到达或超过了认可“限制〞,以及它是否超过了系统上的物理存数量。认可“峰值〞是指系统迄今为止向进程分配的最大物理存和虚拟存数量。 请记录: 物理存 (K)
13、总数:________2022224_______________ 可用数:_______1249540______________ 系统缓存:______806992______________ 认可用量 (K) 总数:_________930388_______________ 限制:________3960780_______________ 峰值:________1024464______________ 当系统遇到分页活动增加的情况时,提交的存数量 (“认可总数〞) 就会增加。一旦它到达了“认可限制〞值,系统就需要扩展分页文件。“认可限制〞值指出在不必扩展分页文件的情况
14、下可以向存提交的虚拟存数量。因为目标是防止扩展分页文件,所以必须保持“认可总数〞和“认可限制〞值相差较大。如果这两个值接近了,那么系统必须动态增加分页文件的大小。 “任务管理器〞的“认可用量〞区域显示的信息还说明了系统的主存是否足以满足系统执行的任务。如果认可“总数〞值经常超过系统中的存数量,那么系统的物理存可能缺乏。 〔2〕了解和检测进程的虚拟存空间。 1:创立一个“Win32 Consol Application〞工程,然后拷贝清单4-1中的程序,编译成可执行文件。 2:在VC的工具栏单击“Execute Program〞(执行程序) 按钮,或者按Ctrl + F5键,或者在“命令
15、提示符〞窗口运行步骤1中生成的可执行文件。排版要整理,要层次清楚,合理,内容清晰。 3:根据运行结果,答复以下问题 虚拟存每页容量为:_________4.00KB_______________________________ 最小应用地址:_____________0x00010000_____________________________ 最大应用地址:_____________0x7ffeffff___________________________ 当前可供应用程序使用的存空间为:_______1.99GB_________________ 当前计算机的实际存大小为:
16、3GB_________________________ 理论上每个Windows应用程序可以独占的最大存储空间是:___3GB______ 按mitted、reserved、free等三种虚拟地址空间分别记录实验数据。其中“描述〞是指对该组数据的简单描述,例如,对以下一组数据: 00010000 – 00017 <8.00KB> mitted, READWRITE, Private 可描述为:具有READWRITE权限的已调配私有存区。 将系统当前的自由区 (free) 虚拟地址空间填入表4-6中。 表4-6 实验记录 地址 大小 虚拟地址 空间
17、类型 访问权限 描述 001340 48.0KB free NOACCESS 有任权限的已调配的共有存区 001410 60 KB free NOACCESS 有任权限的已调配的共有存区 001b7000-001c0000 36 KB free NOACCESS 没有任权限的已调配的共有存区 002880 32 KB f ee NOACCESS 没有任权限的已调配的共有存区 00391000-003a0000 60 KB free NOACCESS 没有任权限的已调配的共有存区 003b1000-
18、003c0000 60 KB free NOACCESS 没有任权限的已调配的共有存区 003c1000-003d0000 60 KB free NOACCESS 没有任权限的已调配的共有存区 003d1000-003e0000 60 KB free NOACCESS 没有任权限的已调配的共有存区 003e1000-003f0000 60 KB free NOACCESS 没有任权限的已调配的共有存区 003f10 60 KB free NOACCESS 没有任权限的已调配的共有存区 004850 44
19、KB free NOACCESS 没有任权限的已调配的共有存区 00491000-004a0000 60 KB free NOACCESS 没有任权限的已调配的共有存区 004a7-004b0000 56 KB free NOACCESS 没有任权限的已调配的共有存区 004b1000-004c000 60 KB free NOACCESS 没有任权限的已调配的共有存区 004c1000-004d0000 60 KB free NOACCESS 没有任权限的已调配的共有存区 004d7000-004e0000
20、36 KB free NOACCESS 没有任权限的已调配的共有存区 004e7-00570000 568 KB f ee NOACCESS 没有任权限的已调配的共有存区 005900 768 KB free NOACCESS 没有任权限的已调配的共有存区 00185b0 1.72GB free NOACCESS 没有任权限的已调配的共有存区 700010 55.3MB free NOACCESS 没有任权限的已调配的共有存区 73845000-74f50000 23MB free NOACCESS 没
21、有任权限的已调配的共有存区 74f59000-74f60000 28 KB free NOACCESS 没有任权限的已调配的共有存区 74f9d0 1.94MB free NOACCESS 没有任权限的已调配的共有存区 751db0 2.33MB free NOACCESS 没有任权限的已调配的共有存区 754870 36 KB free NOACCESS 没有任权限的已调配的共有存区 将系统当前的已调配区 (mitted) 虚拟地址空间填入表4-7中 表4-7 实验记录 地址 大小 虚拟地址 空间类型 访问
22、权限 描述 00010000-00070 64KB mitted READWRITE 具有READWRITE权限的已调配私有存区。 000 64 KB mitted READWRITE 具有READWRITE权限的已调配私有存区。 0012d000-0012e000 4 KB mitted GUARD,READWRITE 具有GUARD,READWRITE权限的已调配私有存区。 0012e0 8 KB mitted READWRITE 具有READWRITE权限的已调配私有存区。 001300 16 KB mitte
23、d READONLY 具有READONLY权限的已调配私有存区。 001400 4 KB mitted READWRITE 具有READWRITE权限的已调配私有存区。 00150000-001b7000 412 KB mitted READONLY 具有READONLY权限的已调配私有存区。 001c0000-001c5000 20 KB mitted READONLY 具有READONLY权限的已调配私有存区。 002800 12 KB mitted READONLY 具有READONLY权限的已调配私有存区。
24、002900 1MB mitted READONLY 具有READONLY权限的已调配私有存区。 003a0000-003a1000 4 KB mitted READWRITE 具有READWRITE权限的已调配私有存区。 003b0000-003b1000 4 KB mitted READWRITE 具有READWRITE权限的已调配私有存区。 003c0000-003c1000 4 KB mitted EX-READWRITE 具有EX-READWRITE权限的已调配私有存区。 003d0000-003d1000 4 K
25、B mitted EX-READWRITE 具有READWRITE权限的已调配私有存区。 003e0000-003e1000 4 KB mitted EX-READWRITE 具有EX-READWRITE权限的已调配私有存区。 003f0000-003f1000 4 KB mitted EX-READWRITE 具有EX-READWRITE权限的已调配私有存区。 004000 4 KB mitted RX-READWRITE 具有EX-READWRITE权限的已调配私有存区。 004010 444 KB mitted EX-
26、READ 具有EX-READ权限的已调配私有存区。 004700 32 KB mitted READONLY 具有READONLY权限的已调配私有存区。 00478000-0047b000 12 KB mitted READWRITE 具有READWRITE权限的已调配私有存区。 0047b000-0047d000 8 KB mitted WRITECOPY 具有WRITECOPY权限的已调配私有存区。 0047d0 16 KB mitted READWRITE 具有READWRITE权限的已调配私有存区。 0048
27、10 16 KB mitted READONLY 具有READONLY权限的已调配私有存区。 00490000-004sf000 124 KB mitted READWRITE 具有READWRITE权限的已调配私有存区。 00590000-00597 8 KB mitted READONLY 具有READONLY权限的已调配私有存区。 将系统当前的保存区 (reserved) 虚拟地址空间填入表4-8中。 表4-8 实验记录 地址 大小 虚拟地址 空间类型 访问权限 描述 00030000-0012D000 0.
28、98MB reserved READONLY 具有READONLY权限的 已调配私有存区 001C50 748KB reserved READONLY 具有READONLY权限的 已调配私有存区 002830 20KB reserved READONLY 具有READONLY权限的 已调配私有存区 004AF0 900KB reserved READONLY 具有READONLY权限的 已调配私有存区 006070 36KB reserved READONLY 具有READONLY权限的 已调配私有存
29、区 00613000-00670 52KB reserved READONLY 具有READONLY权限的 已调配私有存区 0069d0 844KB reserved READONLY 具有READONLY权限的 已调配私有存区 007c60 11.6MB reserved READONLY 具有READONLY权限的 已调配私有存区 01370000-0146d000 0.98MB reserved READONLY 具有READONLY权限的 已调配私有存区 014f30 52KB reserved
30、
READONLY
具有READONLY权限的
已调配私有存区
实验结论:
简单描述windows进程的虚拟存管理案:
通过对文件的操作权限,有只读,读写,不允访问等等和不同的调度式实现对虚拟存的管理。
程序代码清单
程序4-1代码:
#include
31、k) { 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
32、 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) ; } void Wal
33、kVM(HANDLE hProcess) { SYSTEM_INFO si; :: ZeroMemory(&si, sizeof(si) ) ; :: GetSystemInfo(&si) ; MEMORY_BASIC_INFORMATION mbi; :: ZeroMemory(&mbi, sizeof(mbi) ) ; LPCVOID pBlock = (LPVOID) si.lpMinimumApplicationAddress; while (pBlock < si.lpMaximumApplication
34、Address) { if (:: VirtualQueryEx( hProcess, pBlock, &mbi, sizeof(mbi))==sizeof(mbi) ) { LPCVOID pEnd = (PBYTE) pBlock + mbi.RegionSize; TCHAR szSize[MAX_PATH]
35、 :: 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
36、 << (:: strlen(szSize)==7? " (" : " (") << szSize << ") " ; switch(mbi.State) { case MEM_MIT : std :: cout << "mitted" ; break; case MEM_FREE : std :: cout << "Free" ; break;
37、 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_IMA
38、GE : std :: cout << ", Image" ; break; case MEM_MAPPED: std :: cout << ", Mapped"; break; case MEM_PRIVATE : std :: cout << ", Private" ; break; } TCHAR szFilename [MAX_PATH] ; if (:: GetModuleFileName (
39、 (HMODULE) pBlock, szFilename, MAX_PATH)>0) { :: PathStripPath(szFilename) ; std :: cout << ", Module: " << szFilename; } std :: cout << std :: endl; pBlock = pEnd; } }
40、 } void ShowVirtualMemory() { SYSTEM_INFO si; :: ZeroMemory(&si, sizeof(si) ) ; :: GetSystemInfo(&si) ; TCHAR szPageSize[MAX_PATH]; ::StrFormatByteSize(si.dwPageSize, szPageSize, MAX_PATH) ; DWORD dwMemSize = (DWORD)si.lpMaximumApplicationAddress - (DWORD
41、) 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"
42、 << std :: hex << std :: setw(8) << (DWORD) si.lpMinimumApplicationAddress << std :: endl; std :: cout << "Maximum application address: 0x" << std :: hex << std :: setw(8) << (DWORD) si.lpMaximumApplicationAddress << std :: end
43、l; std :: cout << "Total available virtual memory: " << szMemSize << std :: endl ; } void main() { ShowVirtualMemory(); ::WalkVM(::GetCurrentProcess()); } 实验分析: 应用程序将物理存和虚拟存视为一个独立的实体,当主存缺乏时,系统会使用硬盘获取虚拟存,分页就是将信息从主存移动到磁盘进展临时存储的过程。但是使用分页会减低计算机的访问速度。 实验总结〔包括过程总结、心得体会及实
44、验改进意见等〕: 1. 在命令提示符中运行应用程序时要先转到应用程序所在的盘符下,要把应用程序所在目录位置输入正确,才能找到相应的程序运行。 2. 存分为未分页合并存和分页合并存;分页合并存是存储迟早需要的可分页代码或数据的存局部;未分页合并存包含必须驻留在存中的占用代码或数据。 3. 通过本次实验了解到了当物理存耗尽时可以采取的解决法,一个是加大物理存,一个是使用分页。虽然分页解决了存缺乏的问题,但是使用分页会降低系统的访问速度,而且只有一个物理硬盘驱动器的系统限制了优化分页性能的能力。所以可以使用多个物理驱动器的效劳器来使用多个分页文件来提高分页性能。分页文件最重要的配置参数是大小,
45、太小或太大都不适合,并且应该尽量防止系统增加分页文件的大小。 指导教师评语: 完成所有规定的实验容,实验步骤正确,结果正确;以后需要进一步改进或注意的是: 〔1〕实验目的与要求、实验设备、实验容格式要对齐。 〔2〕源代码要进展命名以便区分。 〔3〕标题文字首行缩进。 〔4〕实验总结要分点讲述,并与分析、心得体会分开。 成绩评定A〔优秀〕 教师签字 远帆 2021 年5月25日 备注: 注:1、报告的工程或设置,可根据实际情况加以补充和调整 2、教师批改学生实验报告应在学生提交实验报告10日 . .word.zl.