页面置换算法

  • V4_945932
    了解作者
  • 864.2KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-05-18 02:22
    上传日期
操作系统页面置换算法的实现,包括最先适应算法、最佳适应算法、最差适应算法、循环适应算法,很适于操作系统实验。
yemianzhihuan.rar
  • 页面置换
  • Debug
  • vc60.pdb
    108KB
  • 页面置换算法.exe
    528.1KB
  • vc60.idb
    73KB
  • 页面置换算法.pdb
    1MB
  • 页面置换算法.obj
    188.9KB
  • 页面置换算法.pch
    1.9MB
  • 页面置换算法.ilk
    763.3KB
  • 页面置换算法.ncb
    41KB
  • 页面置换算法.plg
    1.2KB
  • 页面置换算法.dsw
    532B
  • 页面置换算法.dsp
    3.4KB
  • 页面置换算法.cpp
    5.8KB
  • 页面置换算法.opt
    47.5KB
内容介绍
#include<iostream> #include<stdlib.h> using namespace std; int const InsideCount = 6;//内存中存放的页面数 int count = 0; int Inside[InsideCount]; int const PageCount =10;//总的页面数 int Page[PageCount]; int insert = 0;//先到先出置换算法fcfo中表示 当内存满的时候,新进入的页号放的位置 int suiji = 0; //随机置换算法randchange 当内存满的时候,新进入的页号放的位置 int state[InsideCount];//clock置换算法中,内存中的每个页面号对应的状态 int state2[InsideCount][2];// 二维数组,第一行第一列为访问位,第一行的第二列为修改位 double lost = 0.0; bool isInside(int num)//检测页号是否在内存中 { for(int i = 0; i < InsideCount; i++) { if(Inside[i] == Page[num]) { state[i] = 1; return true; } } return false; } bool change() //判断页面是否已经被修改 { if((rand()%2+1) == 1 ) { cout<<"该页面被修改"<<endl; return true; } else return false; } void LRU(int num)//最近最少使用置换算法LRU { int max = 0; // 表示内存中的页号,下一次出现的距离 int maxchange; //表示内存中下次出现距离最大的页号在内存中的位置 int k; if(isInside(num)) { cout<<"命中"<<endl; for(int i=0 ; i <InsideCount; i++) cout<<" 内存块["<<i<<"]中内容为:"<<Inside [i]<<endl; } else if(count == InsideCount) { lost++; for(int j=0; j < InsideCount; j++) { for( k = num; k >0;k--) //从当前的页号向前看,发现页号与内存中的页号相同,break ;比较内存中三个页号,看哪一个走的远,用max记录 { if(Inside[j] == Page[k]) break; } if( num - k > max) { max = num - k; maxchange =j;//j 表示把 内存中第j个Inside中的页面从内存拿出,把新的页面放入 } } Inside[maxchange] = Page[num]; for(int i=0 ; i <InsideCount; i++) cout<<" 内存块["<<i<<"]中内容为:"<<Inside [i]<<endl; } else { //lost++; Inside[count] = Page[num]; count++; for(int i=0 ; i <InsideCount; i++) cout<<" 内存块["<<i<<"]中内容为:"<<Inside [i]<<endl; } } void FIFO(int num)//先进现出置换算法(FIFO): { if(isInside(num)) { cout<<"命中"<<endl; for(int i=0 ; i <InsideCount; i++) cout<<" 内存块["<<i<<"]中内容为:"<<Inside [i]<<endl; } else if(count == InsideCount) { lost++; Inside[insert] = Page[num]; insert++; insert = insert % 3; for(int i=0 ; i <InsideCount; i++) cout<<" 内存块["<<i<<"]中内容为:"<<Inside [i]<<endl; } else { //lost++; Inside[count] = Page[num]; count++; for(int i=0 ; i <InsideCount; i++) cout<<" 内存块["<<i<<"]中内容为:"<<Inside [i]<<endl; } } void OPT(int num)//最佳置换算法(OPT) { int max = 0; // 表示内存中的页号,下一次出现的距离 int maxchange; //表示内存中下次出现距离最大的页号在内存中的位置 int k; if(isInside(num)) { cout<<"命中"<<endl; for(int i=0 ; i <InsideCount; i++) cout<<" 内存块["<<i<<"]中内容为:"<<Inside [i]<<endl; } else if(count == InsideCount) { lost++; for(int j=0; j < InsideCount; j++) { for( k = num; k < PageCount;k++) { if(Inside[j] == Page[k]) break; } if( k > max) { max = k; //k表示在这个地方会再次出现给定页面 maxchange =j;//j 表示把 内存中第j个Inside中的页面从内存拿出,把新的页面放入 } } Inside[maxchange] = Page[num]; for(int i=0 ; i <InsideCount; i++) cout<<" 内存块["<<i<<"]中内容为:"<<Inside [i]<<endl; } else { //lost++; Inside[count] = Page[num]; count++; for(int i=0 ; i <InsideCount; i++) cout<<" 内存块["<<i<<"]中内容为:"<<Inside [i]<<endl; } } int main() { char ch ;//选择使用哪种算法 while(1) { for(int i = 0; i < PageCount; i++) { Page[i] =rand()%9 + 1; } cout<<"选择算法:"<<"\n"<<endl; cout<<"F 先进现出置换算法(FIFO)"<<"\n"<<endl; cout<<"O 最佳置换算法(OPT)(理想置换算法)"<<"\n"<<endl; cout<<"U 最近最少使用(LRU)算法"<<"\n"<<endl; cin>>ch; switch(ch) { case 'O':{ lost = 0; count = 0; for(int j = 0; j < InsideCount; j++) { Inside[j] = 0; } for(int i = 0; i < PageCount; i++) { cout<<"读入 Page["<<i<<"]="<<Page[i]<<endl; OPT(i); } cout<<"共 " <<PageCount<<"次 ,"<<"缺页 "<<lost<<" 次,缺页率为"<<lost/(PageCount)<<"\n\n"<<endl; } break; case 'F':{ lost = 0; count = 0; for(int j = 0; j < InsideCount; j++) { Inside[j] = 0; } for(int i = 0; i < PageCount; i++) { cout<<"读入 Page["<<i<<"]="<<Page[i]<<endl; FIFO(i); } cout<<"共 " <<PageCount<<"次 ,"<<"缺页 "<<lost<<" 次,缺页率为"<<lost/(PageCount)<<"\n\n"<<endl; } break; case 'U':{ lost = 0; count = 0; for(int j = 0; j < InsideCount; j++) { Inside[j] = 0; } for(int i = 0; i < PageCount; i++) { cout<<"读入 Page["<<i<<"]="<<Page[i]<<endl; LRU(i); } cout<<"共 " <<PageCount<<"次 ,"<<"缺页 "<<lost<<" 次,缺页率为"<<lost/(PageCount)<<"\n\n"<<endl; } break; } } return 0; }
评论
    相关推荐
    • 操作系统算法
      多级调度算法 银行家算法 磁盘调度算法 生产者—消费者问题,这些算法供大家参考。
    • 操作系统算法
      操作系统算法 该存储库包括调度算法
    • 操作系统算法实验报告
      实验一、进程控制实验 实验二、线程和进/线程管道通信实验 实验三、进程调度算法实验 实验四、进程同步实验 实验五、进程互斥实验 实验六、死锁问题实验 实验七、内存页面置换算法实验...实验九、文件系统接口实验
    • 操作系统LRU算法
      操作系统LRU算法
    • 操作系统算法模拟
      采用vs2010,C#语言完成,一共实现了三种模拟,处理器调度算法的模拟,内存分配策略的模拟,磁盘分配算法,解决方案下包含这三个项目,其中disc、mem采用.net 2.0,processor采用.net 4.0.
    • 十大经典操作系统算法
      这是含有是个操作系统中的诗歌经典算法的集合,含金量很大
    • 操作系统算法模拟系统
      操作系统课程设计,操作系统算法模拟系统——用以模拟操作系统课程涉及的相关算法,包括进程调度算法(不少于三个)、银行家算法、页面置换算法(不少于三个)和驱动调度算法(不少于三个),完成系统设计和课程设计...
    • 操作系统 SSTF 算法
      操作系统 实验 SSTF 算法
    • 操作系统算法:操作系统中的重要算法
      操作系统算法:操作系统中的重要算法
    • C语言模拟操作系统算法
      用C语言模拟操作系统拟分页式存储管理算法,学习操作系统的朋友,可以看一下!