操作系统页面置换算法Word下载.docx
- 文档编号:21795094
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:22
- 大小:240.92KB
操作系统页面置换算法Word下载.docx
《操作系统页面置换算法Word下载.docx》由会员分享,可在线阅读,更多相关《操作系统页面置换算法Word下载.docx(22页珍藏版)》请在冰豆网上搜索。
1)系统设计
在进程运行过程中,若其所要访问得页面不在内存而需把它们调入内存,但内存已无空闲空间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据,送磁盘得对换区中。
但应将哪
个页面调出,须根据一定得算法来确定。
通常,把选择换出页面得算法称为页面置换算法。
一个好得页面置换算法,应具有较低得页面更换频率。
从理论上讲,应将那些以后不再会访问得页面换出,或将那些在较长时间内不会再访问得页面调出。
2)主程序流程图
主流程图
3)先进先出(FIFO)页面置换算法
算法得基本思想:
该算法总就是淘汰最先进入内存得页面,即选择在内存中驻留时间最久得页面予以淘汰。
该算法实现简单只需把一个进程已调入内存得页面,按先后次序存入一个时间数组,并将其中时间值最大得页面进行淘汰,并替换入新得页面就可以实现。
算法流程图:
FIFO置换算法
4)最佳页面置换置换算法(OPT)
其所选择得被淘汰页面,将就是永不使用得,或者就是在最长时间内不再被访问得页面。
可保证获得最低得缺页率。
但由于人们目前还无法预知一个进程在内存得若干个页面中,哪一个页面就是未来最长时间内不再被访问得,因而该算法也就是无法实现得。
但就是可利用该算法去评价其它算法、
OPT页面置换算法
5)最近最久未使用页面置换算法LRU
当需要淘汰某一页时,选择离当前时间最近得一段时间内最久没有使用过得页先淘汰。
该算法得主要出发点就是,如果某页被访问了,则它可能马上还被访问。
或者反过来说,如果某页很长时间未被访问,则它在最近一段时间不会被访问。
LRU页面置换算法
四、源程序代码
#include”stdio.h"
#include”malloc。
h"
#defineN20
#definenum3
/*进程分配物理块数目*/
intA[N]={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};
typedefstructpage/*页表映像*/
{
intaddress;
/*页面地址*/
structpage *next;
}page;
struct page*head,*run,*rear;
voidinitial()/*进程分配物理块*/
{
inti=1;
page*p,*q;
head=(page *)malloc(sizeof(page));
p=head;
for(i=1;
i〈=num;
i++)
{
q=(page *)malloc(sizeof(page));
p->
next=q;
q->address=-1;
q—>next=NULL;
p=q;
}
rear=p;
}
voidprint()
ﻩpage*p=head—〉next;
ﻩwhile(p)
{
ﻩif(p—>
address!
=-1)ﻩ/*避免输出-1*/
ﻩprintf("
%d\t”,p-〉address);
ﻩp=p-〉next;
}
printf("
\n”);
int search(intn)/*判断链表中就是否有n*/
page *p;
inti=0;
p=head;
while(p->next)
{
if(p->
next->
address==n)
printf("Getitat thepage%d\n",i+1);
run=p;
return1;
p=p->next;
i++;
}
return0;
}
void changeOPT(int n,intposition)
inti;
inttotal=0;
intflag=1;
ﻩ/*默认链表填满*/
intdistance[num];
ﻩ/*用于存放距离*/
int MAX;
intorder=0;
page *p,*q;
p=head->
next;
q=head->next;
for(i=0;
i〈num;
i++)ﻩ/*初始化距离*/
distance[i]=100;
}
i=0;
while(p)/*判断链表中就是否填满*/
if(p-〉address==-1)
{
flag=0;
break;
}
p=p—〉next;
i++;
if(!
flag)/*链表没有填满得情况*/
{
p-〉address=n;
printf("Changethe page%d\n"
i+1);
else/*链表已经填满得情况*/
{
while(q)/*计算距离*/
for(i=position+1;
i<N;
i++)
if(q—〉address==A[i])
{
distance[total]=i—position;
break;
}
}
total++;
q=q->
}
MAX=distance[0];
for(i=0;
i<
num;
i++)/*计算最大距离*/
{
if(distance[i]>
MAX)
{
MAX=distance[i];
order=i;
/*记录待替换得页面得位置*/
}
}
printf("
Changethe page %d\n",order+1);
i=0;
p=head—〉next;
while(p)/*页面替换*/
if(i==order)
{
p—>address=n;
}
i++;
p=p->
next;
}
voidchangeFIFO(intn,intposition)
inti=0;
int flag=1;
ﻩ//默认队列已满
page*p,*delect;
p=head—>next;
while(p)
if(p—〉address==-1)ﻩ//队列未满
{
flag=0;
p—>address=n;
printf("
Change thepage%d\n”,i+1);
break;
}
p=p-〉next;
i++;
}
if(flag)ﻩ//队列已满
ﻩdelect=head—>
next;
delect->address=n;
head->next=delect-〉next;
printf(”Delectfrom thehead,andaddnewto the end.\n"
);
rear—>next=delect;
rear=delect;
rear->
next=NULL;
voidchangeLRU(intn,intposition)
inti;
int total=0;
intflag=1;
/*默认为已满*/
int distance[num];
intMAX;
intorder=0;
page*p,*q;
p=head—〉next;
q=head->next;
for(i=0;
i<num;
i++)
{
distance[i]=100;
i=0;
while(p)/*判断链表就是否已满*/
{
if(p-〉address==-1)
{
flag=0;
break;
}
p=p->
next;
i++;
if(!
flag)ﻩ/*链表没有满得情况*/
{
p—>
address=n;
printf("Change thepage%d\n"
i+1);
else/*链表已满得情况*/
{
while(q)
for(i=position—1;
i〉=0;
i-—)/*向前计算距离*/
{
if(q—>address==A[i])
distance[total]=position—i;
break;
}
}
total++;
q=q-〉next;
}
MAX=distance[0];
for(i=0;
i<
i++)/*计算最远距离*/
{
if(distance[i]>MAX)
MAX=distance[i];
order=i;
}
}
printf(”Changethe page%d\n”,order+1);
i=0;
p=head->next;
while(p)ﻩ/*页面替换*/
if(i==order)
{
p->
address=n;
}
i++;
p=p->
next;
floatOPT()
inti;
intlose=0;
float losef;
floatpercent;
for(i=0;
i〈N;
if(search(A[i])==0)
lose++;
changeOPT(A[i],i);
print();
losef=(float)lose;
percent=1—(losef/N);
returnpercent;
floatLRU()
inti;
int lose=0;
floatlosef;
float percent;
for(i=0;
i<
N;
if(search(A[i])==0)
{
lose++;
changeLRU(A[i],i);
ﻩprint();
losef=(float)lose;
percent=1—(losef/N);
return percent;
floatFIFO()
int i;
intlose=0;
floatlosef;
float percent;
ﻩpage *p;
for(i=0;
i〈N;
if(search(A[i])==0)
{
lose++;
changeFIFO(A[i],i);
ﻩelse
{
p=run—>
next;
run—>next=p->
rear-〉next=p;
rear=p;
rear->
next=NULL;
printf("
Moveitto endofqueue、\n"
}
ﻩprint();
losef=(float)lose;
percent=1-(losef/N);
returnpercent;
voidmain()/*主函数部分*/
float percent;
int choice;
printf("
Selectthearithmetic:
\n
(1)OPT\n
(2)LRU\n(3)FIFO\nyourchoiceis:
");
scanf("
%d”,&choice);
/*选择页面置换算法*/
initial();
/*创建进程*/
if(choice==1)/*采用OPT算法置换*/
percent=OPT();
/*计算OPT时得缺页率*/
printf("ThepercentofOPTis %f\n",percent);
elseif(choice==2)/*采用LRU算法置换*/
percent=LRU();
/*计算LRU时得缺页率*/
printf("
Thepercentof LRUis%f\n"
percent);
else if(choice==3)/*采用FIFO算法置换*/
{
percent=FIFO();
/*计算FIFO时得缺页率*/
printf("Thepercentof FIFOis%f\n”,percent);
else
printf("
Yourchoiceis invalid、”);
5、
调试结果显示
(1)OPT置换算法
(2)LRU置换算法
ﻩLRU
FIFO置换算法
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 页面 置换 算法