先进先出(FIFO)

按调用顺序依次把页面调入内存,当内存还没满时,直接调入;当内存满了再调入时,如果需要置换页面,被置换的页面权值为最小值,则修改页面的权值,刚调入的页面权值为最大值,其他页面的权值都减1。先看效果再附源码(源码、经验交流QQ群:613879714),有问题QQ群提问,这里不能及时回复

最近最久未使用(LRU)

按调用顺序依次把页面调入内存,当内存还没满时,直接调入;当内存满了再调入时,如果需要置换页面,被置换的页面权值为最大值,则修改页面的权值,刚调入的页面权值为最小值,其他页面的权值都加1。

源代码


#include<stdio.h>
#define N 20
#define M 3//内存大小
struct memory{int Id;int ArriveTime;
}MemoryFIFO[M],MemoryLRU[M];
int PageSequence[N]={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};
int Number=0,MissingPage;
//先进先出
void FIFO(struct memory Memory[M]){MissingPage=0; //内存里还没有页面 ,加入请求序列里的第一个页面 printf("\n请求页面:%d",PageSequence[0]);if(Number==0){Memory[0].Id=PageSequence[0];Memory[0].ArriveTime=0;Number++;//缺页++ MissingPage++;printf("\n内存:"); for(int k=0;k<Number;k++){printf("%d  ",Memory[k]);}}for(int i=1;i<N;i++){printf("\n\n请求页面:%d",PageSequence[i]);int flag=0;for(int j=0;j<Number;j++){if(PageSequence[i]==Memory[j].Id){flag=1;printf("\n内存:"); for(int k=0;k<Number;k++){printf("%d  ",Memory[k]);}break;}}//如果在内存里找不到请求页面,添加或置换页面 if(flag==0){//缺页++ MissingPage++;//如果内存还没满 ,直接加入 if(Number<M){Memory[Number].Id=PageSequence[i];Memory[Number].ArriveTime=Number;Number++;printf("\n内存:"); for(int k=0;k<Number;k++){printf("%d  ",Memory[k]);}}//内存已满,则置换进来 ,刷新使用值 else{for(int k=0;k<M;k++){if(Memory[k].ArriveTime==0){Memory[k].Id=PageSequence[i];Memory[k].ArriveTime=M-1;for(int a=0;a<M;a++){if(a!=k){Memory[a].ArriveTime-=1;}} break;}}printf("\n内存:"); for(int k=0;k<M;k++){printf("%d  ",Memory[k]);} } }}printf("\n\n缺页率:%d/%d\n",MissingPage,N);
}
//最近最久未使用算法(LRU)
void LRU(struct memory Memory[M]){MissingPage=0; //内存里还没有页面 ,加入请求序列里的第一个页面 printf("\n请求页面:%d",PageSequence[0]);if(Number==0){Memory[0].Id=PageSequence[0];Memory[0].ArriveTime=M;Number++;//缺页++ MissingPage++;printf("\n内存:"); for(int k=0;k<Number;k++){printf("%d  ",Memory[k]);}}for(int i=1;i<N;i++){printf("\n\n请求页面:%d",PageSequence[i]);int flag=0;for(int j=0;j<Number;j++){if(PageSequence[i]==Memory[j].Id){flag=1;for(int a=0;a<M;a++){if(Memory[a].ArriveTime<Memory[j].ArriveTime){Memory[a].ArriveTime+=1;}}Memory[j].ArriveTime=1;printf("\n内存:"); for(int k=0;k<Number;k++){printf("%d  ",Memory[k]);}break;}}//如果在内存里找不到请求页面,添加或置换页面 if(flag==0){//缺页++ MissingPage++;//如果内存还没满 ,直接加入 if(Number<M){Memory[Number].Id=PageSequence[i];Memory[Number].ArriveTime=M-Number;Number++;printf("\n内存:"); for(int k=0;k<Number;k++){printf("%d  ",Memory[k]);}}//内存已满,则置换进来 ,刷新使用值 else{for(int k=0;k<M;k++){if(Memory[k].ArriveTime==M){Memory[k].Id=PageSequence[i];Memory[k].ArriveTime=1;for(int a=0;a<M;a++){if(a!=k){Memory[a].ArriveTime+=1;}} break;}}printf("\n内存:"); for(int k=0;k<M;k++){printf("%d  ",Memory[k]);} } }}printf("\n\n缺页率:%d/%d\n",MissingPage,N);
}
int main(){memory *p1=MemoryFIFO,*p2=MemoryLRU;int k;do {printf("\n\n");printf("\t\t        页面置换算法     \n");printf("\t\t*****************************\n");printf("\t\t*                          *\n");printf("\t\t*    1----先进先出          *\n");printf("\t\t*    2----最近最久未使用    *\n");printf("\t\t*    0----退    出        *\n");printf("\t\t*                          *\n");printf("\t\t*****************************\n");printf("\t\t   请选择菜单项(0-2):");scanf("%d",&k);switch(k){case 1:printf("先进先出:\n");FIFO(p1);Number=0;break;case 2:printf("\n最近最久未使用:\n");LRU(p2);  break;default: break;}  }while (k!=0);return 0;
} 

