Python实现页面置换算法

article/2025/10/8 8:37:59

Python实现页面置换算法

FIFO LRU OPT


页面置换——FIFO、LRU、OPT

  • Python实现页面置换算法
  • 页面置换算法:
  • 一、FIFO(先进先出置换算法)
    • 1.算法解析
      • 算法原理:当需要淘汰一个页面时,总是选择驻留主存时间最长的页面进行淘汰,即先进入主存的页面先淘汰。其理由是:最早调入主存的页面不再被使用的可能性最大。
    • 2.代码实现
  • 二、LRU(最近最近未使用算法)
    • 1.算法解析
      • 算法原理利用局部性原理,根据一个作业在执行过程中过去的页面访问历史来推测未来的行为。它认为过去一段时间里不曾被访问过的页面,在最近的将来可能也不会再被访问。所以,这种算法的实质是:当需要淘汰一个页面时,总是选择在最近一段时间内最久不用的页面予以淘汰。
    • 2.代码实现
  • 三、OPT(最佳置换算法)
    • 1.算法解析
      • 算法原理从主存中移出永远不再需要的页面;如无这样的页面存在,则选择最长时间不需要访问的页面。于所选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。
    • 2.代码实现
  • 算法全部代码下载
  • GUI代码下载


页面置换算法:

在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。


一、FIFO(先进先出置换算法)

1.算法解析

算法原理:当需要淘汰一个页面时,总是选择驻留主存时间最长的页面进行淘汰,即先进入主存的页面先淘汰。其理由是:最早调入主存的页面不再被使用的可能性最大。

如图所示(示例):

FIFO先进先出示例

2.代码实现

def FIFO(page,arr):print("FIFO页面置换过程为:" )result=[]loss_page=0sum=0for item in arr:if len(result)==page:for j in range(sum, len(arr)):if arr[j] in result:print("no exchange")print("第%i页"%j,end="")print(result)else:del result[0]result.append(arr[j])loss_page += 1print("第%i页" % j,end="")print(result)breakelif item in result:print("no exchange")print("第%i页" % sum,end="")print(result)sum+=1else:result.append(item)loss_page+=1print("第%i页" % sum,end="")print(result)sum+=1result_page=float((loss_page)/len(arr))print("FIFO缺页率为:%.2f"%result_page)

二、LRU(最近最近未使用算法)

1.算法解析

算法原理利用局部性原理,根据一个作业在执行过程中过去的页面访问历史来推测未来的行为。它认为过去一段时间里不曾被访问过的页面,在最近的将来可能也不会再被访问。所以,这种算法的实质是:当需要淘汰一个页面时,总是选择在最近一段时间内最久不用的页面予以淘汰。

在这里插入图片描述

2.代码实现

代码如下(示例):

def LRU(page,arr):print(arr)print("LRU页面置换过程为:")result = []loss_page = 0sum = 0for item in arr:if len(result)==page:for j in range(sum, len(arr)):if arr[j] in result:print("no exchange")print("第%i页" % j, end="")p=result[result.index(arr[j])]del result[result.index(arr[j])]result.insert(0,p)print(result)else:del result[-1]result.insert(0,arr[j])loss_page += 1print("第%i页" % j, end="")print(result)breakelif item in result:print("no exchange")p = result[result.index(item)]del result[result.index(item)]result.insert(0, p)print("第%i页" % sum, end="")print(result)sum+=1else:result.insert(0,item)loss_page+=1print("第%i页" % sum, end="")print(result)sum+=1result_page=float((loss_page)/len(arr))print("LRU缺页率为:%.2f"%result_page)

三、OPT(最佳置换算法)

1.算法解析

算法原理从主存中移出永远不再需要的页面;如无这样的页面存在,则选择最长时间不需要访问的页面。于所选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。

在这里插入图片描述

2.代码实现

