OPT,LRU,FIFO页面置换算法python实现

本文介绍了请求页式存储管理中的页面置换算法模拟,包括OPT(最优)、LRU(最近最久未使用)和FIFO(先进先出)算法的实现。实验目的是理解内存分页策略,掌握调页策略,比较不同算法的优劣,并探讨页面大小和内存容量对命中率的影响。内容涵盖了算法原理和应用,旨在通过编程实现来学习和评估这些算法。
摘要由CSDN通过智能技术生成

实验三 请求页式存储管理中常用页面置换算法模拟
实现效果如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
【开发语言及实现平台或实验环境】
C++/C#
Microsoft Visual Studio 6.0/ Microsoft Visual Studio .NET 2003

【实验目的】
(1)了解内存分页管理策略
(2)掌握调页策略
(3)掌握一般常用的调度算法
(4)学会各种存储分配算法的实现方法。
(5)了解页面大小和内存实际容量对命中率的影响。

【实验要求】
(1)采用页式分配存储方案,通过分别计算不同算法的命中率来比较算法的优劣,同时也考虑页面大小及内存实际容量对命中率的影响;
(2)实现OPT 算法 (最优置换算法) 、LRU 算法 (Least Recently) 、 FIFO 算法 (First IN First Out)的模拟;
(3)会使用某种编程语言。

【实验原理】
分页存储管理将一个进程的逻辑地址空间分成若干大小相等的片,称为页面或页。
在进程运行过程中,若其所要访问的页面不在内存而需把它们调入内存,但内存已无空闲空间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据,送磁盘的对换区中。但应将哪 个页面调出,须根据一定的算法来确定。通常,把选择换出页面的算法称为页面置换算法(Page_Replacement Algorithms)。
一个好的页面置换算法,应具有较低的页面更换频率。从理论上讲,应将那些以后不再会访问的页面换出,或将那些在较长时间内不会再访问的页面调出。
一、最佳置换算法OPT(Optimal)
它是由Belady于1966年提出的一种理论上的算法。其所选择的被淘汰页面,将是以后永不使用的或许是在最长(未来)时间内不再被访问的页面。采用最

以下是Python实现页面置换算法OPTFIFOLRU和clock算法的程序: ```python # -*- coding: utf-8 -*- # 定义常量 PAGE_NUM = 10 # 页面数 MEMORY_SIZE = 3 # 内存块数 # 生成随机页面序列 page_seq = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # 随机打乱页面序列 import random random.shuffle(page_seq) # 初始化内存 memory = [] # OPT算法 def opt(page): if page not in memory: if len(memory) < MEMORY_SIZE: memory.append(page) else: max_index = 0 max_page = memory[0] for i in range(MEMORY_SIZE): if memory[i] not in page_seq: max_page = memory[i] break elif page_seq.index(memory[i]) > max_index: max_index = page_seq.index(memory[i]) max_page = memory[i] memory[memory.index(max_page)] = page # FIFO算法 def fifo(page): if page not in memory: if len(memory) < MEMORY_SIZE: memory.append(page) else: memory.pop(0) memory.append(page) # LRU算法 def lru(page): if page in memory: memory.remove(page) else: if len(memory) >= MEMORY_SIZE: memory.pop(0) memory.append(page) # clock算法 def clock(page): global clock_pointer if page not in memory: if len(memory) < MEMORY_SIZE: memory.append(page) else: while True: if memory[clock_pointer][1] == 0: memory[clock_pointer] = [page, 1] clock_pointer = (clock_pointer + 1) % MEMORY_SIZE break else: memory[clock_pointer][1] = 0 clock_pointer = (clock_pointer + 1) % MEMORY_SIZE # 执行页面置换算法 for i in range(PAGE_NUM): opt(page_seq[i]) #fifo(page_seq[i]) #lru(page_seq[i]) #clock(page_seq[i]) # 输出每次置换后的内存状态 print("第%d次置换:" % (i+1), end=" ") for j in range(MEMORY_SIZE): if j < len(memory): print(memory[j], end=" ") else: print("-", end=" ") print() # 输出缺页率 print("缺页率:", (PAGE_NUM - len(memory)) / PAGE_NUM) ``` 程序中先定义了常量`PAGE_NUM`和`MEMORY_SIZE`,分别表示页面数和内存块数。然后生成随机的页面序列,打乱顺序,用于模拟页面的访问。接着定义了全局变量`memory`和`clock_pointer`,分别表示当前内存状态和clock算法的指针位置。 程序中实现了四种页面置换算法OPTFIFOLRU和clock算法。每次访问一个页面时,会根据当前算法的规则来决定是否需要将该页面加入内存,如果内存已满,则选择一个页面进行替换。每次置换后会输出当前的内存状态,以便观察算法的效果。最后输出缺页率。 注释中提到的FIFOLRU算法的实现也在程序中给出,可以通过注释掉OPT算法的执行语句,取消注释FIFOLRU或clock算法的执行语句,来测试不同算法的效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值