| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 868 人关注过本帖
标题:[求助]最佳页面置换算法
只看楼主 加入收藏
zkkpkk
Rank: 2
等 级:论坛游民
威 望:5
帖 子:489
专家分:28
注 册:2006-6-17
收藏
 问题点数:0 回复次数:2 
[求助]最佳页面置换算法

嘿我回来啦!我现在在中国西南第一大港防成港!
带来了一个问题,最佳页面置换算法。
部分的页面在虚拟内存,部分在物理内存,操作系统需要访问的页面在物理内存找不到则会把物理内存的某个页面置换下来,最佳置换算法的解决方法就是看物理内存中的哪一个页面在将来最迟需要访问,就置换它。
如物理内存里是0,7,6,访问到5时产生缺页中断,检查物理内存,发现0在将来第14个访问到,显然置换0是最佳方案!我的苦恼是Optimal()函数里的循环只做了一次就退出了,见鬼。

程序代码:

using namespace std;
#include <iostream>
#define MAX 20
int arr[MAX]={0,7,6,5,7,4,7,3,5,4,7,4,5,6,5,7,6,0,7,6};
int tarr[MAX];
int Num=0;

class Templist
{
friend class Opclass;
private:
Templist* next;
int data;
int count;
public:
Templist(){next=NULL;}
Templist(int data){this->data=data;next=NULL;}
~Templist(){}
public:
int GetCount(){return count;}
int GetData(){return data;}
Templist* GetNext(){return next;}
};

class Opclass
{
private:
Templist* head;
public:
Opclass()
{
head=new Templist;
}
Opclass(int size)
{
head=new Templist;
for(int i=0;i<size;i++)
{
Templist* newnode=new Templist;
newnode->data=-1;
newnode->next=head->next;
head->next=newnode;
}
}
~Opclass(){}

void Optimal();
int Count(int data,int n);
void Display(Templist* temp);
};

int Opclass::Count(int data,int n)
{
int count=0;
for(int i=n;i<MAX;i++)
{
count++;
if(arr[i]==data)
break;
}
return count;
}
void Opclass::Optimal()
{
int Max=0;
bool bl=false;
Templist *temp=head->next,*p=NULL;
for(int i=0;i<MAX;i++)
{
if(temp==NULL)
{
p=head->next;
while(p!=NULL)
{
if(p->data==arr[i])
{
bl=true;
break;
}
p=p->next;
}
if(bl==true)
continue;
p=head->next;
while(p!=NULL)
{
p->count=Count(p->data,i+1);
if(Max<p->count)
Max=p->count;
p=p->next;
}
p=head->next;
while(p!=NULL)
{
if(p->count==Max)
{
p->data=arr[i];
tarr[Num++]=i+1;
break;
}
}
}
else
{
temp->data=arr[i];
temp=temp->next;
}
cout<<\"物理块状态:\";
p=head->next;
Display(p);
}

}

void Opclass::Display(Templist* temp)
{
while(temp!=NULL)
{
cout<<temp->data<<\" \";
temp=temp->next;
}
cout<<endl;
}
int main(int argc, _TCHAR* argv[])
{
Opclass opclass(3);
cout<<\"分配了3个物理块\"<<endl;
cout<<\"页面访问顺序:\";
for(int i=0;i<MAX;i++)
cout<<\"第\"<<i+1<<\":\"<<arr[i]<<\" \";
cout<<endl;
opclass.Optimal();
for(int i=0;i<Num;i++)
cout<<\"在访问第\"<<tarr[i]<<\"个页面:\"<<arr[tarr[i]-1]<<\"时发生缺页中断。\"<<endl;
cout<<\"共发生\"<<Num<<\"次页面置换!\"<<endl;
return 0;
}

[此贴子已经被作者于2007-7-11 16:19:40编辑过]

搜索更多相关主题的帖子: 算法 页面 
2007-07-08 19:48
mjh_abc
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-7-7
收藏
得分:0 

请问内存需求那些页面可以预见吗?
我看操作系统的书上的算法都是基于以前的历史纪录来推测以后的页面需求的频率,在决定置换那些页面的,

2007-07-08 21:35
zkkpkk
Rank: 2
等 级:论坛游民
威 望:5
帖 子:489
专家分:28
注 册:2006-6-17
收藏
得分:0 
回复:(mjh_abc)请问内存需求那些页面可以预见吗?我...
你说的这个貌似叫“最近最久未使用算法”,操作系统书上说最佳页面置换是最优秀的但很难实现,也正像你说的那样,要预知串将来的状态,我也觉得很诡异

Viva,espana!
2007-07-11 16:23
快速回复:[求助]最佳页面置换算法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024577 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved