页面置换算法

  • 先进先出置换算法(FIFO)
  • 最近最久未使用置换算法(LRU)
  • 最佳置换算法(OPT)

本来已经写好一份 Java 版的了,然后又帮女朋友写了一份 Python 版,啊哈哈

Java版戳这里

再次更新~帮女票舍友们顺便写了份 C++ 版的,啊哈哈
C++版戳这里

先进先出置换算法(FIFO)

# FIFO.pyframePageNum = input("请输入分配给该作业的物理页框块数:") # 物理页框块数
pageFrame = [None]*int(framePageNum)  # 物理页框
inputPages = input("请输入该作业的页面走向:")
pages = inputPages.split(" ")    # 页面走向
pageFrontNum = len(pages)        # 页面走向总次数pageDesert = []     # 淘汰页面pageMissNum = 0     # 缺页次数count = 0;
helpNum = 0;
while(count < pageFrontNum):print("第" + str(count+1) + "次:" + pages[count])isMiss = True   # 是否缺页isEmpty = True  # 是否有空位isExist = False # 物理页框中是否存在本次页面走向# 判断物理页框中是否存在本次页面走向for page in pageFrame:if(pages[count] == page):isExist = Trueif(isExist == True):print("本次页面走向,页框中已经存在!")print("目前物理页框中页面走向为:", end="")for i in pageFrame:print(i,end=" ")print()print()count = count + 1continue# 判断物理页框中有无空位for page in pageFrame:if(page == None):isEmpty = Truebreakelse:isEmpty = False# 本次页面走向,物理页框中不存在,且有空位if(isExist == False and isEmpty == True):for n in range(len(pageFrame)):if(pageFrame[n] == None):pageFrame[n] = pages[count]break# 实现 FIFO 算法# 本次页面走向,物理页框中不存在,且没有空位if (isExist == False and isEmpty == False):pageDesert.append(pageFrame[helpNum%int(framePageNum)])print("本次淘汰页面:" + pages[count])pageFrame[helpNum%int(framePageNum)] = pages[count]helpNum = helpNum + 1# 计算缺页次数if(isMiss == True):pageMissNum = pageMissNum + 1print("目前物理页框中页面走向为:", end="")for i in pageFrame:print(i, end=" ")print()print()count = count + 1print("缺页次数:" + str(pageMissNum) + "次")
print("一共调用:" + str(pageFrontNum) + "次")
print("缺页中断率:" + str(pageMissNum/pageFrontNum*100) + "%")
print("淘汰页面:", end="")
for i in pageDesert:print(i, end=" ")

运行效果:

请输入分配给该作业的物理页框块数:3
请输入该作业的页面走向:2 3 2 1 5 2 4 5 3 2 5 2
第1次:2
目前物理页框中页面走向为:2 None None 第2次:3
目前物理页框中页面走向为:2 3 None 第3次:2
本次页面走向,页框中已经存在!
目前物理页框中页面走向为:2 3 None 第4次:1
目前物理页框中页面走向为:2 3 1 第5次:5
本次淘汰页面:5
目前物理页框中页面走向为:5 3 1 第6次:2
本次淘汰页面:2
目前物理页框中页面走向为:5 2 1 第7次:4
本次淘汰页面:4
目前物理页框中页面走向为:5 2 4 第8次:5
本次页面走向,页框中已经存在!
目前物理页框中页面走向为:5 2 4 第9次:3
本次淘汰页面:3
目前物理页框中页面走向为:3 2 4 第10次:2
本次页面走向,页框中已经存在!
目前物理页框中页面走向为:3 2 4 第11次:5
本次淘汰页面:5
目前物理页框中页面走向为:3 5 4 第12次:2
本次淘汰页面:2
目前物理页框中页面走向为:3 5 2 缺页次数:9次
一共调用:12次
缺页中断率:75.0%
淘汰页面:2 3 1 5 2 4

最近最久未使用置换算法(LRU)

