实验四 存储管理
- 格式:docx
- 大小:52.02 KB
- 文档页数:15
实验四页式虚拟存储管理中地址转换和缺页中断一、实验目的深入了解页式存储管理如何实现地址转换;进一步认识页式虚拟存储管理中如何处理缺页中断。
二、实验预备知识页式存储管理中地址转换的方法;页式虚拟存储的缺页中断处理方法。
三、实验内容编写程序完成页式虚拟存储管理中地址转换过程和模拟缺页中断的处理。
实验具体包括:首先对给定的地址进行地址转换工作,若发生缺页则先进行缺页中断处理,然后再进行地址转换;最后编写主函数对所做工作进行测试。
假定主存64KB,每个主存块1024字节,作业最大支持到64KB,系统中每个作业分得主存块4块。
四、提示与讲解页式存储管理中地址转换过程很简单,假定主存块的大小为2n字节,主存大小为2m'字节和逻辑地址m位,则进行地址转换时,首先从逻辑地址中的高m-n位中取得页号,然后根据页号查页表,得到块号,并将块号放入物理地址的高m'-n位,最后从逻辑地址中取得低n位放入物理地址的低n位就得到了物理地址,过程如图6所示。
逻辑地址图6 页式存储管理系统地址转换示意图地址转换是由硬件完成的,实验中使用软件程序模拟地址转换过程,模拟地址转换的流程如图7所示(实验中假定主存64KB,每个主存块1024字节,即n=10,m'=16,物理地址中块号6位、块内地址10位;作业最大64KB,即m=16,逻辑地址中页号6位、页内地址10位)。
在页式虚拟存储管理方式中,作业信息作为副本放在磁盘上,作业执行时仅把作业信息的部分页面装入主存储器,作业执行时若访问的页面在主存中,则按上述方式进行地址转换,若访问的页面不在主存中,则产生一个“缺页中断”,由操作系统把当前所需的页面装入主存储器后,再次执行时才可以按上述方法进行地址转换。
页式虚拟存储管理方式中页表除页号和该页对应的主存块号外,至少还要包括存在标志(该页是否在主存),磁盘位置(该页的副本在磁盘上的位置)和修改标志(该页是否修改过)。
存储管理实验报告存储管理实验报告一、引言存储管理是计算机系统中一个非常重要的组成部分,它负责管理计算机内存的分配、回收和保护。
本次实验旨在通过实际操作,深入理解存储管理的原理和技术,并探索不同的存储管理策略对系统性能的影响。
二、实验目的1. 理解存储管理的基本概念和原理;2. 掌握常见的存储管理算法和策略;3. 分析不同存储管理策略对系统性能的影响。
三、实验环境本次实验使用了一台配置较低的个人电脑,操作系统为Windows 10,内存容量为4GB。
四、实验内容1. 静态分区分配算法静态分区分配算法是最简单的存储管理算法之一。
在实验中,我们使用了最先适应算法(First Fit)和最佳适应算法(Best Fit)进行静态分区分配。
通过对比两种算法的分配效果,我们发现最佳适应算法在减少内存碎片方面表现更好。
2. 动态分区分配算法动态分区分配算法是一种更加灵活的存储管理策略。
在实验中,我们实现了首次适应算法(First Fit)和最佳适应算法(Best Fit)两种动态分区分配算法。
通过观察不同算法的分配效果,我们发现首次适应算法在处理大量小内存块时效率较高,而最佳适应算法在处理大内存块时表现更好。
3. 页面置换算法页面置换算法是虚拟内存管理中的重要组成部分。
在实验中,我们实现了最近最少使用(LRU)算法和先进先出(FIFO)算法两种页面置换算法。
通过模拟内存不足的情况,我们观察了不同算法对系统性能的影响。
结果显示,LRU算法在减少页面置换次数方面比FIFO算法更为优秀。
五、实验结果与分析通过本次实验,我们对不同的存储管理算法和策略进行了实际操作,并观察了它们对系统性能的影响。
实验结果显示,最佳适应算法在静态分区分配中表现更好,而首次适应算法在动态分区分配中效率更高。
在页面置换算法中,LRU 算法在减少页面置换次数方面更为出色。
六、实验总结本次实验通过实际操作,深入理解了存储管理的原理和技术,并探索了不同的存储管理策略对系统性能的影响。
师学院计算机系实验报告(2014—2015学年第二学期)课程名称操作系统实验名称实验四存储管理专业计算机科学与技术(非师)年级2012级学号B2012102147 姓名秋指导教师远帆实验日期2015-05-20图1 word运行情况“存使用”列显示了该应用程序的一个实例正在使用的存数量。
5) 启动应用程序的另一个实例并观察它的存需求。
请描述使用第二个实例占用的存与使用第一个实例时的存对比情况:第二个实例占用存22772K,比第一个实例占用的存大很多4:未分页合并存。
估算未分页合并存大小的最简单法是使用“任务管理器”。
未分页合并存的估计值显示在“任务管理器”的“性能”选项卡的“核心存”部分。
总数(K) :________220___________分页数:_____________________未分页(K) :_________34__________图2核心存C 简单基本NTFS 30G 良好(系统)D 简单基本NTFS 90G 良好E 简单基本NTFS 90G 良好F 简单基本NTFS 88G 良好图3磁盘情况6:计算分页文件的大小。
要想更改分页文件的位置或大小配置参数,可按以下步骤进行:1) 右键单击桌面上的“我的电脑”图标并选定“属性”。
2) 在“高级”选项卡上单击“性能选项”按钮。
3) 单击对话框中的“虚拟存”区域中的“更改”按钮。
请记录:所选驱动器的页面文件大小:驱动器:______________F_____________________可用空间:___________9825_____________________ MB初始大小(MB) :_____ 2048______________________最大值(MB) :________4092_____________________所有驱动器页面文件大小的总数:允的最小值:________16____________________ MB注:1、报告的项目或设置,可根据实际情况加以补充和调整2、教师批改学生实验报告应在学生提交实验报告10日。
存储管理1 实验目的:通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。
2 实验内容:1)通过随机数产生一个指令序列,共320条指令;2)将指令序列变换为页面号;3)计算FIFO算法在分配不同内存块下的命中率。
(假设分配的内存块从4块至32块。
)<程序设计>设计一个虚拟存储区和内存工作区,使用FIFO算法计算访问命中率。
首先用Srand()和rand()函数定义和产生指令序列,然后将指令序列变换成相应的页面号,并针对FIFO算法计算相应的命中率。
命中率=1-缺页率相关定义如下:1.数据结构(1)页面类型结构pl_type中pn页号,pfn块号,counter为一个周期内访问页面次数,time为访问时间(2)页面控制结构中pfc[total_vp]定义用户进程虚页控制结构*freepf_head为空页面头的指针*busypf_head为忙页面头的指针*busypf_tail为忙页面尾的指针2.函数定义(1)void initialize():初始化函数,给每个相关的页面赋值(2)void FIFO():计算使用FIFO算法时的命中率3.变量定义(1)int a[total_instruction]:指令流数组(2)int page[total_instruction]:每条指令所属页号(3)int offset[total_instruction]:每页装入10条指令后取模运算页号偏移值(4)int total_pf:用户进程的内存块数(5)int diseffect:页面失效次数,即缺页次数[root@localhost ~]# cd wuxiaofeng[root@localhost wuxiaofeng]# pwd/root/wuxiaofeng[root@localhost wuxiaofeng]# cat >fifo.c#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <unistd.h>#define TRUE 1#define FALSE 0#define INVALID -1#define NULL 0#define total_instruction 320 //指令流长#define total_vp 32 //虚页长#define clear_period 50 //清零周期typedef struct{ //定义页面类型int pn; //pn为页号int pfn; //pfn为块号int counter; //为一个周期内访问页面次数int time; //为访问时间}pl_type;pl_type pl[total_vp]; //页面结构数组struct pfc_struct{ //定义页面控制结构int pn,pfn;struct pfc_struct *next;};typedef struct pfc_struct pfc_type;pfc_type pfc[total_vp],*freepf_head,*busypf_head,*busypf_tail;[root@localhost wuxiaofeng]# cp www.c mmm.c//pfc[total_vp]定义用户进程虚页控制结构//*freepf_head为空内存块号的头指针//*busypf_head为忙内存块的头指针//*busypf_tail为忙内存块的尾指针int diseffect, a[total_instruction];int page[total_instruction], offset[total_instruction];//int a[total_instruction]:指令流数组//int page[total_instruction]:每条指令所属页号//int offset[total_instruction]:每页装入10条指令后取模运算页号偏移值//int diseffect:页面失效次数void initialize();void FIFO();main(){int S,i,j,temp;srand(getpid()*10); //由于每次运行时进程号不同,故可用来作为初始化[root@localhost wuxiaofeng]# cp www.c mmm.c随机数队列的“种子”S=(float)319*rand()/32767+1;for(i=0;i<total_instruction;i+=4) //产生指令队列{a[i]=S; //任选一指令访问点a[i+1]=a[i]+1; //顺序执行一条指令a[i+2]=(float)a[i]*rand()/RAND_MAX; //执行前地址指令m'a[i+3]=a[i+2]+1; //执行后地址指令S=(float)rand()*(318-a[i+2])/RAND_MAX+a[i+2]+2;}for(i=0;i<total_instruction;i++) //将指令序列变换成页地址流{page[i]=a[i]/10;offset[i]=a[i]%10;}for(i=4;i<=32;i++) //用户内存工作区从4个块到32个块{printf("%2d page frames",i);[root@localhost wuxiaofeng]# cp www.c mmm.cFIFO(i);printf("\n");}}void FIFO(total_pf)int total_pf; //用户进程的内存块数{int i,j;pfc_type *p,*t;initialize(total_pf); //初始化相关内存块控制用数据结构busypf_head=busypf_tail=NULL;for(i=0;i<total_instruction;i++){if(pl[page[i]].pfn==INVALID) //页面失效{diseffect+=1; // 失效次数if(freepf_head==NULL) //无空闲块{p=busypf_head->next;pl[busypf_head->pn].pfn=INVALID;freepf_head=busypf_head; //释放忙内存块队列中的第一个块freepf_head->next=NULL;busypf_head=p;[root@localhost wuxiaofeng]# cp www.c mmm.c}p=freepf_head->next; //按FIFO方式调新页面入内存块freepf_head->next=NULL;freepf_head->pn=page[i];pl[page[i]].pfn=freepf_head->pfn;if(busypf_tail==NULL)busypf_head=busypf_tail=freepf_head;else{busypf_tail->next=freepf_head;busypf_tail=freepf_head;}freepf_head=p;}}printf(" FIFO:%6.4f",1-(float)diseffect/320);}void initialize(total_pf) //初始化相关数据结构int total_pf; //用户进程的内存页面数{int i;diseffect=0;for(i=0;i<total_vp;i++){pl[i].pn=i;pl[i].pfn=INVALID; //置页面控制结构中的页号,页面为空pl[i].counter=0;pl[i].time=-1; //页面控制结构中的访问次数为0,时间为-1}for(i=1;i<total_pf;i++){pfc[i-1].next=&pfc[i];pfc[i-1].pfn=i-1; //建立pfc[i-1]和pfc[i]之间的连接}pfc[total_pf-1].next=NULL;pfc[total_pf-1].pfn=total_pf-1;freepf_head=&pfc[0]; //空页面队列的头指针为pfc[0]}[root@localhost wuxiaofeng]# lsa.out fifo.c[root@localhost wuxiaofeng]# /root/wuxiaofeng/a.out4 page frames FIFO:0.54065 page frames FIFO:0.56256 page frames FIFO:0.58137 page frames FIFO:0.59068 page frames FIFO:0.60629 page frames FIFO:0.612510 page frames FIFO:0.637511 page frames FIFO:0.656212 page frames FIFO:0.671913 page frames FIFO:0.681314 page frames FIFO:0.696915 page frames FIFO:0.715616 page frames FIFO:0.728117 page frames FIFO:0.750018 page frames FIFO:0.759419 page frames FIFO:0.771920 page frames FIFO:0.775021 page frames FIFO:0.781222 page frames FIFO:0.809423 page frames FIFO:0.843824 page frames FIFO:0.843825 page frames FIFO:0.843826 page frames FIFO:0.843827 page frames FIFO:0.850028 page frames FIFO:0.887529 page frames FIFO:0.893830 page frames FIFO:0.893831 page frames FIFO:0.893832 page frames FIFO:0.9000[root@localhost wuxiaofeng]#实验小结:通过本次实验,我收获很多。
实验四存储管理背景知识耗尽内存是Windows 2000/XP系统中最常见的问题之一。
当系统耗尽内存时,所有进程对内存的总需求超出了系统的物理内存总量。
随后,Windows 2000/XP必须借助它的虚拟内存来维持系统和进程的运行。
虚拟内存机制是Windows 2000/XP操作系统的重要组成部分,但它的速度比物理内存慢得多,因此,应该尽量避免耗尽物理内存资源,以免导致性能下降。
解决内存不足问题的一个有效的方法就是添加更多的内存。
但是,一旦提供了更多的内存,Windows 2000/XP很可以会立即“吞食”。
而事实上,添加更多的内存并非总是可行的,也可能只是推迟了实际问题的发生。
因此,应该相信,优化所拥有的内存是非常关键的。
1. 分页过程当Windows 2000/XP求助于硬盘以获得虚拟内存时,这个过程被称为分页(paging) 。
分页就是将信息从主内存移动到磁盘进行临时存储的过程。
应用程序将物理内存和虚拟内存视为一个独立的实体,甚至不知道Windows 2000/XP使用了两种内存方案,而认为系统拥有比实际内存更多的内存。
例如,系统的内存数量可能只有16MB,但每一个应用程序仍然认为有4GB内存可供使用。
使用分页方案带来了很多好处,不过这是有代价的。
当进程需要已经交换到硬盘上的代码或数据时,系统要将数据送回物理内存,并在必要时将其他信息传输到硬盘上,而硬盘与物理内存在性能上的差异极大。
例如,硬盘的访问时间通常大约为4-10毫秒,而物理内存的访问时间为60 us,甚至更快。
2. 内存共享应用程序经常需要彼此通信和共享信息。
为了提供这种能力,Windows 2000/XP必须允许访问某些内存空间而不危及它和其他应用程序的安全性和完整性。
从性能的角度来看,共享内存的能力大大减少了应用程序使用的内存数量。
运行一个应用程序的多个副本时,每一个实例都可以使用相同的代码和数据,这意味着不必维护所加载应用程序代码的单独副本并使用相同的内存资源。
实验四固定分区存储管理一、实验目的通过编写固定分区存储管理的模拟程序,加深对操作系统存储管理功能中的固定分区管理方式、主存分配表等相应知识的理解。
二、实验内容(1)作业J3请求资源,申请5K大小的内存空间;(2)作业J4申请33K大小的内存空间;(3)作业J1执行完毕,释放空间4、编写程序实现相应存储空间的分配和去配,若请求成功,修改主存分配表,并输出该表,若请求不能满足,输出“分配失败”。
(其中不考虑空闲分区的移动)。
实验代码:#include<stdio.h>#include<vector>#include<string>#include<string.h>#include<iostream>using namespace std;//定义进程资源类class Resource{public :string name; //用来表示占用进程int num; //用来标识分区号int begin; //用来存放其实地址int length; //用来标识内存长度int take; //用来表示当前的该资源是否被占用Resource(int n,int b,int l,int t){num = n;begin = b;length = l;take = t;}};//定义输出类class Output{public :string o_name;int o_num;int o_begin;int o_length;int o_take;};//申请资源请求bool Request(string name,int len,vector<Resource> &res) {vector<Resource *> r;//!!!!!!!!在这边定义一个指针,用来指向res,这里的好处是待会进行排序的时候,不会修改原来的res原来元素的顺序!!!!for(int m=0;m<res.size();m++){r.push_back(&res[m]);}//按书上所说的,首先对分区进行从小到大进行排序。
欢迎共阅班级: 姓名: 学号:5) 当前计算机的实际内存大小为:______________________________________ 分析程序4-1,请回答问题:1) 理论上每个Windows 应用程序可以独占的最大存储空间是:_____________2) 程序中,用于检查系统中虚拟内存特性的API 函数是:__________________ 4.2 Windows 虚拟内存本节实验的目的是:实验4存储管理1) 通过实验了解Windows内存的使用,学习如何在应用程序中管理内存,体会Windows应用程序内存的简单性和自我防护能力。
2) 学习检查虚拟内存空间或对其进行操作;3) 了解Windows的内存结构和虚拟内存的管理,进而了解进程堆和Windows为使用内存而提供的一些扩展功能。
1. 工具/准备工作在开始本节实验之前,请回顾教材的相关内容。
需要准备一台运行Windows系统的计算机,且安装了C/C++编译器。
2. 实验内容与步骤将系统当前的保留区(reserved)虚拟地址空间填入表4.3中。
表4.3 实验记录2) 根据运行结果,请简单描述程序运行的流程:_________________________________________________________________________________________________________________________________________的程序段,该段程序试图通过VirtualAlloc()函数,然后利用物理备用内存将整个块分配到虚拟内存空间的任何位置。
这种技术只对拥有1GB以上的RAM且都有换页文件的计算机可行。
从运行结果看,这种技术成功了吗?_________________。
3) 程序中说明为___________________________________________________的程序段,该段程序利用VirtualAlloc()函数,如果函数成功,则获得大块内存,但不将任何物理内存调配到此块中。
操作系统存储管理实验报告总结篇一:东华大学操作系统存储管理实验报告东华大学计算机学院操作系统实验报告实验名称:存储管理问题姓名:姜元杰学号:111310228班级:计算机1102 指导老师:李继云报告日期: XX/11/2一、实验概述1. 实验目标存储管理的主要功能之一是合理地分配空间。
请求页式管理是一种常用的虚拟存储管理技术。
本实验的目的是通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式管理的页面置换算法。
2. 实验要求1) 通过随机数产生一个指令序列,共320条指令,指令的地址按下述原则生成:? 50%的指令是顺序执行的;? 25%的指令是均匀分布在前地址部分。
? 25%的指令是均匀分布在后地址部分。
2) 将指令序列变换成页地址流? 页面大小 = 10条指令? 4页? 用户虚存容量 = 32页;? 在用户虚存中,按每K存放10条指令排列虚存地址3) 计算并输出下述各种算法在不同内存容量下的命中率。
? 先进先出的算法(FIFO);? 最近最少使用算法(LRU);? 最佳淘汰算法(OPT);? 命中率=1-页面失效次数/页地址流长度;输出以表结构输出,行头是页码,列头是对应替换算法。
在本实验中,页地址流长度为320,页面失效次数为每次访问相应指令时,该指令所对应的页不在内存的次数。
二、实验内容1. 设计思路总体思路:设计存储管理类(class StorageManagemen),封装FIFO,LRU,OPT算法实现函数与各自所需公共或个体数据机构和公共代码部分,实现“TOP-DOWN”的程序设计思想,增强代码结构性和可读性。
1) 先进先出的算法(FIFO):FIFO是最简单的页置换算法,FIFO的页置换的算法为每个页记录着该页调入内存的时间。
当必须置换一页时,将选择最旧的页。
注意并不需要记录调入一页的确切时间,可以创建一个FIFO队列来管理内存中的所有页。
队列中的首页将被置换。
实验四操作系统存储管理实验报告一、实验目的本次操作系统存储管理实验的主要目的是深入理解操作系统中存储管理的基本原理和方法,通过实际操作和观察,掌握内存分配、回收、地址转换等关键技术,提高对操作系统存储管理机制的认识和应用能力。
二、实验环境操作系统:Windows 10开发工具:Visual Studio 2019三、实验原理1、内存分配方式连续分配:分为单一连续分配和分区式分配(固定分区和动态分区)。
离散分配:分页存储管理、分段存储管理、段页式存储管理。
2、内存回收算法首次适应算法:从内存低地址开始查找,找到第一个满足要求的空闲分区进行分配。
最佳适应算法:选择大小最接近作业需求的空闲分区进行分配。
最坏适应算法:选择最大的空闲分区进行分配。
3、地址转换逻辑地址到物理地址的转换:在分页存储管理中,通过页表实现;在分段存储管理中,通过段表实现。
四、实验内容及步骤1、连续内存分配实验设计一个简单的内存分配程序,模拟固定分区和动态分区两种分配方式。
输入作业的大小和请求分配的分区类型,程序输出分配的结果(成功或失败)以及分配后的内存状态。
2、内存回收实验在上述连续内存分配实验的基础上,添加内存回收功能。
输入要回收的作业号,程序执行回收操作,并输出回收后的内存状态。
3、离散内存分配实验实现分页存储管理的地址转换功能。
输入逻辑地址,程序计算并输出对应的物理地址。
4、存储管理算法比较实验分别使用首次适应算法、最佳适应算法和最坏适应算法进行内存分配和回收操作。
记录不同算法在不同作业序列下的内存利用率和分配时间,比较它们的性能。
五、实验结果与分析1、连续内存分配实验结果固定分区分配方式:在固定分区大小的情况下,对于作业大小小于或等于分区大小的请求能够成功分配,否则分配失败。
内存状态显示清晰,分区的使用和空闲情况一目了然。
动态分区分配方式:能够根据作业的大小动态地分配内存,但容易产生内存碎片。
2、内存回收实验结果成功回收指定作业占用的内存空间,内存状态得到及时更新,空闲分区得到合并,提高了内存的利用率。
存储管理实验报告一、实验目的1.了解存储管理的概念及作用;2.掌握存储管理的基本操作和技术;3.熟悉常见的存储管理工具和方法;4.分析存储管理对系统性能的影响。
二、实验内容1.了解存储管理的基本概念:存储管理是指对计算机中的存储器进行有效管理和利用的一种技术手段。
主要包括内存管理和外存管理两个方面。
2.学习常见的存储管理工具和方法:(1)内存管理方案:连续内存管理、非连续内存管理和虚存管理;(2)外存管理方案:磁盘存储管理、文件系统管理和缓存管理等。
3.实际操作存储管理工具:(1)使用操作系统的内存管理工具,如Windows的任务管理器和Linux的top命令等,查看内存使用情况和进程占用的内存大小;(2)使用磁盘管理工具,如Windows的磁盘管理器和Linux的fdisk命令等,查看磁盘的分区情况和使用状况;(3)使用文件系统管理工具,如Windows的资源管理器和Linux的ls命令等,查看文件和目录的存储和管理状态。
4.分析存储管理对系统性能的影响:(1)使用性能监控工具,如Windows的性能监视器和Linux的sar 命令等,实时监测系统的内存、磁盘和文件系统等性能指标;(2)对比不同存储管理方案的优缺点,分析其对系统性能的影响;(3)根据实验结果提出优化存储管理的建议。
三、实验步骤1.阅读相关文献和资料,了解存储管理的基本概念和原理;2.使用操作系统的内存管理工具,查看当前系统内存的使用情况;3.使用操作系统的磁盘管理工具,查看当前系统磁盘的分区情况;4.使用操作系统的文件系统管理工具,查看当前系统文件和目录的存储和管理状态;5.使用性能监控工具,实时监测系统的内存、磁盘和文件系统等性能指标;6.根据实验结果,分析存储管理对系统性能的影响;7.结合实验结果,提出优化存储管理的建议。
四、实验结果1.使用内存管理工具查看系统内存使用情况,发现部分进程占用内存过高,导致系统运行缓慢;2.使用磁盘管理工具查看系统磁盘分区情况,发现磁盘分区不合理,造成磁盘空间利用率较低;3.使用文件系统管理工具查看文件和目录的存储和管理状态,发现有大量重复和冗余的文件,需要进行清理和整理;4.使用性能监控工具实时监测系统的性能指标,发现内存和磁盘的利用率较高,需要优化存储管理。
实验四存储管理背景知识耗尽内存是Windows 2000/XP系统中最常见的问题之一。
当系统耗尽内存时,所有进程对内存的总需求超出了系统的物理内存总量。
随后,Windows 2000/XP必须借助它的虚拟内存来维持系统和进程的运行。
虚拟内存机制是Windows 2000/XP操作系统的重要组成部分,但它的速度比物理内存慢得多,因此,应该尽量避免耗尽物理内存资源,以免导致性能下降。
解决内存不足问题的一个有效的方法就是添加更多的内存。
但是,一旦提供了更多的内存,Windows 2000/XP很可以会立即“吞食”。
而事实上,添加更多的内存并非总是可行的,也可能只是推迟了实际问题的发生。
因此,应该相信,优化所拥有的内存是非常关键的。
1. 分页过程当Windows 2000/XP求助于硬盘以获得虚拟内存时,这个过程被称为分页(paging) 。
分页就是将信息从主内存移动到磁盘进行临时存储的过程。
应用程序将物理内存和虚拟内存视为一个独立的实体,甚至不知道Windows 2000/XP使用了两种内存方案,而认为系统拥有比实际内存更多的内存。
例如,系统的内存数量可能只有16MB,但每一个应用程序仍然认为有4GB内存可供使用。
使用分页方案带来了很多好处,不过这是有代价的。
当进程需要已经交换到硬盘上的代码或数据时,系统要将数据送回物理内存,并在必要时将其他信息传输到硬盘上,而硬盘与物理内存在性能上的差异极大。
例如,硬盘的访问时间通常大约为4-10毫秒,而物理内存的访问时间为60 us,甚至更快。
2. 内存共享应用程序经常需要彼此通信和共享信息。
为了提供这种能力,Windows 2000/XP必须允许访问某些内存空间而不危及它和其他应用程序的安全性和完整性。
从性能的角度来看,共享内存的能力大大减少了应用程序使用的内存数量。
运行一个应用程序的多个副本时,每一个实例都可以使用相同的代码和数据,这意味着不必维护所加载应用程序代码的单独副本并使用相同的内存资源。
无论正在运行多少个应用程序实例,充分支持应用程序代码所需求的内存数量都相对保持不变。
3. 未分页合并内存与分页合并内存Windows 2000/XP决定了系统内存组件哪些可以以及哪些不可以交换到磁盘上。
显然,不应该将某些代码(例如内核) 交换出主内存。
因此,Windows 2000/XP将系统使用的内存进一步划分为未分页合并内存和分页合并内存。
分页合并内存是存储迟早需要的可分页代码或数据的内存部分。
虽然可以将分页合并内存中的任何系统进程交换到磁盘上,但是它临时存储在主内存的这一部分,以防系统立刻需要它。
在将系统进程交换到磁盘上之前,Windows 2000/XP会交换其他进程。
未分页合并内存包含必须驻留在内存中的占用代码或数据。
这种结构类似于早期的MS-DOS 程序使用的结构,在MS-DOS中,相对较小的终止并驻留程序(Terminate and Stay Resident,TSR) 在启动时加载到内存中。
这些程序在系统重新启动或关闭之前一直驻留在内存的特定部分中。
例如,防病毒程序将加载为TSR程序,以预防可能的病毒袭击。
未分页合并内存中包含的进程保留在主内存中,并且不能交换到磁盘上。
物理内存的这个部分用于内核模式操作(例如,驱动程序)和必须保留在主内存中才能有效工作的其他进程。
没有主内存的这个部分,内核组件就将是可分页的,系统本身就有变得不稳定的危险。
分配到未分页内存池的主内存数量取决于服务器拥有的物理内存数量以及进程对系统上的内存地空间的需求。
不过,Windows 2000/XP将未分页合并内存限制为256MB (在Windows NT 4中的限制为128MB) 。
根据系统中的物理内存数量,复杂的算法在启动时动态确定Windows 2000/XP系统上的未分页合并内存的最大数量。
Windows 2000/XP内部的这一自我调节机制可以根据当前的内存配置自动调整大小。
例如,如果增加或减少系统中的内存数量,那么Windows2000将自动调整未分页合并内存的大小,以反映这一更改。
4. 提高分页性能只有一个物理硬盘驱动器的系统限制了优化分页性能的能力。
驱动器必须处理系统和应用程序的请求以及对分页文件的访问。
虽然物理驱动器可能有多个分区,但是将分页文件分布到多个分区的分页文件并不能提高硬盘驱动器的能力。
只有当一个分区没有足够的空间来包含整个分页文件时,才将分页文件放在同一个硬盘的多个分区上。
拥有多个物理驱动器的服务器可以使用多个分页文件来提高分页性能。
关键是将分页请求的负载分布到多个物理硬盘上。
实际上,使用独立物理驱动器上的分页文件,系统可以同时处理多个分页请求。
各个物理驱动器可以同时访问它自己的分页文件并写入信息,这将增加可以传输的信息量。
多个分页文件的最佳配置是将各个分页文件放在拥有自己的控制器的独立驱动器上。
不过,由于额外的费用并且系统上的可用中断很有限,因此对于大多数基于服务器的配置来说,这可能是不切实际的解决方案。
分页文件最重要的配置参数是大小。
无论系统中有多少个分页文件,如果它们的大小不合适,那么系统就可能遇到性能问题。
如果初始值太小,那么系统可能必须扩大分页文件,以补偿额外的分页活动。
当系统临时增加分页文件时,它必须在处理分页请求的同时创建新的空间。
这时,系统将出现大量的页面错误,甚至可能出现系统失效。
当系统必须在进程的工作区外部(在物理内存或分页文件中的其他位置) 查找信息时,就会出现页面错误。
当系统缺乏存储资源(物理内存及虚拟内存) 来满足使用需求,从而遇到过多的分页时,就会出现系统失效。
系统将花更多的时间来分页而不是执行应用程序。
当系统失效时,Memory:Pages/see计数器将持续高于每秒100页。
系统失效严重降低了系统的性能。
此外,动态扩展分页文件将导致碎片化。
分页文件将散布在整个磁盘上而不是在启动时的连续空间中创建,从而增加了系统的开销,并导致系统性能降低。
因此,应该尽量避免系统增加分页文件的大小。
5. Windows虚拟内存Windows 2000是32位的操作系统,它使计算机CPU可以用32位地址对32位内存块进行操作。
内存中的每一个字节都可以用一个32位的指针来寻址。
这样,最大的存储空间就是232字节或4000兆字节(4GB) 。
这样,在Windows下运行的每一个应用程序都认为能独占可能的4GB大小的空间。
而另一方面,实际上没有几台机器的RAM能达到4GB,更不必说让每个进程都独享4GB 内存了。
Windows在幕后将虚拟内存(virtual memory,VM) 地址映射到了各进程的物理内存地址上。
而所谓物理内存是指计算机的RAM和由Windows分配到用户驱动器根目录上的换页文件。
物理内存完全由系统管理。
在Windows 2000环境下,4GB的虚拟地址空间被划分成两个部分:低端2GB提供给进程使用,高端2GB提供给系统使用。
这意味着用户的应用程序代码,包括DLL以及进程使用的各种数据等,都装在用户进程地址空间内(低端2GB) 。
用户进程的虚拟地址空间也被分成三部分:1) 虚拟内存的已调配区(committed) :具有备用的物理内存,根据该区域设定的访问权限,用户可以进行写、读或在其中执行程序等操作。
2) 虚拟内存的保留区(reserved) :没有备用的物理内存,但有一定的访问权限。
3) 虚拟内存的自由区(free) :不限定其用途,有相应的PAGE_NOACCESS权限。
与虚拟内存区相关的访问权限告知系统进程可在内存中进行何种类型的操作。
例如,用户不能在只有PAGE_READONL Y权限的区域上进行写操作或执行程序;也不能在只有PAGE_EXECUTE权限的区域里进行读、写操作。
而具有PAGE_ NOACCESS权限的特殊区域,则意味着不允许进程对其地址进行任何操作。
在进程装入之前,整个虚拟内存的地址空间都被设置为只有PAGE_NOACCESS权限的自由区域。
当系统装入进程代码和数据后,才将内存地址的空间标记为已调配区或保留区,并将诸如EXECUTE、READWRITE和READONL Y的权限与这些区域相关联。
程序清单4-1还显示了如何理解Virtual QueryEX() API填充的MEMORY_BASIC_ INFORMA TION结构,如表4-l所示。
此数据描述了进程虚拟内存空间中一组虚拟内存页面的当前状态。
其中State项表明这些区域是否为自由区、已调配区或保留区;Protect项则包含了Windows系统为这些区域添加了何种访问保护;Type项则表明这些区域是可执行图像、内存映射文件还是简单的私有内存。
VirtualQueryEX() API能让用户在指定的进程中,对虚拟内存地址的大小和属性进行检测。
Windows还提供了一整套能使用户精确控制应用程序的虚拟地址空间的虚拟内存API。
一些用于虚拟内存操作及检测的API见表4-2所示。
提供虚拟内存分配功能的是VirtualAlloc() API。
该API支持用户向系统要求新的虚拟内存或改变已分配内存的当前状态。
用户若想通过VirtualAlloc() 函数使用虚拟内存,可以采用两种方式通知系统:1) 简单地将内存内容保存在地址空间内;2) 请求系统返回带有物理存储区(RAM的空间或换页文件) 的部分地址空间。
用户可以用flAllocation Type参数(commit和reserve) 来定义这些方式,用户可以通知Windows按只读、读写、不可读写、执行或特殊方式来处理新的虚拟内存。
与VirtualAlloc() 函数对应的是VirtualFree() 函数,其作用是释放虚拟内存中的已调配页或保留页。
用户可利用dwFree Type参数将已调配页修改成保留页属性。
VirtualProtect() 是VirtualAlloc() 的一个辅助函数,利用它可以改变虚拟内存区的保护规范。
1、实验目的(1)通过对Windows 2000“任务管理器”、“计算机管理”、“我的电脑”属性、“系统信息”、“系统监视器”等程序的应用,学习如何察看和调整Windows的内存性能,加深对操作系统存储管理、虚拟存储管理等理论知识的理解。
(2)了解Windows 2000的内存结构和虚拟内存的管理,理解进程的虚拟内存空间和物理内存的映射关系。
2、实验内容和步骤(1)观察和调整Windows 2000/XP的内存性能。
步骤1:阅读“背景知识”,请回答:1) 什么是“分页过程”?___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ 2) 什么是“内存共享”?____________________________________________________________________________________________________________________________________________ ________________________________________________________________________ 3) 什么是“未分页合并内存”和“分页合并内存”?Windows 2000中,未分页合并内存的最大限制是多少?____________________________________________________________________________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ 4) Windows 2000分页文件默认设置的最小容量和最大容量是多少?____________________________________________________________________________________________________________________________________________步骤2:登录进入Windows。