def OPT(page,arr):print("OPT页面置换过程为:")result = []loss_page = 0sum = 0for item in arr:if len(result)==page:for j in range(sum, len(arr)):if arr[j] in result:print("no exchange")print("第%i页" % j, end="")p = result[result.index(arr[j])]del result[result.index(arr[j])]result.insert(0, p)print(result)else:result_number=bidui(arr[j:len(arr)],result)for o in result:if result_number==o:result.remove(o)result.append(arr[j])loss_page += 1print("第%i页" % j, end="")print(result)breakelif item in result:print("no exchange")print("第%i页" % sum, end="")print(result)sum+=1else:result.append(item)loss_page+=1print("第%i页" % sum, end="")print(result)sum+=1result_page=float((loss_page)/len(arr))print("OPT缺页率为:%.2f"%result_page)

全部代码如下


算法全部代码下载

import random
def FIFO(page,arr):print("FIFO页面置换过程为:" )result=[]loss_page=0sum=0for item in arr:if len(result)==page:for j in range(sum, len(arr)):if arr[j] in result:print("no exchange")print("第%i页"%j,end="")print(result)else:del result[0]result.append(arr[j])loss_page += 1print("第%i页" % j,end="")print(result)breakelif item in result:print("no exchange")print("第%i页" % sum,end="")print(result)sum+=1else:result.append(item)loss_page+=1print("第%i页" % sum,end="")print(result)sum+=1result_page=float((loss_page)/len(arr))print("FIFO缺页率为:%.2f"%result_page)def LRU(page,arr):print(arr)print("LRU页面置换过程为:")result = []loss_page = 0sum = 0for item in arr:if len(result)==page:for j in range(sum, len(arr)):if arr[j] in result:print("no exchange")print("第%i页" % j, end="")p=result[result.index(arr[j])]del result[result.index(arr[j])]result.insert(0,p)print(result)else:del result[-1]result.insert(0,arr[j])loss_page += 1print("第%i页" % j, end="")print(result)breakelif item in result:print("no exchange")p = result[result.index(item)]del result[result.index(item)]result.insert(0, p)print("第%i页" % sum, end="")print(result)sum+=1else:result.insert(0,item)loss_page+=1print("第%i页" % sum, end="")print(result)sum+=1result_page=float((loss_page)/len(arr))print("LRU缺页率为:%.2f"%result_page)def bidui(param, result):list_1 = {}for item in param:list_1[item]=param.index(item)for i in result:if i not in list_1.keys():return ielse:passreturn list(list_1.keys())[list(list_1.values()).index(max(list_1.values()))]
def OPT(page,arr):print("OPT页面置换过程为:")result = []loss_page = 0sum = 0for item in arr:if len(result)==page:for j in range(sum, len(arr)):if arr[j] in result:print("no exchange")print("第%i页" % j, end="")p = result[result.index(arr[j])]del result[result.index(arr[j])]result.insert(0, p)print(result)else:result_number=bidui(arr[j:len(arr)],result)for o in result:if result_number==o:result.remove(o)result.append(arr[j])loss_page += 1print("第%i页" % j, end="")print(result)breakelif item in result:print("no exchange")print("第%i页" % sum, end="")print(result)sum+=1else:result.append(item)loss_page+=1print("第%i页" % sum, end="")print(result)sum+=1result_page=float((loss_page)/len(arr))print("OPT缺页率为:%.2f"%result_page)if __name__ == '__main__':arr=[]number1=int(input("请输入页面流长度"))for i in range(number1):arr.append(random.randint(1,number1))print(arr)number=int(input("请输入物理块儿数"))FIFO(number,arr)LRU(number, arr)OPT(number,arr)

另附GUI算法实现界面如图所示:

在这里插入图片描述

GUI代码下载