# LRU.pyframePageNum = input("请输入分配给该作业的物理页框块数:") # 物理页框块数
pageFrame = [None]*int(framePageNum)  # 物理页框
inputPages = input("请输入该作业的页面走向:")
pages = inputPages.split(" ")    # 页面走向
pageFrontNum = len(pages)        # 页面走向总次数pageDesert = []     # 淘汰页面pageMissNum = 0     # 缺页次数count = 0;
helpNum = 0;
while(count < pageFrontNum):print("第" + str(count+1) + "次:" + pages[count])isMiss = True   # 是否缺页isEmpty = True  # 是否有空位isExist = False # 物理页框中是否存在本次页面走向# 判断物理页框中是否存在本次页面走向for page in pageFrame:if(pages[count] == page):isExist = Trueif(isExist == True):print("本次页面走向,页框中已经存在!")print("目前物理页框中页面走向为:", end="")for i in pageFrame:print(i,end=" ")print()print()count = count + 1continue# 判断物理页框中有无空位for page in pageFrame:if(page == None):isEmpty = Truebreakelse:isEmpty = False# 本次页面走向,物理页框中不存在,且有空位if(isExist == False and isEmpty == True):for n in range(len(pageFrame)):if(pageFrame[n] == None):pageFrame[n] = pages[count]break# 本次页面走向,物理页框中不存在,且没有空位# 实现 LRU 算法if(isExist == False and isEmpty == False):for n in range(len(pageFrame)):if(pages[count-int(framePageNum)] == pageFrame[n]):pageDesert.append(pageFrame[n])pageFrame[n] = pages[count]# 计算缺页次数if(isMiss == True):pageMissNum = pageMissNum + 1print("目前物理页框中页面走向为:", end="")for i in pageFrame:print(i, end=" ")print()print()count = count + 1print("缺页次数:" + str(pageMissNum) + "次")
print("一共调用:" + str(pageFrontNum) + "次")
print("缺页中断率:" + str(pageMissNum/pageFrontNum*100) + "%")
print("淘汰页面:", end="")
for i in pageDesert:print(i, end=" ")

运行结果

请输入分配给该作业的物理页框块数:3
请输入该作业的页面走向:2 3 2 1 5 2 4 5 3 2 5 2
第1次:2
目前物理页框中页面走向为:2 None None 第2次:3
目前物理页框中页面走向为:2 3 None 第3次:2
本次页面走向,页框中已经存在!
目前物理页框中页面走向为:2 3 None 第4次:1
目前物理页框中页面走向为:2 3 1 第5次:5
目前物理页框中页面走向为:2 5 1 第6次:2
本次页面走向,页框中已经存在!
目前物理页框中页面走向为:2 5 1 第7次:4
目前物理页框中页面走向为:2 5 4 第8次:5
本次页面走向,页框中已经存在!
目前物理页框中页面走向为:2 5 4 第9次:3
目前物理页框中页面走向为:3 5 4 第10次:2
目前物理页框中页面走向为:3 5 2 第11次:5
本次页面走向,页框中已经存在!
目前物理页框中页面走向为:3 5 2 第12次:2
本次页面走向,页框中已经存在!
目前物理页框中页面走向为:3 5 2 缺页次数:7次
一共调用:12次
缺页中断率:58.333333333333336%
淘汰页面:3 1 2 4

最佳置换算法(OPT)

