页面置换算法

  • f3_625370
    了解作者
  • 285.7KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-05-29 07:28
    上传日期
页面置换算法:先进先出置换算法,最佳置换算法,最近最久未使用算法,最少使用算法。
页面置换.rar
  • 页面置换
  • hu1.dsw
    514B
  • 页面置换算法.doc
    179.5KB
  • hu1.plg
    240B
  • hu1.dsp
    3.3KB
  • hu1.opt
    47.5KB
  • hu1.ncb
    41KB
  • Debug
  • hu1.pdb
    457KB
  • hu1.obj
    15KB
  • hu1.pch
    198.8KB
  • hu1.exe
    204.1KB
  • vc60.idb
    33KB
  • vc60.pdb
    44KB
  • hu1.ilk
    290.8KB
  • hu1.cpp
    9.2KB
内容介绍
#include<stdio.h> void Print(int bc[],int blockCount) { for(int i=0;i<blockCount;i++) { printf("%d ",bc[i]); } printf("\n"); } bool Travel(int bc[],int blockCount,int x) { bool is_found=false; int i; for(i=0;i<blockCount;i++) { if(bc[i]==x) { is_found=true; break; } } return is_found; } void FIFO(int pc[],int bc[],int pageCount,int blockCount) { printf("0:FIFO置换算法\n"); int i; if(pageCount<=blockCount) { printf("缺页次数为0\n"); printf("缺页率为0\n"); } else { int noPage=0; int p=0; int count=0; for(i=0;i<pageCount;i++) { //printf("引用页:%d\n",pc[i]); if(!Travel(bc,blockCount,pc[i])) { if(i<blockCount) { bc[i]=pc[i]; for(count=0;count<=i;count++) printf("%d ",bc[count]); printf("\n"); } else { if(p==blockCount) { p=0; } bc[p]=pc[i]; for(int i=0;i<blockCount;i++) { printf("%d ",bc[i]); } printf("\n"); p++; } noPage++; //printf("物理块情况:\n"); //Print(bc,blockCount); } //printf("\n"); } printf("FIFO缺页次数为:%d\n",noPage); printf("FIFO缺页率为:%.2f%%\n",(float)noPage/pageCount*100); } } int FoundMaxNum(int a[],int n) { int k,j; k=a[0]; j=0; for (int i=0;i<n;i++) { if(a[i]>=k) { k=a[i]; j=i; } } return j; } void LRU(int pc[],int bc[],int pageCount,int blockCount) { printf("1:LRU置换算法\n"); if(pageCount<=blockCount) { printf("缺页次数为0\n"); printf("缺页率为0\n"); } else { int noPage=0; int i,j,m,count; int bc1[100]; for(i=0;i<blockCount;i++) { bc1[i]=0; } for(i=0;i<pageCount;i++) { // printf("引用页:%d\n",pc[i]); if(!Travel(bc,blockCount,pc[i])) { if(i<blockCount) { bc[i]=pc[i]; for(count=0;count<=i;count++) printf("%d ",bc[count]); printf("\n"); 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]; for(int i=0;i<blockCount;i++) { printf("%d ",bc[i]); } printf("\n"); bc1[k]=1; } noPage++; //printf("物理快情况:\n"); //Print(bc,blockCount); } else if(Travel(bc,blockCount,pc[i])) { 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]; } } //printf("\n"); } printf("LRU缺页次数为:%d\n",noPage); printf("LRU缺页率为:%.2f%%\n",(float)noPage/pageCount*100); } } void Optiomal(int pc[],int bc[],int pageCount,int blockCount) { printf("2:最佳置换算法\n"); if(pageCount<=blockCount) { printf("缺页次数为0\n"); printf("缺页率为0\n"); } else { int noPage=0; int i,j,k,count; for(i=0;i<pageCount;i++) { // printf("引用页:%d\n",pc[i]); if(!Travel(bc,blockCount,pc[i])) { if(i<blockCount) { bc[i]=pc[i]; for(count=0;count<=i;count++) printf("%d ",bc[count]); printf("\n"); } else { int max=0; int blockIndex;; for(j=0;j<blockCount;j++) { for(k=i;k<pageCount;k++) { if(bc[j]==pc[k]) { break; } } if(k>=max) { max=k; blockIndex=j; } } bc[blockIndex]=pc[i]; for(int i=0;i<blockCount;i++) { printf("%d ",bc[i]); } printf("\n"); } noPage++; //printf("物理快情况:\n"); //Print(bc,blockCount); } //printf("\n"); } printf("OPT缺页次数为:%d\n",noPage); printf("OPT缺页率为:%.2f%%\n",(float)noPage/pageCount*100); } } void Clock(int pc[],int bc[],int pageCount,int blockCount) { printf("3:简单clock置换算法\n"); if(pageCount<=blockCount) { printf("缺页次数为0\n"); printf("缺页率为0\n"); } else { int noPage=0; int i,j,k,count,flag[100]; for(k=0;k<blockCount;k++) { flag[k]=0; } for(i=0;i<pageCount;i++) { // printf("引用页:%d\n",pc[i]); if(!Travel(bc,blockCount,pc[i])) { if(i<blockCount) { bc[i]=pc[i]; for(count=0;count<=i;count++) printf("%d ",bc[count]); printf("\n"); } else{ int p=0; for(j=0;j<blockCount;j++) {if(flag[j]==0) {bc[j]=pc[i];break;} else {flag[p]=0; p++; if(p==blockCount) bc[0]
评论