# * -*- coding:utf-8 -*-
# * @Author: Go-getter Ram 
import random
from tkinter import *
import timearr = []
for i in range(20):arr.append(random.randint(1, 5))
def gettime():timestr = time.strftime("%H:%M:%S") # 获取当前的时间并转化为字符串lb.configure(text=timestr)   # 重新设置标签文本root.after(1000,gettime) # 每隔1s调用函数 gettime 自身获取时间root = Tk()
root.title('FIFO,OPT,LRU页面置换算法')
lb = Label(root,text='',fg='blue',font=("黑体",24))
lb.pack()
root.geometry('800x600') # 这里的乘号不是 * ,而是小写英文字母 x
gettime()def run1():page=int(inp.get())txt.insert(END, "FIFO页面置换过程为:\n")result = []loss_page = 0sum = 0for item in arr:if len(result) == page:for j in range(sum, len(arr)):if arr[j] in result:txt.insert(END, "no exchange\n")else:del result[0]result.append(arr[j])loss_page += 1txt.insert(END, "\n")txt.insert(END, result)breakelif item in result:txt.insert(END, "no exchange\n")txt.insert(END, result)sum += 1else:result.append(item)loss_page += 1sum += 1txt.insert(END, "\n")txt.insert(END, result)result_page = float((loss_page + page) / len(arr))txt.insert(END, "FIFO缺页率为:%.2f\n" % result_page)txt.insert(END, "\n")inp.delete(0, END)  # 清空输入
def run2():page = int(inp.get())txt.insert(END, "LRU页面置换过程为:\n")result = []loss_page = 0sum = 0for item in arr:if len(result) == page:for j in range(sum, len(arr)):if arr[j] in result:txt.insert(END, "no exchange\n")p = result[result.index(arr[j])]del result[result.index(arr[j])]result.insert(0, p)txt.insert(END, "\n")txt.insert(END, result)else:del result[-1]result.insert(0, arr[j])loss_page += 1txt.insert(END, "\n")txt.insert(END, result)breakelif item in result:txt.insert(END, "no exchange\n")p = result[result.index(item)]del result[result.index(item)]result.insert(0, p)txt.insert(END, "\n")txt.insert(END, result)sum += 1else:result.insert(0, item)loss_page += 1sum += 1txt.insert(END, "\n")txt.insert(END, result)result_page = float((loss_page) / len(arr))txt.insert(END, "LRU缺页率为:%.2f" % result_page)txt.insert(END,"\n")inp.delete(0, END)  # 清空输入
def bidui(param, result):list_1 = {}for item in param:list_1[item]=param.index(item)for i in result:if i not in list_1.keys():return ielse:passreturn list(list_1.keys())[list(list_1.values()).index(max(list_1.values()))]
def run3():page = int(inp.get())txt.insert(END, "OPT页面置换过程为:\n")result = []loss_page = 0sum = 0for item in arr:if len(result) == page:for j in range(sum, len(arr)):if arr[j] in result:txt.insert(END, "no exchange\n")p = result[result.index(arr[j])]del result[result.index(arr[j])]result.insert(0, p)txt.insert(END, result)txt.insert(END, "\n")else:result_number = bidui(arr[j:len(arr)], result)for o in result:if result_number == o:result.remove(o)result.append(arr[j])loss_page += 1txt.insert(END, result)txt.insert(END, "\n")breakelif item in result:txt.insert(END, "no exchange\n")txt.insert(END, result)txt.insert(END, "\n")sum += 1else:result.append(item)loss_page += 1sum += 1txt.insert(END, result)txt.insert(END, "\n")result_page = float((loss_page) / len(arr))txt.insert(END, "OPT缺页率为:%.2f" % result_page)txt.insert(END,"\n")inp.delete(0, END)  # 清空输入lb1 = Label(root, text='请输入物理块儿数:按下面三个按钮之一进行算法验证')
lb1.place(relx=0.1, rely=0.1, relwidth=0.8, relheight=0.1)
str_arr=str(arr)
lb2 = Label(root, text=str_arr)
lb2.place(relx=0.1, rely=0.1, relwidth=0.8, relheight=0.025)
inp = Entry(root)
inp.place(relx=0.1, rely=0.2, relwidth=0.3, relheight=0.1)# 方法-直接调用FIFO run1()
btn1 = Button(root, text='FIFO', command=run1)
btn1.place(relx=0.1, rely=0.4, relwidth=0.3, relheight=0.1)# 方法二利用 LRU 传参数调用run2()
btn2 = Button(root, text='LRU', command=lambda: run2())
btn2.place(relx=0.3, rely=0.4, relwidth=0.3, relheight=0.1)# 方法三利用 OPT 传参数调用run3()
btn3 = Button(root, text='OPT', command=lambda: run3())
btn3.place(relx=0.6, rely=0.4, relwidth=0.3, relheight=0.1)# 在窗体垂直自上而下位置60%处起,布局相对窗体高度40%高的文本框
lb_txt = Label(root, text='检验结果:')
lb_txt.place(relx=0.1, rely=0.5, relwidth=0.3, relheight=0.1)
txt = Text(root)
txt.place(rely=0.6, relheight=0.4)
root.mainloop()<font color=#999AAA >编写不易——求赞~

