7-2 页面置换算法--LRU (50 分),mybatis面试题2024
第一行输出页号和页内偏移,第二行若不在内存,按照要求输出提示,若在内存则什么都不输出,随后输出“物理块号 页号”,再连续输出每个逻辑地址页面的物理块号和页内位移,以及当前内存的物理块号和页号的对应关系。2.这个算法每次处理的置换页面号,我们依然用队列进行处理,但是我们要注意的是我们在结构体数组当中加入了新的变量来记录优先级,而且我们在给这个优先级进行赋值的时候,我们是设置的一个全局变量,让其逐级递
输入格式:
输入页面大小和物理块数,连续输入页面的逻辑地址,以“-1”作为结束标志。
输出格式:
第一行输出页号和页内偏移,第二行若不在内存,按照要求输出提示,若在内存则什么都不输出,随后输出“物理块号 页号”,再连续输出每个逻辑地址页面的物理块号和页内位移,以及当前内存的物理块号和页号的对应关系。请在这里描述输出格式。例如:对每一组输入,在一行中输出A+B的值。
输入样例1:
在这里给出一组输入。例如:
1024 3
1
-1
结尾无空行
输出样例1:
在这里给出相应的输出。例如:
页号:0 页内偏移:1
该页不在内存中,调入!
物理块号 页号
0 0
1 void
2 void
结尾无空行
输入样例2:
在这里给出一组输入。例如:
1024 3
1
1056
2096
3175
-1
结尾无空行
输出样例2:
在这里给出相应的输出。例如:
页号:0 页内偏移:1
该页不在内存中,调入!
物理块号 页号
0 0
1 void
2 void
页号:1 页内偏移:32
该页不在内存中,调入!
物理块号 页号
0 0
1 1
2 void
页号:2 页内偏移:48
该页不在内存中,调入!
物理块号 页号
0 0
1 1
2 2
页号:3 页内偏移:103
已无空闲物理块,置换!
物理块号 页号
0 3
1 1
2 2
===================================================================
思路:
1.基本和上道题一样,但是我们在处理这个页面置换算法的时候用的是 LRU
最近最久未使用的思想进行置换页面
2.这个算法每次处理的置换页面号,我们依然用队列进行处理,但是我们要注意的是我们在结构体数组当中加入了新的变量来记录优先级,而且我们在给这个优先级进行赋值的时候,我们是设置的一个全局变量,让其逐级递增,只要是后面出现过的元素,那么他们的优先级就越高
debug:解决运行时错误
1.将int类型转换成string类型没问题
2.[178781373];非结构体数组范围问题
3.最后一行有空行无问题
4.将优先队列换成其他方法
======================================================================================
/**
思路:
1.基本和上道题一样,但是我们在处理这个页面置换算法的时候用的是 LRU
最近最久未使用的思想进行置换页面
2.这个算法每次处理的置换页面号,我们依然用队列进行处理,但是我们要注意的是
我们在如果这个页号已经在内存中存在,那么就要就要将其
debug:解决运行时错误
1.将int类型转换成string类型没问题
2.[178781373];非结构体数组范围问题
3.最后一行有空行无问题 z
*/
#include<bits/stdc++.h>
using namespace std;
int N,M;//N代表页面大小 M代表物理块数
int cnt = 0;
struct Node{
int block; //块
string page; //页
int priority;//优先级
}node[100];
bool sort_priority(Node a,Node b){
return a.priority < b.priority;
}
void printSate(){
cout << “物理块号 页号” << endl;
for(int i = 0; i < M; i++){
for(int j = 0; j < M; j++){
if(i == node[j].block){
cout << node[j].block << ’ ';
cout << node[j].page << endl;
}
}
}
}
void outResult(int address){
int pageNumber = address/N; //页号
int pageMigration = address%N; //页内偏移
stringstream st; //这是为了将int类型转换成 string 类型
st << pageNumber;
string str = st.str();
int temp1 = 0,temp2 = 0;
cout << “页号:”<< pageNumber <<" 页内偏移:" << pageMigration << endl;
//遍历内存的物理块中是否有该页号
for(int i = 0; i < M; i++){
if(node[i].page == str){
temp1 = 1;
}
if(node[i].page == “void”){ //统计有空闲的位置
temp2++;
}
}
//在内存的时候
if(temp1 == 1){
cnt++;
//这个时候因为块中已有该页 我们遍历整个结构体数组 找到 该页号 将新的优先级赋值给它
for(int i = 0; i < M; i++){
if(node[i].page == str){
node[i].priority = cnt;
}
}
sort(node,node+M,sort_priority);//按照优先级重新排序
printSate();
}
//不在内存的时候 ,且内存中还有空间
if(temp1 == 0 && temp2 > 0){
cout << “该页不在内存中,调入!” << endl;
//更新物理块中的页号状态
for(int i = 0; i < M; i++){
if(node[i].page == “void”){
node[i].page = str;
cnt++;
node[i].priority = cnt;
break;
}
}
sort(node,node+M,sort_priority);//按照优先级重新排序
printSate();
}
//当不在内存的时候,内存中没有空间
if(temp1 == 0 && temp2 == 0){
cout << “已无空闲物理块,置换!” << endl;
cnt++;
//这个时候就覆盖结构体数组当中的首个元素的 页号
node[0].page = str;
node[0].priority = cnt;
sort(node,node+M,sort_priority);//按照优先级重新排序
printSate();
}
}
int main(){
int logicAddress;
cin >> N >> M;
for(int i = 0; i < M; i++){
node[i].block = i;
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
年进入阿里一直到现在。**
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-QdhKLF4a-1710867737182)]
[外链图片转存中…(img-lN2mwVbS-1710867737183)]
[外链图片转存中…(img-mGgL3x1X-1710867737184)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-pUpH0Ttp-1710867737184)]

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)