# OPT.pyframePageNum = input("请输入分配给该作业的物理页框块数:") # 物理页框块数
pageFrame = [None]*int(framePageNum)  # 物理页框
inputPages = input("请输入该作业的页面走向:")
pages = inputPages.split(" ")    # 页面走向
pageFrontNum = len(pages)        # 页面走向总次数
pageDesert = []     # 淘汰页面
pageMissNum = 0     # 缺页次数count = 0;
helpNum = 0;
while(count < pageFrontNum):print("第" + str(count+1) + "次:" + pages[count])isMiss = True   # 是否缺页isEmpty = True  # 是否有空位isExist = False # 物理页框中是否存在本次页面走向# 判断物理页框中是否存在本次页面走向for page in pageFrame:if(pages[count] == page):isExist = Trueif(isExist == True):print("本次页面走向,页框中已经存在!")print("目前物理页框中页面走向为:", end="")for i in pageFrame:print(i,end=" ")print()print()count = count + 1continue# 判断物理页框中有无空位for page in pageFrame:if(page == None):isEmpty = Truebreakelse:isEmpty = False# 本次页面走向,物理页框中不存在,且有空位if(isExist == False and isEmpty == True):for n in range(len(pageFrame)):if(pageFrame[n] == None):pageFrame[n] = pages[count]break# 本次页面走向,物理页框中不存在,且没有空位# 实现 OPT 算法if(isExist == False and isEmpty == False):isExistEle = False  # 是否存在未来不再出现的元素isFound = False     # 是否找到未来下标的元素frameIndex = 0      # 记录的物理页框下标helpStack = []      # 辅助栈# 寻找将来不再出现的,存在于当前物理页框中的元素for i in range(len(pageFrame)):for j in range(count, pageFrontNum):if(pageFrame[i] == pages[j]): # 若当前物理页框中,不存在未来不再出现的元素helpStack.append(j)       # 记录当前未来将遇见的下标isFound = True            # 找到未来下标的元素# 当前物理页框中,存在未来不再出现的元素if(not isFound):frameIndex = i      # 记录当前物理页框isExistEle = True   # 存在未来不再出现的元素breakisFound = Falseif(isExistEle): # 存在未来不再出现的元素pageDesert.append(pageFrame[frameIndex]) # 淘汰页面入栈pageFrame[frameIndex] = pages[count]else: # 存在未来不再出现的元素t = 0for i in helpStack:if(t < i):t = ifor i in range(len(pageFrame)):if(pageFrame[i] == pages[t]):pageDesert.append(pageFrame[i])pageFrame[i] = pages[count]# 计算缺页次数if(isMiss == True):pageMissNum = pageMissNum + 1print("目前物理页框中页面走向为:", end="")for i in pageFrame:print(i, end=" ")print()print()count = count + 1print("缺页次数:" + str(pageMissNum) + "次")
print("一共调用:" + str(pageFrontNum) + "次")
print("缺页中断率:" + str(pageMissNum/pageFrontNum*100) + "%")
print("淘汰页面:", end="")
for i in pageDesert:print(i, end=" ")

运行效果:

请输入分配给该作业的物理页框块数:3
请输入该作业的页面走向:2 3 2 1 5 2 4 5 3 2 5 2
第1次:2
目前物理页框中页面走向为:2 None None 第2次:3
目前物理页框中页面走向为:2 3 None 第3次:2
本次页面走向,页框中已经存在!
目前物理页框中页面走向为:2 3 None 第4次:1
目前物理页框中页面走向为:2 3 1 第5次:5
目前物理页框中页面走向为:2 3 5 第6次:2
本次页面走向,页框中已经存在!
目前物理页框中页面走向为:2 3 5 第7次:4
目前物理页框中页面走向为:4 3 5 第8次:5
本次页面走向,页框中已经存在!
目前物理页框中页面走向为:4 3 5 第9次:3
本次页面走向,页框中已经存在!
目前物理页框中页面走向为:4 3 5 第10次:2
目前物理页框中页面走向为:2 3 5 第11次:5
本次页面走向,页框中已经存在!
目前物理页框中页面走向为:2 3 5 第12次:2
本次页面走向,页框中已经存在!
目前物理页框中页面走向为:2 3 5 缺页次数:6次
一共调用:12次
缺页中断率:50.0%
淘汰页面:1 2 4