http://chatgpt.dhexx.cn/article/71ErpU4M.shtml

相关文章

页面置换算法java_页面置换算法之Clock算法

1.前言 缓冲池是数据库最终的概念&#xff0c;数据库可以将一部分数据页放在内存中形成缓冲池&#xff0c;当需要一个数据页时&#xff0c;首先检查内存中的缓冲池是否有这个页面&#xff0c;如果有则直接命中返回&#xff0c;没有则从磁盘中读取这一页&#xff0c;然后缓存到内…

一文看懂页面置换算法

页面置换算法分为两类 1、局部页面置换算法 最优页面置换算法&#xff08;OPT、optimal&#xff09;先进先出算法&#xff08;FIFO&#xff09;最近最久未使用算法&#xff08;LRU,Least Recently Used&#xff09;时钟页面置换算法&#xff08;Clock&#xff09;最不常用算法…

虚拟内存页面置换算法

虚拟内存页面置换算法 虚拟地址空间页表分页式分段式段页式 页面置换算法最优置换算法( OPT)先进先出算法&#xff08;FIFO)最近最久未使用算法(LRU) 虚拟内存是计算机系统内存管理的一种技术。 它使得应用程序认为它拥有连续的可用的内存&#xff08;一个连续完整的地址空间&a…

OS之页面置换算法

之前几篇博客记录了OS内存管理的一些知识和技术&#xff0c;接下来将继续深入&#xff0c;介绍一些页面置换算法&#xff0c;这里包括一些我们大家都略有耳闻的算法。 置换算法 当出现缺页故障时&#xff0c;需要从外存调入新的页面到内存中去&#xff0c;而如果此时内存已满…

os 页面置换算法

在进程运行过程中&#xff0c;若其所要访问的页面不在内存&#xff0c;而需把它们调入内存&#xff0c;但内部无空闲空间时&#xff0c;为了保证该进程能正常运行&#xff0c;系统必须从内存中调出一页程序或数据送到磁盘的对换区中。但应将哪个页面调出&#xff0c;须根据一定…

内存页面置换算法

前面我们说过了进程的调度算法&#xff0c;今天我们继续来盘内存页面的置换算法&#xff0c;给你整的明明白白的&#x1f92a;&#x1f92a;&#x1f92a;。 内存页面置换算法主要有下面这么几种&#xff1a; 最佳页面置换算法&#xff08;OPT&#xff09;先进先出置换算法&a…

三种页面置换算法(详解)

地址映射过程中&#xff0c;若在页面中发现所要访问的页面不在内存中&#xff0c;则产生缺页中断。当发生缺页中断时&#xff0c;如果操作系统内存中没有空闲页面&#xff0c;则操作系统必须在内存选择一个页面将其移出内存&#xff0c;以便为即将调入的页面让出空间。而用来选…

计算机操作系统——页面置换算法

声明&#xff1a;本篇博客参考书籍《计算机操作系统》&#xff08;西安电子科技大学出版社&#xff09; 文章目录 一、最佳页面置换算法1、基本知识2、算法思想 二、先进先出&#xff08;FIFO&#xff09;页面置换算法1、基本知识2、算法思想 三、最近最久未使用&#xff08;L…

页面置换算法

