目录
为叙州等地区用户提供了全套网页设计制作服务,及叙州网站建设行业解决方案。主营业务为成都网站制作、做网站、外贸营销网站建设、叙州网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!1.算法原理
2.实验要求
3.算法流程图
4.代码分析
1.定义结构体页面
2.long_max函数的构建
3.IN函数的构建
4.print函数的构建
5.主函数的构建
6.总代码
5.测试结果及其分析
1.算法原理
最近未访问的页面,将来一段时间也不会访问。利用局部性原理,根据一个进程在执行过程中过去的页面访问踪迹来推测未来的行为。最近的过去 → 最近的将来 思想:选择最近最久未使用的页面予以淘汰。利用页表中的访问字段,记录页面自上次被访问以来所经历的时间t,需要淘汰页面时,选择在内存页面中t值大的,即最近最久未使用的页面予以淘汰。
2.实验要求在某请求分页管理系统中,作业执行时依次访问如下页面:1,4,3,1,2,5,1,4,2,1,4,5,分配给该作业的主存块数为3
3.算法流程图4.代码分析 1.定义结构体页面struct Page//定义结构体页面
{
int time;//已经待的时间
int number;//页面序号
};
2.long_max函数的构建int long_max(struct Page a[3]){//寻找出待在内存中时间最长的页面,并对相关time进行修改
int index=0,min_time=a[0].time;//初始值赋值为内存的第一个页面
for(int i=1;i<3;i++){//找出大的time以及对应的页面
if(a[i].time>min_time){
min_time=a[i].time;
index=i;
}
}
if(index==0){//如果是页面0,则将1,2的时间修改加一,因为它们这一轮没被顶替,需要等待一个时间段
a[1].time++;
a[2].time++;
}
if(index==1){//如果是页面1
a[0].time++;
a[2].time++;
}
if(index==2){//如果是页面2
a[1].time++;
a[0].time++;
}
a[index].time=0;//将被顶替出的页面时间置位0,因为其是刚进来
return index;
}
输入为内存中的三个页面,函数是求内存中待时间最长的页面的索引值,并对三个页面时间进行修改
3.IN函数的构建int IN(struct Page a[3],int temp){//找出即将进来的进程是否在内存的三个页面中
int flag=3;//flag为相同的页面,如果为3,说明不在
for(int i=0;i<3;i++){
if(a[i].number==temp){
flag=i;
break;
}
}
return flag;
}
IN函数输入为内存的三个页面以及即将进入内存的页面,是为了判断内存页面中是否和它重复
如果重复,则flag为重复的页面的索引值,如果没重复,就为3.
4.print函数的构建void print(struct Page a[3],int temp){
int index,m;
index=IN(a,temp);//判断是否在里面
if(index!=3){//如果在
a[index].time=0;
if(index==0){
a[1].time++;
a[2].time++;
}
if(index==1){
a[0].time++;
a[2].time++;
}
if(index==2){
a[1].time++;
a[0].time++;
}
}
else{//如果不在,则number需要变化
m=long_max(a);//找出需要变化页面的索引
a[m].number=temp;
}
cout<<"现在系统内的三个页面为:"<
index其实就是重复的索引值,如果重复就对相应数据就行修改,否则就更新内存三页面再修改
最后输出
5.主函数的构建int main(){
struct Page a[3];
struct Page b[100];
int n;
for(int i=0;i<3;i++){
cout<<"请输入第"<>a[i].number;
a[i].time=3-i;//即前三个时间为3,2,1
}
cout<<"现在系统内的三个页面为:"<>n;
for(int i=0;i>b[i].number;
print(a,b[i].number);
}
}
数组a(处于内存中的三个页面),数组b(即将要进入内存的页面总集)
6.总代码#includeusing namespace std;
struct Page//定义结构体页面
{
int time;//已经待的时间
int number;//页面序号
};
int long_max(struct Page a[3]){//寻找出待在内存中时间最长的页面,并对相关time进行修改
int index=0,min_time=a[0].time;//初始值赋值为内存的第一个页面
for(int i=1;i<3;i++){//找出大的time以及对应的页面
if(a[i].time>min_time){
min_time=a[i].time;
index=i;
}
}
if(index==0){//如果是页面0,则将1,2的时间修改加一,因为它们这一轮没被顶替,需要等待一个时间段
a[1].time++;
a[2].time++;
}
if(index==1){//如果是页面1
a[0].time++;
a[2].time++;
}
if(index==2){//如果是页面2
a[1].time++;
a[0].time++;
}
a[index].time=0;//将被顶替出的页面时间置位0,因为其是刚进来
return index;
}
int IN(struct Page a[3],int temp){//找出即将进来的进程是否在内存的三个页面中
int flag=3;//flag为相同的页面,如果为3,说明不在
for(int i=0;i<3;i++){
if(a[i].number==temp){
flag=i;
break;
}
}
return flag;
}
void print(struct Page a[3],int temp){
int index,m;
index=IN(a,temp);//判断是否在里面
if(index!=3){//如果在
a[index].time=0;
if(index==0){
a[1].time++;
a[2].time++;
}
if(index==1){
a[0].time++;
a[2].time++;
}
if(index==2){
a[1].time++;
a[0].time++;
}
}
else{//如果不在,则number需要变化
m=long_max(a);//找出需要变化页面的索引
a[m].number=temp;
}
cout<<"现在系统内的三个页面为:"<>a[i].number;
a[i].time=3-i;//即前三个时间为3,2,1
}
cout<<"现在系统内的三个页面为:"<>n;
for(int i=0;i>b[i].number;
print(a,b[i].number);
}
}
5.测试结果及其分析测试数据就用实验要求给出的
测试结果分析
起始 | 输入1 | 2 | 5 | 1 | 4 | 2 | 1 | 4 | 5 | |
a[0] | 1(3) | 1(0) | 1(1) | 1(2) | 1(0) | 1(1) | 1(2) | 1(0) | 1(1) | 1 |
a[1] | 4(2) | 4(3) | 2(0) | 2(1) | 2(2) | 4(0) | 4(1) | 4(2) | 4(0) | 4 |
a[2] | 3(1) | 3(2) | 3(3) | 5(0) | 5(1) | 5(2) | 2(0) | 2(1) | 2(2) | 5 |
最佳置换算法(C语言)——大三操作系统实验_西瓜妹妹的唯一男朋友的博客-博客
先进先出算法(c语言)——大三操作系统实验_西瓜妹妹的唯一男朋友的博客-博客
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
本文名称:最近最久未使用页面置换算法(C语言)——大三操作系统实验-创新互联
本文路径:http://lswzjz.com/article/cogohs.html