当前位置:文档之家› 操作系统页面置换算法

操作系统页面置换算法


count++; //缺页,count 加一次
}
for(k=0;k<memoryNum;k++)
{
if(memory[k]==-1)
cout<<" "<<"\t";
else
cout<<memory[k]<<"\t";
} if(flag && (replacedPage!=-1))
cout<<replacedPage;
次,同时保证本来空的内存仍保持 time=-1 }
//首先令其他页面的时间记录加一
memory[l]=pages[i]; memory[l].time=0;
//新页面存入 //刷新内存中这一页的时间记录,重新计时
} for(m=0;m<memoryLength;m++) {
if(memory[m].num == -1) cout<<" "<<"\t";
return k; }
int main() {
int memoryLength=3; //内存大小 Page *memory=new Page[memoryLength]; //内存 int pagesLength=20; //页面串长度 Page *pages=new Page[pagesLength]; //页面串 //Page replaced=new Page({-1,-1}); //被替换出来的页面 int replaced; int count=0; //缺页数
int i,j,k,l,m;
for(i=0;i<memoryLength;i++) {
memory[i].num=-1; memory[i].time=-1;
//初始化内存为空
}
//cout<<"请输入页面走向:"<<endl;
int temp[]={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};
输出:
LRU
7012030423032120170
701 223 34 23000112277
7 0 11 2 20 4 23 3 32 2 11 0 0
7 00 0 03 0 4 22 23 3 00 1 1
7
1
2304
0
3
2
共 12 次缺页
3.模拟“最佳更换(OPT)” 算法,
输出:
OPT
7012030423032120170
cout<<"下面采用最近最少使用页面置换方法,首列为页号:"<<endl;
for(i=0;i<pagesLength;i++)
{
cout<<pages[i].num<<":\t";
for(j=0;j<memoryLength;j++)
{
if(pages[i].num==memory[j].num)
//i 为遍历 p 的辅助变量
p 为内存,len 为内存大小
while(i<len) {
if(p[i].time==-1) {
return i; } i++; }
Page max=p[0]; i=0; while(i<len) {
if(max.time<p[i].time) {
max=p[i]; k=i; } i++; }
面:"<<endl;
cout<<endl;
//cout<<"页面号\t 内存块 内存块 内存块 替换出的页面"<<endl;
int count=0;
//计数缺页次数
int pointer=0; //指针指向要插入的位置
int replacedPage; //被替换出来的页面
bool flag;
//标志 pointer 是否移动位置
操作系统上机测试页面置换算法
利用 C 语言或 Pascal 语言编写程序,完成虚拟存储管理的页面淘汰过程。要求:从 键盘上输入允许进程占有的页架数及一个访问串,输出淘汰过程,并给出共发生的缺页 次数。
例如:从键盘上输入允许进程占有的页架数为:3 从键盘上输入一个访问串为:7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0
*/ #include <iostream> using namespace std;
struct Page {
int num; int time;
//记录最近的访问次数
};
int Max(Page *p,int len)//返回最老的一页的下标
{
int k=0; //k 记录最老页面的下标
int i=0;
cin>>pagesLength;
int *pages;
//记录页面
pages=new int [pagesLength];
cout<<"请输入页面走向:";
for(i=0;i<pagesLength;i++)
cin>>pages[i];
cout<<endl;
cout<<"下面采用先进先出页面置换方法,首列为页号,末列为从内存中替换出的页
int i,j,k;
//辅助遍历数组的变量
for(i=0;i<memoryNum;i++)
memory[i]=-1;
//建内存
//int pages[]={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};
int pagesLength;
cout<<"请输入页面长度:";
{
if(elem[i]==c[j])
break;
}
if(j==count)
//内存中不存在该页面
{
if(count==3)
//如果已满
{ int max[3]={20,20,20};
//声明一个数组用来记录内存
中的页面未来出现的的位置
for(int k=0;k<count;k++)
{
for(int e=i+1;e<20;e++)
7772
2
2
2
2
7
000
0
4
0
0
0
11
3
3
3
1
1
7
1
0
4
3
2
共 9 次缺页
注:输入/输出的格式任意,只要能反映淘汰过程即可。
1、 FIFO(先进先出)
源代码:
/* 从键盘上输入允许进程占有的页架数为:3 从键盘上输入一个访问串为:7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1 共 15 次缺页 */
l=Max(memory,memoryLength); //取出内存中最老一页的下标
//replaced=memory[k];
//最老的一页就是要替换出来的页面
replaced=memory[l].num;
for(k=0;k<memoryLength;k++) {
if(memory[k].time!=-1) memory[k].time++;
1.模拟“先进先出(FIFO)” 算法,输出:
FIFO
7012030423032120170
701 223 04 23000122270
7 0 11 2 30 4 23 3 30 1 11 2 7
7 00 1 23 0 4 22 23 0 00 1 2
7
012304
23
01
共 14 次缺页
2.模拟“最近最少用(LRU)” 算法
{
if(elem[e]==c[k])
break;
}
max[k]=e;
}
int maxc=0;
//找出内存页面中最靠后的一个页面
for(int h=1;h<count;h++)
{
if(max[h]>max[maxc])
maxc=h;
}
c[maxc]=elem[i];
//将目前页面存入内存中
lackcount++;
cout<<endl; }
cout<<"缺页次数:"<<count<<endl; return 0; }
2、LRU(最近最少使用)
/* 模拟"最近最少用(LRU)" 算法
从键盘上输入允许进程占有的页架数为:3 从键盘上输入一个访问串为:7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1 共 12 次缺页
int c[3]; int lackcount; int count; public: OPT() {
lackcount=0; count=0; c[0]=c[1]=c[2]=-1;
}
void run(int elem[],int n)
{
for(int i=0;i<n;i++)
相关主题