- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实 验 报 告
实验名称
虚存管理算法实验
指导教师
杨一涛
实验类型
实验学时
实验时间
2016.11.27
一、 实验目的和要求
掌握虚拟存储管理的原理,掌握虚存管理中的页面置换算法,学会分析各种页面置换算法的优劣以及内存页框数量对算法的影响。
二、实验环境(实验设备)
硬件:PC机和Linux服务器
软件:Linux操作系统或Windows操作系统,putty软件,VC++6.0软件
三、实验原理及内容
分页存储管理将一个进程的逻辑地址空间分成若干大小相等的片,称为页面或页。
1、调页策略
(1)何时调入页面
如果进程的许多页是存放在外存的一个连续区域中,则一次调入若干个相邻的页,会比一次调入一页的效率更高效一些。但如果调入的一批页面中的大多数都未被访问,则又是低效的。可采用一种以预测为基础的预调页策略,将那些预计在不久之后便会被访问的页面,预先调入内存。如果预测较准确,那么,这种策略显然是很有吸引力的。但目前预调页的成功率仅为50%。且这种策略主要用于进程的首次调入时,由程序员指出应该先调入哪些页。
(2)请求调页策略
当进程在运行中需要访问某部分程序和数据时,若发现其所在的页面不在内存,便即提出请求,由OS将其所需页面调入内存。由请示调页策略所确定调入的页,是一定会被访问的,再加之请求调页策略比较易于实现,故在目前的虚拟存储器中,大多采用此策略。但这种策略每次仅调入一页,故须花费较大的系统开销,增加了磁盘I/O的启用频率。
2、页面调入过程
每当程序所要访问的页面未在内存时, 便向CPU发出一缺页中断,中断处理程序首先保留CPU环境,分析中断原因后,转入缺页中断处理程序。该程序通过查找页表,得到该页在外在原物理 块后,如果此时内存能容纳新页,则启动磁盘I/O将所缺之页调入内存,然后修改页表。如果内存已满,则须先按照某种置换算法从内存中选出一页准备换出;如果该页未被修改过,可不必将该页写回磁盘;但如果此页已被修改,则必须将它写回磁盘,然后再把所缺的页调入内存,并修改页表中的相应表项,置其存在位“1”,并将此页表项写入快表中。在缺页调入内存后,利用修改后的页表,去形成所要访问数据的物理地址,再去访问内存数据。整个页面的调入过程对用户是透明的。
3、页面置换算法
在进程运行过程中,若其所要访问的页面不在内存需把它们调入内存,但内存已无空闲空间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据,送磁盘的对换区中。但应将哪个页面调出,所以需要根据一定的算法来确定。以下分别是三个算法的设计思想。
OPTIMAL:最佳置换算法。其所选择的被淘汰页面,将是以后永不使用的,或是在最长(未来)时间内不再被访问的页面。
FIFO:先进先出置换算法。该算法总是淘汰最先进入内存的页面,既选择在内存中驻留时间最久的页面予以淘汰。
LRU:最近最久未使用置换算法。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间T,当须淘汰一个页面时,选择现有页面中其T值最大的给予淘汰。
CLOCK:分简单CLOCK置换算法和改进型CLOCK算法。LRU算法是较好的一种算法,而由于LRU在硬件上要求较多,在实际应用中多采用LRU的近似算法。CLOCK算法就是用得较多的一种LRU近似算法。
2、核心算法
void FIFO(int N,Page *mm,int *D) //先进先出
{
int i,a,b,m=0,K=0;
int queue1[M];
for(i=0;iM;i++)
{
a=Equation(N,D[i],mm);
if(a != -1){} //页已存在
else{ //页不存在
b=Check(N,mm);
if(b != -1)
{
mm[b].num = D[i]; //内存还有空闲
}
else {
mm[m].num = D[i];
m++;
m%=N;
} //内存已满,需要置换
queue1[K++]=D[i];
}
}
printf(\nFIFO算法\n缺页次数为:%6d\n缺页率:%16.6f\n\n,K,(float)K/M);
for(i=0;iK;i++)
{
printf(%3d ,queue1[i]);
if(i%40==0i!=0)
printf(\n);
}
}
void OPT(int N,Page *mm,int *D)//最优置换
{
int a,b,c,i,j,T=0;
int queue2[M];
for(j=0;jM;j++)
{
a=Equation(N,D[j],mm);
原创力文档


文档评论(0)