if(Travel(bc,blockCount,pc[i])==-1){//页面不在内存
if(i<blockCount) {//欲调页
bc[i]=pc[i];
for(int p=0; p<=i; p++){
bc1[p]++;
}
}
else{
for(j=0;j<blockCount;j++){
bc1[j]++;
}
int k=FoundMaxNum(bc1,blockCount);
bc[k]=pc[i];
bc1[k]=1;
}
noPage++;
cout<<"物理块情况:";
Print(bc,blockCount);
}
else { //页面在内存
if(i<blockCount){
for(j=0; j<=i; j++){
bc1[j]++;
}
for(m=0; m<i;m++){
if(bc[m]==pc[i]){
break;
}
}
bc1[m]=1;
bc[m]=pc[i];
}
else{
for(j=0;j<blockCount;j++){
bc1[j]++;
}
for(m=0;m<blockCount;m++){
if(bc[m]==pc[i]){
break;
}
}
bc1[m]=1;
bc[m]=pc[i];
}
}
cout<<endl;
}
cout<<"缺页次数为:"<<noPage<<endl;
cout<<"缺页率为:"<<(float)noPage/pageCount<<endl;
delete bc1;
}
}
void Optiomal(int pc[],int bc[],int pageCount,int blockCount){
cout<<“2:最佳置换算法”<<endl;
if(pageCount<=blockCount){
cout<<“缺页次数为:”<<0<<endl;
cout<<“缺页率为:”<<0<<endl;
}
else{
int noPage=0;
int i,j, k;
for(i=0; i<pageCount;i++){
cout<<“引用页:”<<pc[i]<<endl;
if(Travel(bc,blockCount,pc[i]) -1){
if(i<blockCount){
bc[i]=pc[i];
}
else{
int max=0;
int blockIndex;;
for(j=0;j<blockCount; j++){
for(k=i;k<pageCount; k++){
if(bc[i]=pc[k]){
break;
}
}
if(k>=max){
max=k;
blockIndex=j;
}
}
bc[blockIndex]=pc[i];
}
noPage++;
cout<<“物理块情况:”;
Print(bc, blockCount);
}
cout<<endl;
}
cout<<“缺页次数为:”<<noPage<<endl;
cout<<“缺页率为:”<<(float)noPage/pageCount<<endl;
}
}
void NRU(int pc[], int bc[], int pageCount,int blockCount){
cout<<“3: Clock置换算法”<<endl ;
if(pageCount<=blockCount){
cout<<“缺页次数为”<<0<<endl;
cout<<“缺页率为”<<0<<endl;
}
else{
int noPage=0;
int i,j;
int *bc1=new int[blockCount];
for(i=0;i<blockCount;i++){
bc1[i]=0;
}
int replace=0;
for(i=0;i<pageCount;i++){
cout<<“引用页:”<<pc[i]<<endl;
int index=Travel(bc, blockCount, pc[i]);
if(index -1) {
for(j=0;j<blockCount;j++){
if(bc1[replace]1){
bc1[replace]=0;
replace =(replace+1)%blockCount;
}
else{
break;
}
}
bc[replace]=pc[i];
bc1[replace]=1;
replace=(replace+1)% blockCount;
noPage++;
cout<<“物理块情况:”;
Print(bc,blockCount);
cout<<“标志位情况:”;
Print(bc1,blockCount);
}
else{
bc1[index]=1;
replace=(index+1)% blockCount;
cout<<“物理块情况:”;
Print(bc,blockCount);
cout<<“标志位情况:”;
Print(bc1,blockCount);
}
cout<<endl;
}
cout<<“缺页次数为:”<<noPage<<endl;
cout<<“缺页率为:”<<(float)noPage/pageCount<<endl;
delete bc1;
}
}
int main(){
int pageCount,blockCount,i;
cout<<“输入页面数”<<endl;
cin>>pageCount;
int *pc=new int[pageCount];
cout<<“输入页面走向”<<endl;
for(i=0;i<pageCount;i++){
cin>>pc[i];
}
cout<<“输入物理块数”<<endl;
cin>>blockCount;
cout<<“0:FIFO置换算法”<<endl;
cout<<“1:LRU置换算法”<<endl;
cout<<“2:最佳置换算法”<<endl;
cout<<“3: Clock置换算法”<<endl;
cout<<“按数字选择类别:”<<endl;
int n;
while(cin>>n){
if(n0){
int *bc=new int[blockCount];
FIFO(pc,bc,pageCount,blockCount);
delete bc;
}
else if(n1){
int *bc=new int[blockCount];
LRU(pc,bc,pageCount,blockCount);
delete bc;
}
else if(n2){
int *bc=new int[blockCount];
Optiomal(pc,bc,pageCount,blockCount);
delete bc;
}
else if(n==3){
int *bc=new int[blockCount];
for(i=0; i<blockCount;i++){
bc[i]=-1;
}
NRU(pc,bc,pageCount,blockCount);
delete bc;
}
else break;
}
delete pc;
return 0;
}
>
> 其实做人最重要的是自信,到哪儿都一样。————《叶问4》
>
>
>
# 完结
Redis**基于内存**,常用作于**缓存**的一种技术,并且Redis存储的方式是以key-value的形式。Redis是如今互联网技术架构中,使用最广泛的缓存,在工作中常常会使用到。Redis也是中高级后端工程师技术面试中,面试官最喜欢问的问题之一,因此作为Java开发者,Redis是我们必须要掌握的。
Redis 是 NoSQL 数据库领域的佼佼者,如果你需要了解 Redis 是如何实现高并发、海量数据存储的,那么这份腾讯专家手敲《Redis源码日志笔记》将会是你的最佳选择。
![](https://img-blog.csdnimg.cn/img_convert/ac63e2dfe193a4eb2a92c77aafdb174c.webp?x-oss-process=image/format,png)
作中常常会使用到。Redis也是中高级后端工程师技术面试中,面试官最喜欢问的问题之一,因此作为Java开发者,Redis是我们必须要掌握的。
Redis 是 NoSQL 数据库领域的佼佼者,如果你需要了解 Redis 是如何实现高并发、海量数据存储的,那么这份腾讯专家手敲《Redis源码日志笔记》将会是你的最佳选择。
[外链图片转存中...(img-Q9iMR5g1-1714541839513)]
> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/topics/618154847)收录**