文章目录 一、什么是页面置换算法&#xff1f;二、常用的页面置换算法1. FIFO(先进先出算法)2. OPT(最佳置换算法)3. LRU(最近最少使用算法)4. Clock(时钟置换算法)5. LFU(最不常用算法)6. MFU(最常使用算法) 三、程序设计 一、什么是页面置换算法&#xff1f; 进程运行时&…

一文讲懂页面置换算法,带例题详解

目录 ​什么是页面置换算法&#xff1f; ​缺页中断次数和页面置换次数 ​啥子是缺页&#xff1f; ​啥子是中断&#xff1f; ​啥子是缺页中断&#xff1f; ​缺页中断次数 ​最佳置换算法OPT和先进先出置换算法FIFO ​最佳置换算法OPT ​算法思想 ​算法优点 ​算…

回声状态网络ESN(原理)

回声状态网络ESN(原理) 结构特点 网络有3层&#xff1a;输入层 - 隐含层 - 输出层

基于回声状态网络(ESN)的时间序列预测

基于回声状态网络(ESN)的时间序列预测 matlab代码 ID:69100644585791395

【回声状态网络ESN预测】基于粒子群优化回声状态网络ESN实现数据预测附matlab代码

1 简介 由于结构简单,收敛速度快等优点,回声状态网络(Echo State Network, ESN)已被广泛的用于时间序列的预测.针对回声状态网络中随机生成权值矩阵带来的不适用于特定时间序列的问题,本文提出利用粒子群优化算法来优化回声状态网络部分随机权值..实验结果表明,本文提出的方法…

第二十九课.回声状态网络ESN

目录 Echo State NetworkESN的训练与预测关于ESN工作原理的理解 基于Numpy的ESN Echo State Network ESN的训练与预测 回声状态网络&#xff08;Echo State Network&#xff09;又称为库计算&#xff0c;即Reservoir Computing&#xff0c;被视为是一种神经网络的扩展。 Res…

【无人机】回波状态网络(ESN)在固定翼无人机非线性控制中的应用(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【MLPs+ESN】利用多层感知机MLPs对经典ESN(回声状态网络)的输出权值计算进行优化的MATLAB仿真

单独的ESN仿真&#xff1a; ESN的运行结果如下所示&#xff1a; 这个部分的误差为&#xff1a; 0.0435 ESN部分就不多做介绍了&#xff0c;你应该了解的&#xff0c;下面我们对ESN和BP改进和极限学习改进分别进行修改和说明&#xff0c;并进行仿真。 ESNBP的仿真&#xff1a; …

回声状态网络(ESN)实现手写数字识别(MNIST)

文章目录 回声状态网络状态方程输出方程分类问题 加载 MNIST 数据集标签 onehot 编码转化成时间序列训练 ESN储备池状态的时空分布测试结果 回声状态网络 状态方程 输出方程 分类问题 加载 MNIST 数据集 from torchvision.datasets import mnist train_set mnist.MNIST(./da…

回声状态网络(ESN)的公式推导及代码实现

1. ESN的任务 给定一段信号&#xff1a; u ( 0 ) &#xff0c; u ( 1 ) &#xff0c; ⋅ ⋅ ⋅ &#xff0c; u ( N t − 1 ) u(0)&#xff0c;u(1)&#xff0c;&#xff0c;u(N_t-1) u(0)&#xff0c;u(1)&#xff0c;⋅⋅⋅&#xff0c;u(Nt​−1) 和目标值&#xff1a; v (…

matlab 回声状态网络ESN的时间序列预测

1、内容简介 略 537-可以交流、咨询、答疑 2、内容说明 ESN是Jaeger于2001年提出一种新型递归神经网络&#xff0c;ESN一经提出便成为学术界的热点&#xff0c;并被大量地应用到各种不同的领域中&#xff0c;包括动态模式分类、机器人控制、对象跟踪核运动目标检测、事件监测…

手机esn不可用怎么解决_什么是ESN,为什么我不担心它是否干净?

手机esn不可用怎么解决 If you’re in the market for a cellphone, especially a used one, you’ll hear a lot of talk about ESNs with an emphasis on whether or not the phone is “clean”. What exactly does acronym stand for and what does it mean if the phone i…