操作系统-先进先出和最近最久未使用算法-C语言相关推荐

  1. python实现使用最近最久未使用算法的请求分页存储管理_答疑(存储管理)之一...

    题目1:有一个计算机的虚存系统采用请求式分页机制.其中,从内存读/写一个单元需要花费100ns.该虚存系统由内存和硬盘组成,硬盘具有以下参数:转速7200RPM,磁盘块大小4KB,平均寻道时间5ms, ...

  2. 先进先出(FIFO)页面置换算法 C语言实现

    广东工业大学 操作系统实验 实验内容 假设每个页面中可存放10条指令,分配给作业的内存块数为4.用C语言模拟一个作业的执行过程,该作业共有320条指令,即它的地址空间为32页,目前它的所有页都还未调入 ...

  3. 最不常用置换算法LFT 最久未使用置换算法LRU 操作系统 C语言链表实现

     经过读题,我觉得这两个题目要表达的意思应该是完全相同的,当然也可能是我的理解出现了偏差.所以就把LRU 和 LFT 当作是一个.  当然,因为这个缘故,我把最近最久未使用的LRU当作了最久未使用写到 ...

  4. 清华大学《操作系统》(八):置换算法

    功能:置换算法是指当出现缺页异常时,需要调入新页面而内存已满时,置换算法选择被置换的物理页面. 设计目标: 尽可能减少页面的调入调出次数: 把未来不再访问或短期内不访问的页面调出. 页面锁定: 了解具 ...

  5. 3.2.3 OS之页面置换算法(最佳置换算法、先进先出置换算法、最近最久未使用置换算法、普通时钟置换算法、改造型时钟置换算法)

    文章目录 0.思维导图 1.最佳置换算法---OPT 2.先进先出置换算法---FIFO 3.最近最久未使用置换算法---LRU 4.时钟置换算法---CLOCK 5.改造型时钟置换算法 0.思维导图 ...

  6. 操作系统-最近最久未使用置换算法

    思想:赋予每个页面一个访问字段,用来记录相应页面自上次被访问以来所经历的时间t,当淘汰一个页面时,应选择所有页面中其t值最大的页面,即内存中最近一段时间内最长时间未被使用的页面予以淘汰 优点:由于考虑 ...

  7. 最近最久未使用页面置换算法C语言,LRU页面置换算法模拟-最近最久未使用置换算法...

    LRU页面置换算法模拟-最近最久未使用置换算法 LRU页面置换算法模拟-最近最久未使用置换算法|课程设计|计算机数据库课程设计 一.设计目的 1.用C语言实现最近最久未使用(LRU)置换算法. 2.了 ...

  8. 页面置换之最近最久未使用置换算法

    LRU(Least Recently Used)置换算法 LRU置换算法是选择最近最久未使用的页面予以淘汰.该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t,当须淘汰一个 ...

  9. 最近最久未使用页面置换算法

    在一个请求分页系统中,采用最近最久未使用页面置换算法时,假如一个作业的页面走向为4.3.2.1.4.3.5.4.3.2.1.5,当分配给该作业的物理块数M分别为3和4时,试计算在访问过程中所发生的缺页 ...

最新文章

  1. markdown错误和问题
  2. jquery 1.9里面已经删除了toggle(fn1, fn2)函数:
  3. mysql的一个字段最多能插入多少数据?我们存入text类型的值上限是多大?
  4. http协言和web本质
  5. 指定输出路径_新手Python必须知道的文件路径和变量命名技巧
  6. 什么是贝叶斯定理?朴素贝叶斯有多“朴素”?终于有人讲明白了
  7. MySQL Shell副本集和MGR快速搭建详解
  8. Log4j不同级别输出到不同文件的几种方式
  9. 基于51单片机简易计算器LCD1602显示
  10. Google Guice
  11. 计算机键盘重复设置,电脑键盘错乱怎么恢复 一键快速重新设置电脑快捷键方法...
  12. 生产可能性曲线与机会成本
  13. 第三节:原生数据类型使用陷阱 Pitfall of Primitive Data Type
  14. 数据库优化之降龙十八掌
  15. ThreadLocal深析
  16. “数据”到底是资产还是负债?
  17. python蟒蛇代码解析_Python 小蟒蛇 代码分析
  18. PHP**数据类型**
  19. 默纳克服务器协议,默纳克协议代码表、常见电梯系统密码表.docx
  20. 高精度反三角函数的实现

热门文章

  1. CentOS7编译安装Redis5及修改端口、设置开机启动
  2. java中short的取值范围_java中byte、short、int、long、float、double取值范围
  3. 道路曲线线路坐标计算 ∈ C# 编程笔记
  4. 【云服务器】阿里云部署项目、攻击CPU解决方案
  5. Oracle数据库空间突然增大,oracle BUG 5890312导致表空间瞬间暴涨
  6. windows安全警报怎么关闭_Windows10如何关闭自动更新
  7. scratch做个简单的跑酷游戏
  8. VC++环境OpenSSL安装
  9. Android内部颜色转16进制颜色
  10. Betaflight二次开发-环境搭建