【南邮操作系统实验】页面置换算法(FIFO、LRU、OPT) Python 版相关推荐

  1. 操作系统实验--页面置换算法(OPT/FIFO/LRU/LFU)cpp

    前言 学习笔记 void IntoPage(int m);//将第m条指令转化为对应的页数 int isInside(int number,int Msize);//判断页号是否在内存中 void O ...

  2. 操作系统:页面置换算法(LRU、FIFO、OPT)

    继续重温操作系统系列知识,页面置换的三种常见算法为:LRU(最近最久未使用).FIFO(先进先出).最佳置换. 部分公司的面试会考到LRU的知识. LRU置换算法 所谓LRU置换算法,单看字面意思较为 ...

  3. 【南邮操作系统实验】银行家算法Java版

    这个是南邮通达的操作系统实验,实验内容相对比较简单,就是实现一下银行家算法. 我没有参考任何源码,纯属 made by myself,如果差错,欢迎指出. import java.util.*; /* ...

  4. 操作系统之页面置换算法(FIFO、LFU、LRU、OPT算法)

    操作系统之页面置换算法(FIFO.LFU.LRU.OPT算法) TIPS: 主存:实际上的物理内存. 虚存(虚拟内存):虚拟存储技术.虚拟内存使计算机系统内存管理的一种技术.它使得应用程序认为它拥有的 ...

  5. 【操作系统】页面置换算法

    页面置换算法 在进程运行过程中,若需要访问的物理块不在内存中,就需要通过一定的方式来将页面载入内存,而此时内存很可能已无空闲空间,因此就需要一定的算法来选择内存中要被置换的页面,这种算法就被称为页面置 ...

  6. 【南邮操作系统实验】页面置换算法(FIFO、LRU、OPT)图形化界面(JavaFx)

    页面置换算法图形化界面 前言 运行效果 源码 FIFO LRU OPT FXML界面 控制器 启动类 前言 其实以前操作系统实验的时候我写过了三份了:(命令行) 页面置换算法 (FIFO.LRU.OP ...

  7. 【南邮操作系统实验】页面置换算法 (FIFO、LRU、OPT)Java 版

    页面置换算法Java版 先进先出置换算法(FIFO) 最近最久未使用置换算法(LRU) 最佳置换算法(OPT) 帮女朋友写了份 Python版的,Python版戳这里 帮女朋友舍友写了份 C++ 版的 ...

  8. 【南邮操作系统实验】页面置换算法(FIFO、LRU、OPT) C++ 版

    页面置换算法 先进先出置换算法(FIFO) 最近最久未使用置换算法(LRU) 最佳置换算法(OPT) 写好了 Java 版和 Python 版的- Java版这里 Python版戳这里 帮女朋友舍友写 ...

  9. 操作系统:页面置换算法(FIFO算法、LRU算法、LFU算法、NRU算法)实验报告

    操作系统实验报告 一.实验名称 :页面置换算法 二.实验目的: 在实验过程中应用操作系统的理论知识. 三.实验内容: 采用C/C++编程模拟实现:FIFO算法.LRU算法.LFU算法.NRU算法四个页 ...

最新文章

  1. oracle 分割取值,oracle中的分割函数(split效果)
  2. 如何优雅地在云上“摆摊” 直播带货,这些技术很重要
  3. oracle odi 资料档案库访问期间出现未分类的异常错误,oracle学习_基本语法
  4. Ubuntu18.04下NNIE模型转换环境搭建
  5. PTA 程序设计天梯赛(121~140题)
  6. 0627-TP整理三(对表的操作,数据的显示)
  7. 在SpringMVC中使用@RequestBody和@ResponseBody注解处理json时,报出HTTP Status 415的解决方案...
  8. 【机器学习Machine Learning】资料大全
  9. 【0304】密码分类
  10. SVN客户端——SmartSVN功能详解
  11. 如何在PPT中制作动态图表,学会这种方法实在太简单
  12. linux xv命令什么意思,Linux部分命令解释(命令缩写代表什么意思)
  13. 百度搜索引擎都有哪些算法
  14. java图片缩放工具类_JAVA操作图片裁切与缩放的一个工具类(个人收藏)
  15. 网络安全认证与加密协议算法整合
  16. word怎么删除空白页
  17. Mysql导出数据库设计文档
  18. 参数非法异常:java.lang.IllegalArgumentException: class com.xxx.SignDetailRQ declares multiple JSON fields
  19. 基于JAVA毕业设计的网上图书销售管理系统
  20. 关于hpv3000HPDV2000想把vista改成xp的朋友可以看下

热门文章

  1. 有哪些行业或生意是电商无法取代的?
  2. 不玩游戏,855和730处理器在日常应用的速度差别有多大?
  3. 题解 CF1391B 【Fix You】
  4. 如何使用损坏或删除SQL Server事务日志文件重建数据库
  5. ad焊盘对参考点复制_点对点复制
  6. SQL Server 2016的新功能–临时数据表
  7. azure云数据库_Azure Data Studio中的服务器和数据库仪表板
  8. golang的指针和切片
  9. The Nighth Assignment
  10. 终于解决了贴吧手机版的一个重大BUG