今天完成结对作业
【题目描述】所谓LRU算法,是指在发生缺页并且没有空闲主存块时,把最近最少使用的页面换出主存块,腾出地方来调入新页面。
问题描述:一进程获得n个主存块的使用权,对于给定的进程访问页面次序,问当采用LRU算法时,输出发生的缺页次数。
【练习要求】请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。
【输入格式】在第一行中输入进程获得使用权的主存块数量n。
在第二行中输入进程访问页面的次序,各数据之间以空格为间隔。
【输出格式】输出对于给定的n和进程访问页面的次序,输出采用LRU算法时的缺页次数。
【输入样例】3
1 2 3 4 1 2 5 1 2 3 4 5
【输出样例】7
代码量:
from collections import OrderedDict
def lru_page_faults(page_sequence, memory_size):
# 初始化一个OrderedDict来存储当前在内存中的页面及其访问时间(这里用索引表示时间)
memory = OrderedDict()
# 缺页计数器
page_faults = 0
for page in page_sequence:
# 如果页面已经在内存中,更新其访问时间(移到末尾)
if page in memory:
del memory[page] # 移除旧记录,以便重新插入时放于末尾
else:
# 如果内存已满,移除最久未使用的页面(即最前面的页面)
if len(memory) == memory_size:
memory.popitem(last=False) # 移除最早访问的页面
page_faults += 1 # 发生缺页
else:
page_faults += 1 # 新的页面访问,且内存未满,也计为缺页
# 将当前页面加入到内存中(表示最近访问)
memory[page] = None
return page_faults
# 示例
page_sequence = [1, 2, 3, 4, 2, 1, 5, 6, 2, 3]
memory_size = int(input("请输入主存块数量n(n>1):"))
print("缺页次数:", lru_page_faults(page_sequence, memory_size))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2023-05-15 22