A. 页面调度算法的实验内容
(1)设计程序实现以上三种页面调度算法,要求:
①.可以选择页面调度算法类型;
②.可以为进程设置分到物理页的数目,设置进程的页面引用情况,可以从键盘输入页面序列,也可从文件中读取;
③.随时计算当前的页面调度次数的缺页中断率;乎销
④.使用敲键盘或响应WM-TIMER的形式模仿时间的流逝;
⑤.以直观的的形式将程序的执行情况显示在计算机屏幕上;
⑥.存盘及读盘功能,可以随时将数据存入磁盘文件,供以后重复实验时使用。
(2)假定进程分配到3个物理块,对于下面的页面引用序列:
7-0-1-2-0-3-0-4-2-3-0-3-2-1-2-0-1-7-0-1
请分别用先进和先出调度算法,最近最少用调度算法,最近最不常用调度算法计算缺页中断次数,缺页中断率和缺页调度次数、缺页置换率。
再假定进程分配到4、5个物理块,重复本实验。
(3)假定进程分配到3个物理块,对于下面的页面引用序列:
4-3-2-1-4-3-5-4-3-2-1-5-0-7-3-8-9-0-2-1-4-7-3-9
请分别用先进裂丛先出调度算法、最近最少用调度算法,最近最不常用调度算法计算缺页中断次数,缺页中断率和缺页调度次数、缺页置换率。
再假定进程分配到4、5个物理块,重复本实验。
(4)假定进程分配到3个物理块,使用程序的动态页面序列生成算法,生成一个页面序列,将此序列存岁源游入磁盘文件。再从磁盘文件读入该序列,用程序分别计算三种算法下的缺页中断次数、缺页中断率和缺页调度次数、缺页置换率。
B. 操作系统页面置换题算法、步骤
好好看看 孙忠秀《操作系统》吧!授之以渔!如果你想要Q我,我传给你!
C. 页面调度算法的介绍
页式虚拟存储器实现的一个难点薯游是设计页面调度(置换)算法,即将新页面调入内存时,如果内存中所有的物理页都已经唤培分配出去,就要按某数链销种策略来废弃某个页面,将其所占据的物理页释放出来,供新页面使用。
D. 页面调度算法的实验原理
目前有许多页面调度算法,本实验主要涉及先进先出调度算法、最近最少调度算法、最近最不常用调度算法。本实验使用页面调度算法时作如下假灶迅设,进程在创建时由操作系统为之分配一个固定数目物理页,执行过程中物理页的数目和位置不会改变。也即进程进行页面调度时只能在分宴辩首到的几个物理页中进行。
下面对各调度算法的思想作一介绍。
<1> 先进先出调度算法
先进先出调度算法根据页面进入内存的时晌数间先后选择淘汰页面,先进入内存的页面先淘汰,后进入内存的后淘汰。本算法实现时需要将页面按进入内存的时间先后组成一个队列,每次调度队首页面予以淘汰。
<2>最近最少调度算法
先进先出调度算法没有考虑页面的使用情况,大多数情况下性能不佳。根据程序执行的局部性特点,程序一旦访问了某些代码和数据,则在一段时间内会经常访问他们,因此最近最少用调度在选择淘汰页面时会考虑页面最近的使用,总是选择在最近一段时间以来最少使用的页面予以淘汰。算法实现时需要为每个页面设置数据结构记录页面自上次访问以来所经历的时间。
<3>最近最不常用调度算法
由于程序设计中经常使用循环结构,根据程序执行的局部性特点,可以设想在一段时间内经常被访问的代码和数据在将来也会经常被访问,显然这样的页面不应该被淘汰。最近最不常用调度算法总是根据一段时间内页面的访问次数来选择淘汰页面,每次淘汰访问次数最少的页面。算法实现时需要为每个页面设置计数器,记录访问次数。计数器由硬件或操作系统自动定时清零。 缺页中断次数是缺页时发出缺页中断的次数。
缺页中断率=缺页中断次数/总的页面引用次数*100%
缺页调度次数是调入新页时需要进行页面调度的次数
缺页置换率=缺页调度次数/总的页面引用次数*100%
E. 页面置换策略
当缺页中断发生时,当你有很多内存时,可以从空闲页链表中取出一个空闲页映射到虚拟页。当内存不足时,会发生页面置换。由于访问磁盘的时间比访问内存的时间慢10万倍(磁盘时间:10ms,内存时间:100ns),哪怕SSD也就只有普通磁盘的10倍速度以上。平均访问时间 = 访问RAM的时间+ 丢失率*访问DISK时间,而访问磁盘时间为内存时间的几万倍,所以降低丢失率,哪怕很小的比重,都对平均访问时间有个很大的提升。所以一个好的页面置换算法尤为重要。
一个比较理想的算法应该是,要置换出去的页面,最远的讲来才会用到的页面。但是因为无法预测未来所以我们的算法应该尽量往这个算法身上去靠拢接近这个算法的效率。
现在想引入的置换是LRU,这个算法的原来通过过去的行为来预测未来,意思就是过去很少用到的页面,讲来也很少用到,这个算法的根据就是“局部性原则”,如何量化“很少使用”这个概率,可以基于使用频率或者最远使用时间。所以就诞生了2中算法,LFU(Least-Frequently-Used)以及LRU(Least-RecentlyUsed )算法。
可以观察图得出随着cache大小足够容纳所需要的内存时,就不会发生页面置换,不论哪个算法都是100%Hit的,但是其他的情况时,LRU时最接近理想算法(OPT)的。由于上面的平均访问时间的公式我们可以知道,哪怕稍微一点点的提升命中率都是对平均访问时间的提升都是巨大的。
也有些程序运行并不是按照局部性原则运行的,比如重复遍历一个数组,这个完全违法局部性原则,所以OPT类的算法反而性能最差。这个也说明了任何一种策略都是一定的适用场景的。
上述分析过了LRU的优劣势,现在谈谈如何实现LRU。如果要完美的实现LRU,必须要再每次内存访问的时候(指令获取,读以及写)都要把当前页移动到链表的头部来。这个做法毫无疑问的会消耗很大的性能。一种方式是获取硬件的某种支持,当要给一个物理页被访问时,会再某个存储再地方打上内存的标记。然后需要进行淘汰时,遍历下查找最晚访问的页面。这个遍历过程时很消耗性能的,尤其页面总数很大的时候。所以这两个方法都不合适。
很难实现准确的LRU算法,近似的LRU来替代,而且能解决掉LRU的性能热点问题,现代操作系统中也基本都是采用这个方法。这种想法需要一些硬件的支持,需要一些bit来表示,这个页面是否访问过,当这个物理页被访问时,这个use bit会标记1,清除为0的任务就交给操作系统。假设所有的物理页的使用位都被安排再一个环形的链表中,操作系统会周期性的清除use bit 从1到0,当发生需要页面置换时的场景时,如果遇到的下个页面如果不是0的话,也会按照逆时针方向去清除use bit位,直到遇到use bit为0.
当页面内容被修改(dirty)时,如果发生页面置换时,需要把页面内容写入磁盘,写入磁盘的速度是很慢的,所以有的系统会优先考虑没被修改的页面来置换。
当然使用页表项里的use bit来实现LRU,并不是唯一的近似方法,还有比如多级链表等等方式。
手机操作系统IOS或者android系统,对延迟要蠢含求很高的,如果发生页面置换,一瞬间会有很大延迟。所以手机系统,再内存低于一定明逗阀值时,会通知正在运行的系统去释放内存,如果释放的内存不够,就会直接终止内存占用高的应用程序,来满足系统的内存需求。而传统型的操作系统需要应用的面很广,所以需要做的满足的场景要广激档卖泛,不像手机操作系统,延迟性的高低直接带来体验的好差,所以延迟是手机系统设计中非常注重的一点。
F. 页式存储管理方案中的内存分配
#include<iostream.h>
#include<fstream.h>
#include<stdio.h>
#include<string.h>
#include<iomanip.h>
#include<stdlib.h>
const max=40;
const page_quantity=3;
typedef struct node
{
int number;
int timer;
}nodes;
nodes queues[max];//待替换的文件
int queue_quantity;
int pages[page_quantity];//物理页面
void inital()
{
for(int i=0;i<max;i++)
{
queues[i].number=0;
queues[i].timer=i;
}
queue_quantity=0;
for(int j=0;i<page_quantity;j++)
{
pages[i]=0;
}
}
void readData()
{
cout<<"输入进程A的页面访问序列文件(例:f1.txt)"<<endl;
char fname[20];
cin>>fname;
ifstream inf(fname,ios::nocreate);
if(!inf)
{
cout<<"文件不可读,请稍后再试"<<endl;
}
while(!inf.eof())
{
inf>>queues[queue_quantity].number;
queue_quantity++;
}
cout<<"欲调用页面流:"<<endl;
for(int i=0;i<queue_quantity;i++)
{
cout<<queues[i].number<<" ";
}
cout<<endl;
}
//最佳页面调度算法
void excellent()
{
cout<<"最佳页面调度算法"<<endl;
int absences=0;//缺页次数
for(int i=0;i<page_quantity;i++)
{
pages[i]=queues[i].number;
absences++;
}
int qs=queue_quantity-3;
cout<燃伍<"命旦尘中以及置换出的页模段禅面顺序:"<<endl;
while(--qs)
{
int a[page_quantity]={0,0,0},x=0,tmp,tmps;
int flag=0;
for(int j=0;j<page_quantity;j++)
{
if(queues[i].number==pages[j])
{
cout<<"命中 ";
flag=1;
}
}
if(!flag)//没有命中
{
for(int k=0;k<page_quantity;k++)
{
int p=0;
for(int l=i;l<queue_quantity;l++)
{
if((a[x]==0) && (pages[k]==queues[l].number))
{
a[x]=l;
p=1;
}
}
if(!p)
{
a[x]=1000;
}
x++;
}
int q1=0;
for(int x1=0;x1<page_quantity;x1++)
{
if(a[x1]==1000)
{
cout<<pages[x1]<<" ";
pages[x1]=queues[i].number;
q1=1;
break;
}
}
if(q1)
{
}
else
{
if(a[0]>a[1])
tmp=a[0];
else
tmp=a[1];
if(a[2]>tmp)
tmps=a[2];
else
tmps=tmp;
for(int a=0;a<page_quantity;a++)
{
if(pages[a]==queues[tmps].number)
{
cout<<pages[a]<<" ";
pages[a]=queues[i].number;
}
}
}
absences++;
}
i++;
}
cout<<endl;
cout<<"总的缺页次数: "<<absences<<endl;
}
void main()
{
cout<<"=================虚拟页面调度算法模拟系统================="<<endl;
inital();
readData();
excellent();
}
G. 页面调度先进先出算法(FIFO) 用C语言描述 欢迎高手前来挑战
c语言实现的页面调度算法,用三种算法实衡大虚现调度咐燃1.先进先出2.OPT3.LRU 2.页面序列从指定的文本文件(TXT文件)中取出3.输出:第一行:仿毕每次淘汰的页面号 第二行:显示缺页的总次数(上机已经运行通过!!)-pages scheling algorithm, a three-Scheling Algorithm 1. FIFO 2.OPT3.LRU 2. Pages from the designated sequence of text files (TXT) out of three. Output : the first line : each of the pages out of the second line : show na the total number of pages (on the plane had run through! !)
H. 进程/作业/页面调度算法
进程已获得除CPU之外的所有必须资源,只等待操作系统利用CPU调度算法将CPU分配给该进程以便执行。
进程等待某一特定事件的出现。如[I/O操作,在该过程中,进程依旧位于内存内,且占有CPU资源。
(1)静态优先数法:
一开始创建的时候就确定他的优先数,并在运行时保持不变。确定优先数时可以让外设的进程优先,或者操作时间长的优先....
(2)动态优先数法:
克服无法修改优先数的问题。CPU占用时间过长优先数下降,进程等待时间过长,优先数提高。
时间片太短切换开销太大不划算,太长又变成了FCFS。
引入多个就绪队列,在时间片轮转基础上改进
最高优先级队列运行一个时间片,次高两个,低优先级四个。当该进程用完所分配时间片仍未执行完时,需要调入下一级队列,下一级队列只有在上一级队列为空时才有机会执行。如果进程执行时有新进程进入上级优先级渣燃返的队列,则会中断该进程并放入原队列的队尾然后执行新进程。
非抢占式的先来先服务(First Come First Severd, FCFS)算法了。
顾名思义,先来后到,每次从就绪队列选择最先进入队列的进程,然后一直运行,直到进程退出或被阻塞,才会继续从队列中选择第一个进程接着运行。
这似乎很公平,但是当一个长作业先运行了,那么后面的短作业等待的时间就会很长,不利于短作业。
最短作业优先(Shortest Job First, SJF)调度算法同样也是顾名思义,它会优先选择运行时间最短的进程来运行,这有助于提高系统的吞吐量。
这显然对长作业不利,很容易造成一种极端现象。
高响应比优先 (Highest Response Ratio Next, HRRN)调度算法主要是权衡了短作业和长作业。
每次进行进程调度时,先计算“响应比优先级”,然后把“响应比优先级”最高的进程投入运行,“响应比优先级”的计算公式:
最古老、最简单、最公平且使用最广的算法就是时间片轮转(Round Robin, RR)调度算法。
时间片的长度就是一个很关键的点:
如果时间片设得太短会导致过多的进程上下文切换,降低了 CPU 效率;如果设得太长又可能引起对短作业进程的响应时间变长。
静态优先级:创建进程时候,就已经确定了优先级了,然后整个运行时间优先级都不会变化;
动态优先级:根据进程的动态变化调整优先级,比如如果进程运行时间增加,则降低其优先级,如果进程等待时间(就绪队列的等待时间)增加,则升高其优先级,也就是随着时间的推移增加等待进程的优先级。
(1)非抢占式:当就绪队列中出现优先级高的进程,运行完当前进程,再选择优先级高的进程。
(2)抢占式:当就绪队列中出现优先级高的进程,当前进程挂起,调度优先级高的进程运行。
但是依然有缺点,可能会导致低优先级的进程永远不会运行。
设置了多个队列,赋予每个队列不同的优先级,每个队列优先级从高到低,同时优先级越高时间片越短;
新的进程会被放入到第一级队列的末尾,按先来先服务的原则排队等待被调度,如果在第一级队列规定的时间片没运行完成,则将其转入到第二级队列的末尾,段谈以此类推,直至完成;
当较高优先级的队列为空,才调度较低优先级的队列中的进程运行。如果进程运行时,有新进程进入较高优先级的队列,则停止当前运行的进程并将其移入到原队列末尾,接着让较高优先级的进程运行。
对于短作业可能可以在第一级队列很快被处理完。对于长作如饥业,如果在第一级队列处理不完,可以移入下次队列等待被执行,虽然等待的时间变长了,但是运行时间也会更长了,所以该算法很好的兼顾了长短作业,同时有较好的响应时间。
每次选择淘汰的页面将是以后永不使用,或者在最长时间内不再被访问的页面,这样可以保证最低的缺页率。
最佳置换算法可以保证最低的缺页率,但是实际上,只有进程执行的过程中才能知道接下来会访问到的是哪个页面。操作系统无法提前预判页面的访问序列。因此,最佳置换算法是无法实现的。
算法思想:每次选择淘汰的页面是最早进入内存的页面。
该算法很简单,每次淘汰最在内存中待时间最久的各个,下面分别给出系统为进程分为配三个内存块和四个内存块的执行情况图。访问序列为3,2,1,0,3,2,4,3,2,1,0,4
算法思想:每次淘汰的页面是最近最久未使用的页面。
实现方法:赋予每个页面对应的页表项中,用访问字段记录该页面自上次被访问以来所经历的时间t。当需要淘汰一个页面时,选择现有页面中t最大的页面,即最近最久未使用。
最佳置换算法性能最好,但无法实现。先进先出置换算法实现简单,但是算法性能差。最近最久未使用置换算法性能好,是最接近OPT算法性能的,但是实现起来需要专门的硬件支持,算法开销大。时钟置换算法是一种性能和开销均平衡的算法。又称CLOCK算法,或最近未用算法(NRU,Not Recently Used)
简单CLOCK算法算法思想:为每个页面设置一个访问位,再将内存中的页面都通过链接指针链接成一个循环队列。当某个页被访问时,其访问位置1.当需要淘汰一个页面时,只需检查页的访问位。如果是0,就选择该页换出;如果是1,暂不换出,将访问位改为0,继续检查下一个页面,若第一轮扫描中所有的页面都是1,则将这些页面的访问位一次置为0后,再进行第二轮扫描(第二轮扫描中一定会有访问位为0的页面,因此简单的CLOCK算法选择一个淘汰页面最多会经过两轮扫描)。
除了考虑一个页面最近有没有被访问过之外,操作系统还需要考虑页面有没有被修改过。
改进型时钟置换算法的算法思想:在其他在条件相同时,应该优先淘汰没有被修改过的页面,从而来避免I/O操作。
I. 操作系统原理与应用之 页面调度算法问题
FIFO:即先进先出算法,就是先进去的页在位置不够时先淘汰。所以具体如下:
主存开始为空
访问1,1不在主存中,产生缺页中断,添加,主存里现在是:1
访问2,2不在主存中,产生缺页中断,添加,主存里现在是:1,2
以此类推,
1,2,3(缺页中断)
1,2,3,6(缺页中断)
访问4,4不在主存中,缺页中断,主存满了,最早的1淘汰,主存里现在是:2,3,6,4
然后3,6,4,7(缺页中断,2淘汰)
然后3,3在主存中,不产生中断
然后6,4,7,2(缺页中断,3淘汰)
4,7,2,1(缺页中断,6淘汰)
4在主存中,不中断
7在主存中,不中断
7,2,1,5(缺页中断,4淘汰)
2,1,5,6(缺页中断,7淘汰)
5在主存中,不中断
2在主存中渣吵,不中断
1在主存中,不中断
整个FIFO过程就是这样。
LRU是最近最久未使用的先淘汰,具体如下:
1(缺页中断)
1,2(缺页中断)
1,2,3(缺页中断)
1,2,3,6(缺页中断)
2,3,6,4(缺页中断,1最久没用过,淘汰)
3,6,4,7(缺页中断,2最久没用过,淘汰)
3在主存中,不中断,3最近使用过,主存中顺序调整为6,4,7,3
4,7,3,2(缺页中断,6最久没用过,淘汰)
7,3,2,1(缺页中断,4最久没用过,淘汰)
3,2,1,4(缺页中断,7最久没用过槐脊,淘汰)
2,1,4,7(缺页中断,3最久没用过,淘汰)
1,4,7,5(缺页中断,2最久没用过,淘汰)
4,7,5,6(缺页中断,1最久没用过,淘汰)
5在主存中,调整顺序为4,7,6,5
7,6,5,2(缺页中断,4最久没用过,淘汰)
6,5,2,1(缺页中断,7最久没用过,淘汰)
整个LRU过程就是这样。
全手打求采纳谢谢~!如有铅梁渗问题请追问~
J. 求高手教教我"虚拟内存页面调度算法"
如果你机子内存太小,不设虚拟内存的话,会内存不足,显然会影响速度。
Windows虚拟内存问题详解
本文详细介绍了虚拟内存的设置和相关问题的解决方法。
内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽。为了解决这个问题,Windows中运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,当内存占用完时,电脑就会宏伍自动调用硬盘来充当内存,以缓解内存的紧张。举一个例子来说,如果电脑只有128MB物理内存的话,当读取一个容量为200MB的文件时,就必须要用到比较大的虚拟内存,文件被内存读取之后就会先储存到虚拟内存,等待内存把文件全部储存到虚拟内存之后,跟着就会把虚拟内里储存的文件释放到原来的安装目录里了。
当系段绝兄统运行时,先要将所需的指令和数据从外部存储器(如硬盘、软盘、光盘等)调入内存中,CPU再从内存中读取指令或数据进行运算,并将运算结果存入内存中,内存所起的作用就像一个“二传手”的作用。当运行一个程序需要大量数据、占用大量内存时,内存这个仓库就会被“塞满”,而在这个“仓库”中总有一部分暂时不用的数据占据着有限的空间,所以要将这部分“惰性”的数据“请”出去,以腾出地方给“活性”数据使用。这时就需要新建另一个后备“仓库”去存放“惰性”数据。由于硬盘的空间很大,所以微软Windows 操作系统就将后备“仓库”的地址选在硬盘上,这个后备“仓库”就是虚拟内存。在默认情况下,虚拟内存是以名为Pagefile.sys的交换文件保存在硬盘的系统分区中。
手动设置虚拟内存
在默认状态下,是让系统管理虚拟内存的,但是系统默认设置的管理方式通常比较保守,在自动调节时会造成页面文件不连续,而降低读写效率,工作效率就显得不高,于是经常会出现“内存不足”这样的提示,下面就自已动手来设置它吧。
①用右键点击桌面上的“我的电脑”图标,在出现的右键菜单中选择“属性”选项打开“系统属性”窗口。在窗口中点击“高级”选项卡,出现高级设置的对话框。
②点击“性能”区域的“设置”按钮,在出现的“性能选项”窗口中选择“高级”选项卡,打开其对话框。
③在该对话框中可看到关于虚拟内存的区域,点击“更改”按钮进入“虚拟内存”的设置窗口。选择一个有较大空闲容量的分区,勾选“自定义大小”前的复选框,将具体数值填入“初始大小”、“最大值”栏中,而后依次点击“设置→确定”按钮即可,最后重新启动计算机使虚拟内存设置生效。
建议:可以划分出一个小分区专门提供给虚拟内存、IE临时文件存储等使用,以后可以对该分区定期进行磁盘整理,从而能更好提高计算机的工作效率。
一、量身定制虚似内存
1.普通设置法
根据一般的设置方法,虚拟内存交换文件最小值、最大值同时都可设为内存容量的1.5倍,但如果内存本身容量比较大,比如内存是512MB,那么它占用的空间也是很可观的。所以可以这样设定虚拟内存的基本数值:内存容量在256MB以下,就设置为1.5倍;在512MB以上,设置为内存容量的一半;介于256MB与512MB之间的设为与内存容量相同值。
2.精准设置法
由于每个人实际操作的应用程序不可能一样,比如有些人要运行3DMAX、Photoshop等这样的大型程序,而有些人可能只是打打字、玩些小游戏,所以对虚拟内存的要求并不相同,于是就要因地制宜地精确设置虚拟内存空间的数值。
①先将虚拟内存自定义的“初始大小”、“最大值”设为两个相同的数值,比如500MB;
②然后依次打开“控制面板→管理工具→性能”,在出现的“性能”对话框中,展开左侧栏目中的“性能日志和警报”,选中其下的“计数器日志”,在右侧栏目中空白处点击右键,选择右键菜单中的“新建日志设置”选项;
③在弹出的对话框“名称”一栏中填入任意名称,比如“虚拟内存测试”。在出现窗口中点击“添加计数器”按钮进入下一个窗口;
④在该窗口中打开“性能对象”的下拉列表握袭,选择其中的“Paging File”,勾选“从列表中选择计数器”,并在下方的栏目中选择“%Usage Peak”;勾选“从列表中选择范例”,在下方的栏目中选择“_Total”,再依次点击“添加→关闭”结束;
⑥在右侧栏目中可以发现多了一个“虚拟内存测试”项目,如果该项目为红色则说明还没有启动,点击该项,选择右键菜单中的“启动”选项即可;
接下来运行自己常用的一些应用程序,运行一段时间后,进入日志文件所在的系统分区下默认目录“PerfLogs”,找到“虚拟内存测试_000001.csv”并用记事本程序打开它,在该内容中,查看每一栏中倒数第二项数值,这个数值是虚拟内存的使用比率,找到这项数值的最大值,比如图中的“46”,用46%乘以500MB(前面所设定的虚拟内存数值),得出数值为230MB。
用该数值可以将初始大小设为230MB,而最大值可以根据磁盘空间大小自由设定,一般建议将它设置为最小值的2到3倍。这样就可以将虚拟内存打造得更精准,使自己的爱机运行得更加流畅、更具效率
二、Windows虚拟内存加速密籍
虚拟内存对于任何版本的Windows而言都是十分重要的。如果设置得当,它将极大地提升电脑的性能和运行速度。可是在默认状态下,Windows始终将虚拟内存设为物理内存的1.5倍。这样的话,如果用户安装2GB的内存,系统就会腾出高达3GB的硬盘空间作为虚拟内存。但以当前的主流应用软件和游戏对内存的需要来看,根本没有必要使用这么多的虚拟内存。那么,有没有什么秘技或绝招可使虚拟内存运用得更有效率或更显性能呢?
1、分割存于多个硬盘
将虚拟内存设在较快的硬盘上,的确可使虚拟内存的运作更有效率。但是若电脑上两个硬盘速度一样快,则应将虚拟内存平均分配在两个不同的硬盘上(并非同一硬盘的不同分区)。因为同步进行读写操作会更有效地提高系统整体的虚拟内存性能。
举个例子,假设你原本在硬盘C上设置了700MB的虚拟内存,现在你可尝试重新分配,即把硬盘C改为350MB,硬盘D新增350MB的虚拟内存。理论上这样做会加快虚拟内存整体的读写操作.
2、硬盘需有足够空间
如果你不是很有经验的电脑用户,又或者没有特殊的使用要求,在Windows XP中选择“系统管理的大小”的方法来自动处理虚拟内存,一般情况下应该会比选择“自定义大小”的方法来得安全和稳定。不过,有一点大家必须注意,由于虚拟内存的“页面文件”(pagefile.sys)会随着电脑使用过程进行收缩和扩展,为使系统管理虚拟内存能够进行得顺利和更具弹性,必须保证分页文件所在的硬盘拥有足够的可用空间。
3、最小值等于最大值
选择“自定义大小”的方法来处理虚拟内存,并将最大值和最小值都设为同一数值。有很多人都相信用这种方法来处理虚拟内存有助于提高系统的性能。他们所持的理由是,当最大值和最小值都相等时,系统无需时刻进行收缩和扩展页面文件的动作。省去了这些工作,相应地就是提高系统效率。
这种方法,很多人坚信有效,但同样地,也有人指出其实并没有效果。但不管怎样也好,如要将最大值和最小值设为相等,必须坚守一个原则,那就是虚拟内存的大小必须足够,否则系统轻则会出现效率下降(要进行更多复写动作来腾出空间),严重的更会造成系统不稳定。
4、整理页面文件
文件数据保存在硬盘上久了,文件碎片(fragment)自然会产生。要保持或提高硬盘的工作效率,应不时为硬盘进行一次碎片整理。所谓虚拟内存,其实也是硬盘上的资料文件,那么虚拟内存是否也应该像普通文件般需要整理呢?
Windows系统处理页面文件(即虚拟内存)的方法有别于一般的文件。相比之下,页面文件比一般文件更少出现碎片,为页面文件进行整理通常是没有必要的。事实上,当Windows XP进行磁盘碎片整理时,页面文件不会牵涉其中。
虽然Windows不会对页面文件进行整理,但事实上页面文件也有碎片存在。追求“尽善尽美”的朋友可能仍想对页面文件进行碎片整理。大家不妨试试下面的方法:
在桌面“我的电脑”图标上单击鼠标右键,在随后出现的功能菜单中选“属性”。进入系统属性的设置窗口,用鼠标点选“高级”-->“性能”-->“设置”-->“高级”-->“更改”,在随后出现的“虚拟内存”设置窗口中选中“无分页文件”一项。最后单击“设置”按钮退出,并重新启动电脑。
重新启动后,检查一下磁盘根目录中还有没有pagefile.sys页面文件存在,如有就将之删除。清除掉虚拟内存的页面文件后,现在再进行磁盘碎片整理。完成后,按照前面的步骤重新设置一定数量的虚拟内存,并启动电脑使之生效。经上述方法处理后,新得出的页面文件将会是没有碎片的。
另外,如果想查看页面文件碎片的具体情况呢?启动磁盘碎片整理程序,为存在有页面文件的硬盘进行一次“分析”,再点选“查看报告”,看看“页面文件碎片”一栏便会一目了然.
5、虚拟内存的理想大小
想以“自定义大小”的方法来处理虚拟内存,究竟应该设置多大的虚拟内存呢?在Windows XP中,如果由操作系统自己定义虚拟内存,系统通常会把最小值设置为物理内存的1.5倍。当扩展时,最大值则介于物理内存的2.5至3倍。一般情况下,用户想自定义虚拟内存的大小,均可参照这个比例设置。
真的要参照这个比例吗?如果电脑有1GB的内存,难不成最小值要设置为1.5GB,最大值是2.5至3GB。这样一来。Pagefile.sys页面文件至少为1.5GB,太不现实了!
其实,大内存的系统跟小内存的系统相比,在设置虚拟内存时,标准有些不同。
如果大家有512MB以上甚至1GB的内存,既然物理内存已经相当充足,所需的虚拟内存反而应该减少。故在大内存的系统中,虚拟内存的最小值可以设成物理内存的一半。比如有1GB的内存,虚拟内存的最小值设成512MB,最大值则维持3GB以备不时之需。注意:虽然最大值设为3GB,系统是不会立即出现3GB大小的pagefile.sys文件,实际上它首先会以最小值出现,待有扩展需要时才会递增。
另外,有些大内存的朋友,可能会干脆不设置虚拟内存,以此强迫系统使用速度较快的内存。其实这是不太明智的做法。正所谓凡事都不要做得太绝对,完全没有虚拟内存也不行。原因是不少应用程序在设计时要求必须使用虚拟内存,没有了就会造成系统不稳定或死机。
至于小内存的系统,例如256MB,参照1.5倍及3倍的设置比例最稳当。即虚拟内存最小值设为384MB,最大值768MB。
6、手工订制最准确的虚拟内存
0.5倍、1.5倍、3倍,哇!好像买衣服时分大、中、小号,完全没有个性。究竟设置虚拟内存有没有更“贴身剪裁”的方法呢?
在Windows XP桌面的“开始”→“运行”中输入perfmon.msc,一个与系统性能有关的监视器便会出现。看看显示器的底部,有三个计数器(pages/sec、Avg.Disk Queue Length及rocessor Time,)。为了便于接下来对虚拟内存的页面文件进行精确监测,现在请大家将这三个计数器逐一点选,并按键盘上的Delete键将它们删除。请大家放心,删除后,下次再启动系统性能监视器时,这三个项目会重新出现。
删除后,现在请在图表中央位置单击鼠标右键,在随后出现的功能菜单中点选“添加计数器”一项,跟着在跳出窗口的“性能对象”一栏选“Process”。之后再在“从列表选择”一栏中点选“Page File Bytes”。不清楚“Page File Bytes”代表什么意思,只要单击“说明”按钮,解说文字便会出现在对话框之下。
选定“Page File Bytes”后,再在右方的“从列表选择范例”一栏选取“Total”项,之后依次单击“添加”和“关闭”按钮,一个名为“Page File Bytes”的计数器便会出现在性能监视器的下方中。
重复以上的动作,再添加一个名为“Page File Bytes Peak”的计数器(即Process下面的Page File Bytes Peak)。
现在,回头看一下监视器,图表中应该正在显示并计量着刚才新增加的两个计数器。如无意外,这两个计数器在图表上的显示不正确,即数值靠近最高比例线,没有动态变化。不用怕,这并不表示你的电脑出了什么问题,而是图表比例设得不太恰当而已!用鼠标右键逐一单击监视器底部的“Page Fele Bytes”和“Page File By8tes Peak”计数器,并选“属性”一项。在“数据”页面的“比例”一栏中改为0.0000001,这样显示器中的图表便不再是没有动静了。
如果你看过系统提供的说明,相信应该知道“Page File Bytes”和“Page File Bytes Peak”正是代表了系统监测期间所使用的虚拟内存及其峰值是多大。因此,需要精确地手工设置虚拟内存,可参考图表下方显示的数字,其单位是Bytes。
想知道在正常的情况下,你的系统会耗用多少虚拟内存?请将平时日常使用的应用软件同时启动并让它们开始工作,接着再看性能监视器上所显示的数值,心中有数了吧。
人总有疯狂的时候,想知道自己疯狂使用电脑时系统需要多少虚拟内存,现在就尽情地将电脑上的程序启动并运行(例如,开十多个IE浏览器窗口上网,播放MP3和DVD影片,再进行光盘刻录或DV影片压缩编码),看看监视器的百分比会升高到多少。
在图表上右击鼠标,点选“属性”,进入“图表”页面勾选“水平格线”一项。这样图表中会出现一条条的水平分割线,是不是好分辨了?
图表中的红色垂直线跑得太快,来不及开启电脑上的程序进行测试?
同样,在图表上单击鼠标右键,选“属性”,在常规页面的“自动抽样间隔”一项中将1秒改为5秒。此时,图表中的“图形时间”数值便会由1分40秒变成8分20秒。换言之,红色垂直线走完一圈需花费8分20秒,这个时间应该足以让大家开启并运行很多应用程序,然后再慢慢查看图表中的结果。
最后,通过监视器的图表,相信大家已经能粗略估计你的电脑系统应设置多大的虚拟内存了。
三、出现“虚拟内存不够”的几个可能
1、感染病毒
有些病毒发作时会占用大量内存空间,导致系统出现内存不足的问题。赶快去杀毒,升级病毒库,然后把防毒措施做好!
2、虚拟内存设置不当
虚拟内存设置不当也可能导致出现内存不足问题,一般情况下,虚拟内存大小为物理内存大小的2倍即可,如果设置得过小,就会影响系统程序的正常运行。重新调整虚拟内存大小以WinXP为例,右键点击“我的电脑”,选择“属性”,然后在“高级”标签页,点击“性能”框中的“设置”按钮,切换到“高级”标签页,然后在“虚拟内存”框中点击“更改”按钮,接着重新设置虚拟内存大小,完成后重新启动系统就好了。
3、系统空间不足
虚拟内存文件默认是在系统盘中,如WinXP的虚拟内存文件名为“pagefile.sys”,如果系统盘剩余空间过小,导致虚拟内存不足,也会出现内存不足的问题。系统盘至少要保留300MB剩余空间,当然这个数值要根据用户的实际需要而定。用户尽量不要把各种应用软件安装在系统盘中,保证有足够的空间供虚拟内存文件使用,而且最好把虚拟内存文件安放到非系统盘中。
4、因为SYSTEM用户权限设置不当
基于NT内核的Windows系统启动时,SYSTEM用户会为系统创建虚拟内存文件。有些用户为了系统的安全,采用NTFS文件系统,但却取消了SYSTEM用户在系统盘“写入”和“修改”的权限,这样就无法为系统创建虚拟内存文件,运行大型程序时,也会出现内存不足的问题。问题很好解决,只要重新赋予SYSTEM用户“写入”和“修改”的权限即可,不过这个仅限于使用NTFS文件系统的用户。
四、虚拟内存的优化
1. 启用磁盘写入缓存
在“我的电脑”上单击鼠标右键选择“属性->硬件”,打开设备管理器找到当前正在使用的硬盘,单击鼠标右键选择属性。在硬盘属性的的“策略”页中,打开“启用磁盘上的写入缓存”。
这个选项将会激活硬盘的写入缓存,从而提高硬盘的读写速度。不过要注意一点,这个功能打开后,如果计算机突然断电可能会导致无法挽回的数据丢失。因此最好在有UPS的情况下再打开这个功能。当然,如果你平常使用计算机时不要进行什么重要的数据处理工作,没有UPS也无所谓,这个功能不会对系统造成太大的损失。
2. 打开Ultra MDA
在设备管理其中选择IDE ATA/ATAPI控制器中的“基本/次要IDE控制器”,单击鼠标右键选择“属性”,打开“高级设置”页。这里最重要的设置项目就是“传输模式”,一般应当选择“DMA(若可用)”。
3. 配置恢复选项
Windows XP 运行过程中碰到致命错误时会将内存的快照保存为一个文件,以便进行系统调试时使用,对于大多数普通用户而言,这个文件是没有什么用处的,反而会影响虚拟内存的性能。所以应当将其关闭。
在“我的电脑”上单击鼠标右键,选择“属性->高级”,在“性能”下面单击“设置”按钮,在“性能选项”中选择“高级”页。这里有一个“内存使用”选项,如果将其设置为“系统缓存”,Windows XP 将使用约4MB的物理内存作为读写硬盘的缓存,这样就可以大大提高物理内存和虚拟内存之间的数据交换速度。默认情况下,这个选项是关闭的,如果计算机的物理内存比较充足,比如256M或者更多,最好打开这个选项。但是如果物理内存比较紧张,还是应当保留默认的选项。
页面文件的设置
一、页面文件的大小计算
对于不同的计算机而言,页面文件的大小是各不相同的。关于页面文件大小的设置,有两个流传甚广的“公式”,“物理内存X2.5”或者“物理内存X1.5”。这两种计算方法固然简便,但是并不适用于所有的计算机。设置页面文件大小最准确的方法是看看计算机在平常运行中实际使用的页面文件大小。
通过Windows XP自带的日志功能可以监视计算机平常使用的页面文件的大小,从而进行最准确的设置,具体步骤如下。
1、在“我的电脑”上单击鼠标右键,选择“属性->高级”,单击“性能”下面的“设置”按钮,然后选择“高级”页,单击“虚拟内存”下方的“更改”按钮。选择“自定义大小”,并将“起始大小”和“最大值”都设置为300M,这只是一个临时性的设置。设置完成后重新启动计算机使设置生效。
2、进入“控制面板->性能与维护->管理工具”“性能”“性能日志和警告”“计数器日志”。在窗口右侧单击鼠标右键选择“新建日志设置”
3、随便设置一个日志名称,比如“监视虚拟内存大小”。
4、在“常规”页中单击“添加计数器”按钮。
在“性能对象”中选择“Paging File”,然后选中“从列表选择记数器”下面的“%Usage Peak”,并在右侧“从列表中选择范例”中选择“_Total”。最后单击“添加”和“关闭”按钮。
5、别忘了记住“日志文件”页中的日志文件存放位置和文件名,后面需要查看这个日志来判断Windows XP平常到底用了多少虚拟内存,在这个例子中,日志文件被存放在D:\Perflog目录下。
另外还要设置“日志文件类型”为“文本文件”,这样便于阅读。
这时你可以看到刚才新建的日志条目前面的图标变成了绿色,这表明日志系统已经在监视虚拟内存了。如果图标还是红色,你应该单击鼠标右键选择“开始”来启动这个日志。
过一段时间后打开这个CVS文件,可以看到如下内容的条目。
这个日志文件记录这一段时间中页面文件的使用情况,注意这里的单位是%,而不是MB。通过简单的计算,就可以得到页面文件的最小尺寸,公式是“页面文件尺寸X百分比”。比如这个例子中,虚拟内存最大的使用比率是31%,300MBX31%=93MB,这个值就是虚拟内存的最小值(注意,300MB是前面的设置的临时值)。
如果物理内存较大,可以考虑将页面文件的“起始大小”和“最大值”设置为相等,等于上一步中计算出来的大小。这样硬盘中不会因为页面文件过渡膨胀产生磁盘碎片,其副作用是由于“最大值”被设置的较小,万一偶然出现虚拟内存超支的情况,可能会导致系统崩溃。
设置页面文件
现在回到“虚拟内存”的设置对话框中选择自定义大小并按照上面的计算结果分别设置“初始大小”和“最大值”。这里将“初始大小”设置为91M,而将“最大值”设置成了200M,这样比较保险。
对页面文件进行碎片整理
Windows XP运行时需要大量访问页面文件,如果页面文件出现碎片,系统性能将会受到严重影响,而且会缩短硬盘的使用寿命。所以很有必要对页面文件定期进行碎片整理。
不过别忘了,页面文件是系统关键文件,Windows XP运行时无法对其进行访问。所以对它进行碎片整理并不是一件容易的事情。有两种方案可以选择,一是安装Windows双系统,然后启动另外一个Windows对Windows XP所在的分区进行碎片整理。二是使用专门的工具软件,比如System File Defragmenter等。