步骤 6:计算分页文件的大小。
要想更改分页文件的位置或大小配置参数,可按以下步骤进行:
1) 右键单击桌面上的“我的电脑”( Win7 为计算机)图标并选定“属性”( Win7 为高级系统设置)。
2) 在“高级”选项卡上单击“性能选项”按钮。
3) 单击对话框中的“虚拟内存”区域中的“更改”按钮。 请记录:
所选驱动器 (C: ) 的页面文件大小:
驱动器: C: ;可用空间: 56362 MB
初始大小 (MB) : 最大值 (MB) : 所选驱动器 (D: ) 的页面文件大小: (如果有的话) 驱动器: D: 可用空间: 30622 MB 所有驱动器页面文件大小的总数:30622 MB
允许的最小值: 16 MB 推荐:12183 MB 当前已分配: 8122 MB
4) 要想将另一个分页文件添加到现有配置,在“虚拟内存”对话框中选定一个还没有分页文件的驱动器,然后指定分页文件的初始值和最大值 (以兆字节表示) ,单击“设置”,然后单击“确定”。 5) 要想更改现有分页文件的最大值和最小值,可选定分页文件所在的驱动器。然后指定分页文件的初始值和最大值,单击“设置”按钮,然后单击“确定”按钮。
6) 在“性能选项”对话框中单击“确定”按钮。
7) 单击“确定”按钮以关闭“系统特性”对话框。 (2)了解和检测进程
的虚拟内存空间。
步骤 1: 创建一个“Win32 Consol Application”工程,然后拷贝清单 5-1 中的程序,编译成可执行文件。
步骤 2: 在 VC 的工具栏单击“ Execute Program” (执行程序) 按钮,或者按 Ctrl + F5 键,或者在“命令提示符”窗口运行步骤 1 中生成的可执行文件。
步骤 3: 根据运行结果,回答下列问题
虚拟内存每页容量为: 4.00KB 最小应用地址:0x00010000 最大应用地址: 0x7ffeffff
当前可供应用程序使用的内存空间为:1.99GB 提示: 可供应用程序使用的内存空间实际上已经减去了开头与结尾两个 64KB 的保护区。虚拟内存空间中的 64KB 保护区是防止编程错误的一种 Windows 方式。任何对内存中这一区域的访问 (读、写、执行) 都将引发一个错误陷阱,从而导致错误并终止程序的执行。
按 committed、 reserved、 free 等三种虚拟地址空间分别记录实验数据。其中“描述”是指对该组数据的简单描述,例如,对下列一组数据: 00010000 – 00012000 <8.00KB> Committed, READWRITE, Private 可描述为:具有 READWRITE 权限的已调配私有内存区。
将系统当前的自由区 (free) 虚拟地址空间按表 5-6 格式记录。
表 5-6 实验记录
地址 大小 虚拟地址空间类型 访问权限 描述 00031000-00040000 00041000-00050000 (60.0 KB) Free (60.0 KB) Free NOACCESS NOACCESS NOACCESS NOACCESS NOACCESS NOACCESS NOACCESS NOACCESS NOACCESS NOACCESS 00294000-002a0000 (48.0 KB) Free 002a1000-002b0000 (60.0 KB) Free 00317000-00320000 (36.0 KB) Free 00321000-00330000 (60.0 KB) Free 00356000-00360000 (40.0 KB) Free 00361000-00400000 (636 KB) Free 00495000-00590000 (0.98 MB) Free 005a0000-00650000 (704 KB)
Free 提示: 详细记录实验数据在实验活动中是必要的,但想想是否可以简化记录的办法?
将系统当前的已调配区 (committed) 虚拟地址空间按表 5-7 格式记录。
表 5-7 实验记录
地址 大小 虚拟地址空间类型 00020000-00030000 (64.0 KB) 00030000-00031000 00040000-00041000 00089000-0008c000 (4.00 KB) Committed READWRITE Committed READWRITE Mapped Private Image Private Private Private Private Private Mapped Private 访问权限 描述 (4.00 KB) Committed READONLY (12.0 KB) Committed READWRITE 0008c000-00090000 (16.0 KB) Committed READWRITE 00089000-0008c000 0008c000-00090000 0028d000-00290000 (12.0 KB) Committed READWRITE (16.0 KB) Committed READWRITE (12.0KB) Committed READWRITE Committed READONLY Committed READWRITE 00290000-00294000 (16.0KB) 002a0000-002a1000
(4.00KB) 将系统当前的保留区 (reserved) 虚拟地址空间按表 5-8 格式记录。
表 5-8 实验记录
地址 大小 虚拟地址空间类型 reserved Reserved Reserved 访问权限 READONLY READONLY READONLY READONLY READONLY READONLY READONLY READONLY READONLY READONLY 描述 Private Privat Private Private Private Mapped Mapped Private Mapped Image 00050000-00089000 (228KB) 00090000-0028c000 (1.98MB) 00331000-00350000 (124KB) 00593000-005a0000 (52.0KB) Reserved 00656000-006d0000 (488KB) Reserved 006df000-00850000 (1.44MB) Reserved 00853000-00858000 (20.0KB) Reserved 008ae000-00980000 (840KB) 00bf4000-01f10000 (19.1MB) 75441000-75450000 (60.0KB)
Reserved Reserved Reserved 三、实验总结
通过对 Windows xp“任务管理器”、“计算机管理”、“我的电脑”属性、“系统
信息”、“系统监视器”等程序的应用,学习如何察看和调整 Windows 的内存性能,加深对操作系统内存管理、虚拟存储管理等理论知识的理解。
了解 Windows xp 的内存结构和虚拟内存的管理,理解进程的虚拟内存空间和物理内存的映射关系。
实验六 磁盘调度
一、实验目的
(1)了解磁盘结构以及磁盘上数据的组织方式。 (2)掌握磁盘访问时间的计算方式。
(3)掌握常用磁盘调度算法及其相关特性。
二、实验基本知识及原理
1)磁盘数据的组织
磁盘上每一条物理记录都有唯一的地址,该地址包括三个部分:磁头号(盘面好)、柱面号(磁道号)和扇区号。给定这三个量就可以唯一地确定一个地址。 2)磁盘访问时间的计算方式
磁盘在工作室以恒定的速率旋转。为保证读或写,磁头必须移动到所要求的磁道上,当所要求的扇区的开始位置旋转到磁头下时,开始读或写数据。对磁盘的访问时间包括:寻道时间、旋转延迟时间和传输时间。 3)磁盘调度算法
磁盘调度的目的是要尽可能降低磁盘的寻道时间,以提高磁盘I/O系统的性能。 先进先出算法:按访问请求到达的先后次序进行调度。 最短服务时间优先算法:优先选择使磁头臂从当前位置开始移动最少的磁盘I/O请求进行调度。
SCAN(电梯算法):要求磁头臂先沿一个方向移动,并在途中满足所有未完成的请求,直到它到达这个方向上的最后一个磁道。或者在这个方向上没有别的请求为止,后一种改进有时候称作LOOK 策略。然后倒转服务方向,沿相反方向扫描,同样按顺序完成所有请求。
C-SCAN(循环扫描)算法: 在磁盘调度时,把扫描限定在一个方向,当沿某个方向访问到最后一个磁道时,磁头臂返回到磁盘的另一端,并再次开始扫描。
三、详细设计
//SCAN(电梯算法)
void SCAN(int array[],int m) {
int now; int temp; int i,j; int sum=0; float avg;
for(i=0; i for(j=i+1; j if(array[i]>array[j])//两磁道号之间比较 { temp=array[i]; array[i]=array[j]; array[j]=temp; } } } for( i=0; i printf(\请输入当前的磁道号: \ scanf(\ printf(\磁道方向:沿磁道增大的方向\ printf(\调度结果: \ for(i=0; i if(now<=array[i]) { printf(\ sum=array[i]-now+sum; now=array[i]; } else { j=i; temp=array[i]; } } for(i=j; i>=0; i--) { printf(\ sum=now-array[i]+sum; now=array[i]; } avg=(float)sum/m; printf(\移动的总道数: %d \\n\ printf(\平均寻道长度: %f \\n\} //C-SCAN(循环扫描)算法 void CSCAN(int array[],int m){ int now; int temp; int i,j; int sum=0; float avg; for(i=0; i for(j=i+1; j if(array[i]>array[j])//两磁道号之间比较 { temp=array[i]; array[i]=array[j]; array[j]=temp; } } } for( i=0; i printf(\请输入当前的磁道号: \ scanf(\ printf(\磁道方向:沿磁道增大的方向\ printf(\调度结果: \ for(i=0; i if(now<=array[i]) { printf(\ sum=array[i]-now+sum; now=array[i]; } else { j=i; temp=array[i]; } } for(i=0; i<=j; i++)
操作系统课程设计



